# LESSON 1 ## 1. Tổng quan PHP (Hypertext Preprocessor) là một ngôn ngữ lập trình kịch bản chạy phía server, được sử dụng để tạo các trang web động. PHP có thể nhúng vào HTML, dễ học và được sử dụng phổ biến với MySQL. ## 2. Cấu trúc cơ bản của PHP ### 2.1. Khai báo và sử dụng biến ``` $name = "John"; $age = 25; $price = 19.99; ``` ### 2.2. Các kiểu dữ liệu String (chuỗi): "Hello" Integer (số nguyên): 123 Float (số thực): 3.14 Boolean: true hoặc false Array (mảng) NULL ### 2.3. Toán tử cơ bản ``` $a = 5; $b = 3; $sum = $a + $b; // Cộng $sub = $a - $b; // Trừ $mul = $a * $b; // Nhân $div = $a / $b; // Chia $mod = $a % $b; // Chia lấy dư ``` ## 3. Cấu trúc điều khiển ### 3.1. Câu lệnh rẽ nhánh ``` $age = 18; if ($age >= 18) { echo "Bạn đủ tuổi."; } else { echo "Bạn chưa đủ tuổi."; } ``` ### 3.2. Vòng lặp ``` for ($i = 0; $i < 5; $i++) { echo "Số: $i <br>"; } ``` ``` $x = 1; while ($x <= 5) { echo "Số: $x <br>"; $x++; } ``` ``` $colors = ["Đỏ", "Xanh", "Vàng"]; foreach ($colors as $color) { echo "$color <br>"; } ``` ### 4. Hàm trong PHP ### 4.1. Hàm có tham số ``` function greet($name) { return "Xin chào, $name!"; } echo greet("John"); ``` ### 4.2. Hàm với giá trị mặc định ``` function sayHello($name = "Khách") { return "Xin chào, $name!"; } echo sayHello(); ``` ## 5. Mảng trong PHP ### 5.1. Mảng tuần tự (Indexed Array) ``` $fruits = ["Táo", "Chuối", "Cam"]; echo $fruits[1]; // Chuối ``` ### 5.2. Mảng kết hợp (Associative Array) ``` $person = ["name" => "John", "age" => 25]; echo $person["name"]; // John ``` ## 6. Xử lý form và phương thức HTTP ### 6.1. Nhận dữ liệu từ form ``` if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = $_POST["name"]; echo "Tên: $name"; } ``` ### 6.2. Xử lý dữ liệu an toàn với htmlspecialchars ``` $name = htmlspecialchars($_POST["name"]); ``` ### 6.3. Kiểm tra dữ liệu có tồn tại hay không ``` if (isset($_POST["submit"])) { echo "Form đã được gửi!"; } ``` ## 7. Làm việc với cơ sở dữ liệu MySQL bằng PDO ### 7.1. Kết nối đến MySQL ``` $dsn = "mysql:host=localhost;dbname=testdb;charset=utf8mb4"; $username = "root"; $password = ""; try { $pdo = new PDO($dsn, $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Kết nối thành công!"; } catch (PDOException $e) { echo "Lỗi kết nối: " . $e->getMessage(); } ``` ### 7.2. Truy vấn dữ liệu ``` $sql = "SELECT * FROM users"; $stmt = $pdo->query($sql); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo $row["name"] . "<br>"; } ``` ### 7.3. Truy vấn có tham số (Prepared Statement) ``` $sql = "SELECT * FROM users WHERE id = :id"; $stmt = $pdo->prepare($sql); $stmt->execute(["id" => 1]); $user = $stmt->fetch(PDO::FETCH_ASSOC); echo $user["name"]; ``` ### 7.4. Chèn dữ liệu ``` $sql = "INSERT INTO users (name, email) VALUES (:name, :email)"; $stmt = $pdo->prepare($sql); $stmt->execute(["name" => "John", "email" => "john@example.com"]); echo "Thêm dữ liệu thành công!"; ``` ### 7.5. Cập nhật dữ liệu ``` $sql = "UPDATE users SET email = :email WHERE id = :id"; $stmt = $pdo->prepare($sql); $stmt->execute(["email" => "newemail@example.com", "id" => 1]); echo "Cập nhật thành công!"; ``` ### 7.6. Xóa dữ liệu ``` $sql = "DELETE FROM users WHERE id = :id"; $stmt = $pdo->prepare($sql); $stmt->execute(["id" => 1]); echo "Xóa thành công!"; ``` ### 7.7. Đóng kết nối ``` $pdo = null; ``` ## 8. Quản lý session và cookie ### 8.1. Session ``` session_start(); $_SESSION["user"] = "John"; echo $_SESSION["user"]; ``` ### 8.2. Cookie ``` setcookie("username", "John", time() + (86400 * 30), "/"); echo $_COOKIE["username"]; ``` ## 9. Xử lý lỗi và Debug ### Bắt lỗi với try-catch ``` try { $result = 10 / 0; } catch (Exception $e) { echo "Lỗi: " . $e->getMessage(); } ```