Skip to content

📘 PHẦN 1: NHẬP MÔN PHP

🎯 Mục tiêu tổng quát

  • Hiểu được khái niệm cơ bản về PHP và cách PHP hoạt động với web
  • Nắm vững cú pháp PHP, biến, hàm và cấu trúc điều khiển
  • Biết cách kết hợp PHP với HTML để tạo trang web động
  • Xây dựng được ứng dụng web đơn giản với PHP

🧑‍🏫 Bài 1: Giới thiệu PHP

PHP là gì?

  • PHP (PHP: Hypertext Preprocessor) là ngôn ngữ lập trình kịch bản phía server
  • Được thiết kế dành riêng cho phát triển web
  • Mã PHP được thực thi trên server và kết quả được trả về client dưới dạng HTML
  • Có thể nhúng PHP vào trong HTML

File PHP đầu tiên

php
<!DOCTYPE html>
<html>
<head>
    <title>Trang PHP đầu tiên</title>
</head>
<body>
    <h1>Hello PHP</h1>
    
    <?php
        // Đây là comment một dòng
        
        /* Đây là comment
        nhiều dòng */
        
        echo "Hello, World!";
        
        // In ra với thông tin
        echo "<p>Hôm nay là " . date("d/m/Y") . "</p>";
    ?>
</body>
</html>

Tạo file index.php và mở terminal chạy lệnh sau:

bash
php -S localhost:8000

Truy cập vào http://localhost:8000 để xem kết quả.

