# PHP
- PHP là từ viết tắt của "Hypertext Preprocessor"
- Một số phương thức:
- PHP `$_POST` là một Superglobals PHP được sử dụng để thu thập dữ liệu biểu mẫu sau khi gửi biểu mẫu HTML bằng phương thức = "post".
- PHP `$_GET` là một Superglobals PHP được sử dụng để thu thập dữ liệu biểu mẫu sau khi gửi biểu mẫu HTML bằng phương thức = "get". `$_GET` cũng có thể thu thập dữ liệu được gửi trong URL.
- PHP `$_REQUEST` là một Superglobals PHP được sử dụng để thu thập dữ liệu sau khi gửi biểu mẫu HTML.
# MYSQL
## Giới thiệu chung về SQL
- **SQL** là ngôn ngữ tiêu chuẩn để lưu trữ, thao tác và truy xuất dữ liệu trong cơ sở dữ liệu.
- Câu lệnh SQL bao gồm các từ khóa dễ hiểu.
Ví dụ:
```sql
SELECT * FROM Customers;
/*Chọn tất cả các bản ghi từ bảng Khách hàng*/
```
Từ khóa SQL KHÔNG phân biệt chữ hoa chữ thường: `select` giống như `SELECT`
- Một số lệnh **SQL** quan trọng:
- `SELECT`- trích xuất dữ liệu từ cơ sở dữ liệu
- `UPDATE`- cập nhật dữ liệu vào cơ sở dữ liệu
- `DELETE`- xóa dữ liệu khỏi cơ sở dữ liệu
- `INSERT INTO`- chèn dữ liệu mới vào cơ sở dữ liệu
- `CREATE DATABASE`- tạo cơ sở dữ liệu mới
- `ALTER DATABASE`- sửa đổi cơ sở dữ liệu
- `CREATE TABLE`- tạo một bảng mới
- `ALTER TABLE`- sửa đổi một bảng
- `DROP TABLE`- xóa một bảng
- `CREATE INDEX`- tạo chỉ mục (khóa tìm kiếm)
- `DROP INDEX`- xóa một chỉ mục
### MYSQL
- **MySQL** là hệ thống cơ sở dữ liệu phổ biến nhất được sử dụng với PHP. MySQL sử dụng SQL tiêu chuẩn.
# CRUD bằng PDO
## Tạo bảng chứa Database
Có thể tạo trực tiếp trên `phpMyAdmin` hoặc dùng câu lệnh trên `SQL`
```sql
CREATE TABLE `monhoc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ten` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET =utf8 COLLATE=utf8_unicode_ci;
```

## Tạo file kết nối `connect.php`
```php
<?php
//thông tin kết nối
const HOST = 'localhost';
const USER = 'root';
const DB = 'subject_1';
const PASS = '';
try{
if(class_exists('PDO')){ //kiểm tra PDO
$dsn = 'mysql:dbname='.DB.';host='.HOST;
$conn = new PDO($dsn, USER, PASS);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//dặt chế độ lỗi thành ngoại lệ
var_dump($conn);
}
} catch(Exception $exception){
echo $exception -> getMessage().'<br>';
die();
}
?>
```
## Tạo file hiển thị `index.php`
```php
<?php
require_once "connect.php";
$sql = "SELECT m.*, ten FROM monhoc m"; //lấy tên môn học từ bảng monhoc
$stmt = $conn->prepare($sql);
$stmt->execute();
$monhoc = $stmt->fetchAll(PDO::FETCH_ASSOC);//lấy dữ liệu
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<table border="2">
<tr>
<th>STT</th>
<th>MÔN HỌC</th>
</tr>
<?php foreach($monhoc as $m) : ?>
<tr>
<td><?= $m['id']?></td>
<td><?= $m['ten']?></td>
<td>
<a href="edit.php">Sửa</a>
</td>
<td>
<a onclick="return confirm('Bạn có chắc chắn xóa không?')" href="delete.php">Xóa</a>
</td>
<?php endforeach ?>
</table>
<a href="insert.php">Thêm môn học</a>
</body>
</html>
```

## Thêm dữ liệu `insert.php`
```php
<?php
require_once "connect.php";
$ten = $id =""; //Xác định biến và khởi tạo giá trị trống
if($_SERVER['REQUEST_METHOD'] == "POST"){
$ten = $_POST['ten'];
$sql = "INSERT INTO monhoc(ten) VALUES (:ten)";
$stmt = $conn -> prepare($sql);
$stmt -> bindParam('ten', $ten); //gán giá trị
$insertState = $stmt -> execute();
header("location: index.php");
exit;
}
$sql = "SELECT *, ten FROM monhoc "; //lấy tên môn học từ bảng monhoc
$stmt = $conn->prepare($sql);
$stmt->execute();
$monhoc1 = $stmt->fetchAll(PDO::FETCH_ASSOC);//lấy dữ liệu
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="" method='POST' enctype="multipart/form-data">
Subject: <td><input type="text" name="ten" id=""></td>
<button type='submit'>Create</button><br><br>
<?php foreach($monhoc1 as $monhoc): ?>
<option value="<?= $monhoc['ten']?>">
</option>
<?php endforeach ?>
<a href="index.php">Danh Sách Môn Học</a>
</form>
</body>
</html>
```

Ta được:

## Sửa dữ liệu `edit.php`
```php
<?php
require_once "connect.php";
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$ten = $_POST['ten'];
$id = $_GET['id'];
// Update
$sql = "UPDATE monhoc SET ten='$ten' WHERE id = $id";
$stmt = $conn->prepare($sql);
$stmt->execute();
header("location: index.php");
die;
}
$sql = "SELECT id, ten FROM monhoc m";
// Chuẩn bị
$stmt = $conn->prepare($sql);
// Thực thi
$stmt->execute();
// Lấy dữ liệu
$monhoc = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Lấy subject_id trên thanh URL
$id = $_GET['id'];
// Câu lệnh SQL với điều kiện subject_id
$sql = "SELECT * FROM monhoc WHERE id = $id";
$stmt = $conn->prepare($sql);
$stmt->execute();
$monhoc = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Cập nhật tên môn học</title>
</head>
<body>
<form action="" method="POST" enctype="multipart/form-data">
<input type="hidden" name="id" value="<?= $monhoc[$id]?>">
Subject: <input type="text" name="subject_name" id="">
<br><br>
<button type="submit">Cập nhật</button>
<a href="index.php">Danh sách danh sách</a>
</form>
</body>
</html>
```
## Xóa dữ liệu `delete.php`
```php
<?php
require_once "connect.php";
$id = $_GET['id'];
$sql = "DELETE FROM monhoc WHERE id = :id";
$stmt = $conn -> prepare($sql);
$stmt -> bindParam('id', $id);
$deleteState = $stmt -> execute();
header("location: index.php");
?>
```