Cú pháp PHP cơ bản

  • PHP bắt đầu với <?php và kết thúc với ?>
  • Mỗi câu lệnh kết thúc bằng dấu chấm phẩy (😉
  • PHP phân biệt chữ hoa và chữ thường trong tên biến
  • Có thể nhúng nhiều block PHP trong một trang HTML

🧑‍🏫 Bài 2: Biến và kiểu dữ liệu trong PHP

Biến trong PHP

  • Biến bắt đầu với ký tự $
  • Tên biến phải bắt đầu bằng một chữ cái hoặc dấu gạch dưới
  • Tên biến không được bắt đầu bằng số
  • PHP là ngôn ngữ có kiểu dữ liệu động (không cần khai báo kiểu)
php
<?php
    // Khai báo và gán giá trị cho biến
    $name = "Nguyễn Văn A";
    $age = 25;
    $isStudent = true;
    
    // In ra giá trị biến
    echo "Tên: " . $name . "<br>";
    echo "Tuổi: " . $age . "<br>";
    echo "Là sinh viên: " . ($isStudent ? "Có" : "Không");
?>

Kiểu dữ liệu cơ bản

php
<?php
    // Kiểu chuỗi (String)
    $str = "Hello PHP";
    echo gettype($str) . ": " . $str . "<br>";
    
    // Kiểu số nguyên (Integer)
    $int = 42;
    echo gettype($int) . ": " . $int . "<br>";
    
    // Kiểu số thực (Float/Double)
    $float = 3.14;
    echo gettype($float) . ": " . $float . "<br>";
    
    // Kiểu boolean
    $bool = true;
    echo gettype($bool) . ": " . ($bool ? "true" : "false") . "<br>";
    
    // Kiểu null
    $null = null;
    echo gettype($null) . ": null<br>";
    
    // Kiểm tra kiểu dữ liệu
    var_dump($str);
    echo "<br>";
    var_dump($int);
    echo "<br>";
    var_dump($bool);
?>

Hằng số

php
<?php
    // Định nghĩa hằng
    define("PI", 3.14159);
    define("APP_NAME", "My PHP Application");
    define("DEBUG_MODE", true);
    
    // Sử dụng hằng
    echo "PI = " . PI . "<br>";
    echo "Tên ứng dụng: " . APP_NAME . "<br>";
    
    // Hằng số từ PHP 7.0
    const DATABASE = "mysql";
    const DB_HOST = "localhost";
    
    echo "Database: " . DATABASE;
?>

🧑‍🏫 Bài 3: Toán tử và cấu trúc điều khiển

Các toán tử trong PHP

php
<?php
    // Toán tử số học
    $a = 10;
    $b = 3;
    echo "Cộng: " . ($a + $b) . "<br>";        // 13
    echo "Trừ: " . ($a - $b) . "<br>";         // 7
    echo "Nhân: " . ($a * $b) . "<br>";        // 30
    echo "Chia: " . ($a / $b) . "<br>";        // 3.3333...
    echo "Chia lấy dư: " . ($a % $b) . "<br>"; // 1
    echo "Lũy thừa: " . ($a ** $b) . "<br>";   // 10^3 = 1000
    
    // Toán tử gán
    $x = 5;
    $x += 3;  // $x = $x + 3
    echo "x = " . $x . "<br>";  // 8
    
    // Toán tử so sánh
    $p = 5;
    $q = "5";
    echo "p == q: " . ($p == $q ? "true" : "false") . "<br>";   // true (so sánh giá trị)
    echo "p === q: " . ($p === $q ? "true" : "false") . "<br>"; // false (so sánh giá trị và kiểu)
    
    // Toán tử tăng/giảm
    $i = 5;
    echo "i++ = " . $i++ . "<br>"; // 5 (dùng rồi mới tăng)
    echo "i = " . $i . "<br>";     // 6
    echo "++i = " . ++$i . "<br>"; // 7 (tăng trước rồi mới dùng)
    
    // Toán tử chuỗi
    $firstName = "Nguyễn";
    $lastName = "Văn A";
    $fullName = $firstName . " " . $lastName;
    echo "Họ tên: " . $fullName;
?>

Cấu trúc điều kiện

php
<?php
    $score = 75;
    
    // Câu lệnh if-else
    if ($score >= 90) {
        echo "Xuất sắc";
    } elseif ($score >= 80) {
        echo "Giỏi";
    } elseif ($score >= 70) {
        echo "Khá";
    } elseif ($score >= 60) {
        echo "Trung bình";
    } else {
        echo "Yếu";
    }
    echo "<br>";
    
    // Cú pháp viết tắt if-else
    echo ($score >= 60) ? "Đạt" : "Không đạt";
    echo "<br>";
    
    // Switch-case
    $day = 3;
    switch ($day) {
        case 1:
            echo "Chủ nhật";
            break;
        case 2:
            echo "Thứ hai";
            break;
        case 3:
            echo "Thứ ba";
            break;
        case 4:
            echo "Thứ tư";
            break;
        case 5:
            echo "Thứ năm";
            break;
        case 6:
            echo "Thứ sáu";
            break;
        case 7:
            echo "Thứ bảy";
            break;
        default:
            echo "Ngày không hợp lệ";
    }
?>

Vòng lặp

php
<?php
    // Vòng lặp for
    echo "<h3>Vòng lặp for</h3>";
    echo "<ul>";
    for ($i = 1; $i <= 5; $i++) {
        echo "<li>Item $i</li>";
    }
    echo "</ul>";
    
    // Vòng lặp while
    echo "<h3>Vòng lặp while</h3>";
    $count = 1;
    echo "<ul>";
    while ($count <= 5) {
        echo "<li>Count: $count</li>";
        $count++;
    }
    echo "</ul>";
    
    // Vòng lặp do-while
    echo "<h3>Vòng lặp do-while</h3>";
    $num = 1;
    echo "<ul>";
    do {
        echo "<li>Number: $num</li>";
        $num++;
    } while ($num <= 5);
    echo "</ul>";
    
    // Lệnh break và continue
    echo "<h3>Break và Continue</h3>";
    echo "<p>Các số lẻ từ 1-10:</p>";
    for ($i = 1; $i <= 10; $i++) {
        if ($i % 2 == 0) {
            continue; // Bỏ qua số chẵn
        }
        echo "$i ";
        
        if ($i == 7) {
            break; // Dừng khi gặp số 7
        }
    }
?>

🧑‍🏫 Bài 4: Hàm và Array trong PHP

Hàm trong PHP

php
<?php
    // Hàm không có tham số
    function sayHello() {
        echo "Hello from PHP function! <br>";
    }
    
    // Gọi hàm
    sayHello();
    
    // Hàm có tham số
    function greet($name) {
        echo "Xin chào, $name! <br>";
    }
    
    greet("Nguyễn Văn A");
    
    // Hàm với tham số mặc định
    function calculateTotal($price, $taxRate = 0.1) {
        $tax = $price * $taxRate;
        $total = $price + $tax;
        return $total;
    }
    
    $amount = calculateTotal(100);  // Sử dụng tax rate mặc định
    echo "Tổng: $amount <br>";
    
    $amount2 = calculateTotal(100, 0.05);  // Chỉ định tax rate
    echo "Tổng với thuế 5%: $amount2 <br>";
    
    // Hàm với nhiều giá trị trả về (sử dụng array)
    function getMinMax($numbers) {
        return [
            'min' => min($numbers),
            'max' => max($numbers)
        ];
    }
    
    $result = getMinMax([10, 5, 8, 20, 3]);
    echo "Min: " . $result['min'] . ", Max: " . $result['max'] . "<br>";
?>

Array trong PHP

php
<?php
    // Mảng số nguyên (indexed array)
    $numbers = [1, 2, 3, 4, 5];
    // hoặc: $numbers = array(1, 2, 3, 4, 5);
    
    echo "Phần tử thứ 3: " . $numbers[2] . "<br>"; // Index bắt đầu từ 0
    
    // Duyệt mảng với for
    echo "Duyệt mảng với for: ";
    for ($i = 0; $i < count($numbers); $i++) {
        echo $numbers[$i] . " ";
    }
    echo "<br>";
    
    // Duyệt mảng với foreach
    echo "Duyệt mảng với foreach: ";
    foreach ($numbers as $value) {
        echo $value . " ";
    }
    echo "<br>";
    
    // Mảng kết hợp (associative array)
    $student = [
        'name' => 'Nguyễn Văn A',
        'age' => 20,
        'major' => 'Computer Science',
        'gpa' => 3.8
    ];
    
    echo "Tên sinh viên: " . $student['name'] . "<br>";
    echo "Chuyên ngành: " . $student['major'] . "<br>";
    
    // Duyệt mảng kết hợp
    echo "<h3>Thông tin sinh viên:</h3>";
    echo "<ul>";
    foreach ($student as $key => $value) {
        echo "<li>$key: $value</li>";
    }
    echo "</ul>";
    
    // Mảng đa chiều
    $students = [
        [
            'name' => 'Nguyễn Văn A',
            'age' => 20,
            'scores' => [85, 90, 78]
        ],
        [
            'name' => 'Trần Thị B',
            'age' => 21,
            'scores' => [92, 88, 95]
        ],
        [
            'name' => 'Lê Văn C',
            'age' => 22,
            'scores' => [75, 80, 82]
        ]
    ];
    
    // Truy cập mảng đa chiều
    echo "Sinh viên thứ 2: " . $students[1]['name'] . "<br>";
    echo "Điểm môn thứ 3 của sinh viên thứ 2: " . $students[1]['scores'][2] . "<br>";
    
    // Duyệt mảng đa chiều
    echo "<h3>Danh sách sinh viên:</h3>";
    foreach ($students as $student) {
        echo "<p><strong>" . $student['name'] . "</strong>, " . $student['age'] . " tuổi</p>";
        echo "<p>Điểm: ";
        foreach ($student['scores'] as $score) {
            echo $score . " ";
        }
        echo "</p>";
        echo "<hr>";
    }
    
    // Một số hàm xử lý mảng
    $fruits = ['apple', 'banana', 'orange', 'grape'];
    
    echo "Số phần tử: " . count($fruits) . "<br>";
    
    // Thêm phần tử vào mảng
    $fruits[] = 'mango';
    array_push($fruits, 'strawberry', 'kiwi');
    
    // Sắp xếp mảng
    sort($fruits);
    echo "Mảng sau khi sắp xếp: ";
    print_r($fruits);
    echo "<br>";
    
    // Đảo ngược mảng
    $reversed = array_reverse($fruits);
    echo "Mảng sau khi đảo ngược: ";
    print_r($reversed);
    echo "<br>";
    
    // Chuyển mảng thành chuỗi
    $fruitString = implode(", ", $fruits);
    echo "Chuỗi từ mảng: " . $fruitString . "<br>";
    
    // Chuyển chuỗi thành mảng
    $colors = "red,green,blue,yellow";
    $colorArray = explode(",", $colors);
    echo "Mảng từ chuỗi: ";
    print_r($colorArray);
?>

🧑‍🏫 Bài 5: PHP và HTML

Kết hợp PHP với HTML

php
<!DOCTYPE html>
<html>
<head>
    <title>PHP HTML</title>
    <style>
        table {
            border-collapse: collapse;
            width: 100%;
        }
        th, td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
        }
        th {
            background-color: #f2f2f2;
        }
        tr:nth-child(even) {
            background-color: #f9f9f9;
        }
    </style>
</head>
<body>
    <h1>Danh sách sản phẩm</h1>
    
    <?php
    // Dữ liệu sản phẩm (thường sẽ lấy từ database)
    $products = [
        [
            'id' => 1,
            'name' => 'Laptop Dell XPS 13',
            'price' => 1299.99,
            'stock' => 10
        ],
        [
            'id' => 2,
            'name' => 'iPhone 13 Pro',
            'price' => 999.99,
            'stock' => 15
        ],
        [
            'id' => 3,
            'name' => 'Samsung Galaxy S21',
            'price' => 799.99,
            'stock' => 8
        ],
        [
            'id' => 4,
            'name' => 'Apple MacBook Pro',
            'price' => 1499.99,
            'stock' => 5
        ],
    ];
    
    // Hiển thị dữ liệu trong bảng HTML
    if (count($products) > 0) {
        echo '<table>';
        echo '<tr><th>ID</th><th>Tên sản phẩm</th><th>Giá</th><th>Tồn kho</th><th>Trạng thái</th></tr>';
        
        foreach ($products as $product) {
            echo '<tr>';
            echo '<td>' . $product['id'] . '</td>';
            echo '<td>' . $product['name'] . '</td>';
            echo '<td>$' . number_format($product['price'], 2) . '</td>';
            echo '<td>' . $product['stock'] . '</td>';
            
            // Biểu thức điều kiện để hiển thị trạng thái
            if ($product['stock'] > 10) {
                echo '<td style="color: green;">Còn nhiều</td>';
            } elseif ($product['stock'] > 0) {
                echo '<td style="color: orange;">Sắp hết</td>';
            } else {
                echo '<td style="color: red;">Hết hàng</td>';
            }
            
            echo '</tr>';
        }
        
        echo '</table>';
    } else {
        echo '<p>Không có sản phẩm nào.</p>';
    }
    ?>
    
    <h2>Form thêm sản phẩm</h2>
    <form method="post" action="">
        <div>
            <label for="name">Tên sản phẩm:</label>
            <input type="text" id="name" name="name" required>
        </div>
        <div>
            <label for="price">Giá:</label>
            <input type="number" id="price" name="price" step="0.01" required>
        </div>
        <div>
            <label for="stock">Tồn kho:</label>
            <input type="number" id="stock" name="stock" required>
        </div>
        <div>
            <button type="submit">Thêm sản phẩm</button>
        </div>
    </form>
    
    <?php
    // Xử lý form khi submit
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        if (isset($_POST["name"]) && isset($_POST["price"]) && isset($_POST["stock"])) {
            $name = $_POST["name"];
            $price = $_POST["price"];
            $stock = $_POST["stock"];
            
            echo "<h3>Sản phẩm vừa thêm:</h3>";
            echo "<p>Tên: $name</p>";
            echo "<p>Giá: $price</p>";
            echo "<p>Tồn kho: $stock</p>";
            
            // Trong thực tế, tại đây sẽ thêm dữ liệu vào database
        }
    }
    ?>
</body>
</html>

Xử lý form với PHP

php
<!DOCTYPE html>
<html>
<head>
    <title>Xử Form với PHP</title>
    <style>
        .error { color: red; }
        .success { color: green; }
        form { margin-bottom: 20px; }
        label { display: block; margin-top: 10px; }
    </style>
</head>
<body>
    <h1>Đăng tài khoản</h1>
    
    <?php
    // Khởi tạo biến lỗi và biến lưu dữ liệu
    $nameErr = $emailErr = $passwordErr = "";
    $name = $email = $password = "";
    $formValid = true;
    
    // Kiểm tra xem form đã được submit chưa
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        // Kiểm tra và lấy giá trị tên
        if (empty($_POST["name"])) {
            $nameErr = "Họ tên không được để trống";
            $formValid = false;
        } else {
            $name = test_input($_POST["name"]);
            // Kiểm tra tên chỉ chứa chữ và khoảng trắng
            if (!preg_match("/^[a-zA-Z ]*$/", $name)) {
                $nameErr = "Họ tên chỉ được chứa chữ cái và khoảng trắng";
                $formValid = false;
            }
        }
        
        // Kiểm tra và lấy giá trị email
        if (empty($_POST["email"])) {
            $emailErr = "Email không được để trống";
            $formValid = false;
        } else {
            $email = test_input($_POST["email"]);
            // Kiểm tra định dạng email hợp lệ
            if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                $emailErr = "Định dạng email không hợp lệ";
                $formValid = false;
            }
        }
        
        // Kiểm tra và lấy giá trị mật khẩu
        if (empty($_POST["password"])) {
            $passwordErr = "Mật khẩu không được để trống";
            $formValid = false;
        } else {
            $password = test_input($_POST["password"]);
            // Kiểm tra độ dài mật khẩu
            if (strlen($password) < 6) {
                $passwordErr = "Mật khẩu phải có ít nhất 6 ký tự";
                $formValid = false;
            }
        }
        
        // Nếu form hợp lệ, hiển thị thông tin
        if ($formValid) {
            echo '<div class="success">';
            echo '<h3>Đăng ký thành công!</h3>';
            echo '<p>Họ tên: ' . $name . '</p>';
            echo '<p>Email: ' . $email . '</p>';
            echo '</div>';
            
            // Trong thực tế, tại đây sẽ lưu dữ liệu vào database
        }
    }
    
    // Hàm xử lý và làm sạch dữ liệu đầu vào
    function test_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }
    ?>
    
    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
        <div>
            <label for="name">Họ tên:</label>
            <input type="text" id="name" name="name" value="<?php echo $name; ?>">
            <span class="error"><?php echo $nameErr; ?></span>
        </div>
        
        <div>
            <label for="email">Email:</label>
            <input type="text" id="email" name="email" value="<?php echo $email; ?>">
            <span class="error"><?php echo $emailErr; ?></span>
        </div>
        
        <div>
            <label for="password">Mật khẩu:</label>
            <input type="password" id="password" name="password">
            <span class="error"><?php echo $passwordErr; ?></span>
        </div>
        
        <div style="margin-top: 20px;">
            <input type="submit" value="Đăng ký">
        </div>
    </form>
</body>
</html>

🧪 BÀI TẬP LỚN CUỐI PHẦN: Tạo trang quản lý sản phẩm đơn giản

Mô tả bài toán

Xây dựng trang web đơn giản cho phép:

  • Hiển thị danh sách sản phẩm
  • Thêm sản phẩm mới
  • Tìm kiếm sản phẩm theo tên
  • Lọc sản phẩm theo giá

Yêu cầu

  • Tạo cấu trúc dữ liệu lưu trữ sản phẩm (mảng PHP)
  • Thiết kế giao diện hiển thị danh sách sản phẩm (bảng)
  • Tạo form thêm sản phẩm mới với các trường: tên, mô tả, giá, số lượng
  • Xây dựng chức năng tìm kiếm và lọc sản phẩm
  • Tổ chức code theo cấu trúc rõ ràng, dễ bảo trì

Released under the MIT License.