Lưu dữ liệu xuống database bằng PHP

Ở bài học trước chúng ta đã hoàn tất việc tạo một trang để người dùng có thể tạo bài viết. Việc tiếp theo chúng ta cần làm là tạo một tập tin PHP save.php để xử lý việc lưu bài viết trên MySQL database.

 

Kết Nối Với Database

Trên editor bạn tạo một tập tin PHP mới với nội dung như sau (thay root_password bằng mật khẩu của người dùng root trên máy tính của bạn):

<?php
$connection = mysqli_connect("127.0.0.1", "root", "root_password", "blog");

if (!$connection) {
    echo "Lỗi kết nối tới MySQL: ".mysqli_connect_error();
    exit;
}

echo "Kết nối tới database thành công!";
?>

Ở trên chúng ta sử dụng hàm mysqli_connect() để kết nối tới blog database. Hàm này nhận 4 tham số truyền vào lần lượt là:

  • 127.0.0.1 là địa chỉ host của MySQL server. Trường hợp chúng ta do PHP và MySQL chạy trên cùng một máy nên chúng ta sử dụng giá trị là localhost hay 127.0.0.1.
  • root là tên người dùng sử dụng để kết nối tới MySQL server.
  • root_password là mật khẩu của người dùng root. Tuy nhiên, thông thường mật khẩu root của mysql trên Wamp server thường không có và đoạn kết nối sẽ là $connection = mysqli_connect("127.0.0.1", "root", "", "blog");
  • blog là tên database sẽ sử dụng để làm việc sau khi kết nối thành công.

Bạn lưu tập tin trên với tên save.php tại thư mục gốc của Apache và sau đó truy cập vào địa chỉ http://localhost/save.php để kiểm tra kết nối. Nếu thành công bạn sẽ thấy dòng Kết nối tới database thành công trên màn hình.

Lưu Dữ Liệu Lên Database

Tiếp theo chúng ta viết đoạn code để lưu dữ liệu trong form được người dùng gửi lên máy chủ. Vẫn trong tập tin save.php bạn xóa dòng lệnh echo cuối cùng và thay bới đoạn mã sau:

<?php
...

$title = isset($_POST['title']) ? $_POST['title'] : die("Tiêu đề không được để trống");
$content = isset($_POST['content']) ? $_POST['content'] : die("Nội dung không được để trống");

$sql = "INSERT INTO posts(title, content) VALUES('$title', '$content')";
$result = mysqli_query($connection, $sql);

if ($result) {
    echo "Bài viết đã được lưu thành công!";
} else {
    echo "Lỗi khi lưu bài viết: ".$mysqli->error;
}

?>

Ở trên chúng ta sử dụng biến global trong PHP $_POST để lấy về dữ liệu của hai trường title và content. Nếu một trong hai dữ liệu này không tồn tại hoặc
để trống chúng ta sẽ kết thúc việc xử lý và báo lỗi về cho người dùng:

$title = isset($_POST['title']) ? $_POST['title'] : die("Tiêu đề không được để trống");
$content = isset($_POST['content']) ? $_POST['content'] : die("Nội dung không được để trống");

Tiếp theo chúng ta dùng biến $sql để chứa câu truy vấn SQL chèn dữ liệu vào bảng posts. Câu query này về bản chất sẽ giống với câu query INSERT mà chúng ta sử dụng trên MySQL Client để chèn dữ liệu vào bảng mà bạn sử dụng:

$sql = "INSERT INTO posts(title, content) VALUES('$title', '$content')";

Tiếp theo hàm mysqli_query() được gọi để thực hiện việc gửi truy vấn tới MySQL server:

$result = mysqli_query($connection, $sql);

Nếu thành công hàm này sẽ trả về giá trị là true ngược lại chúng ta sẽ hiển thị lỗi về cho người dùng:

if ($result) {
    echo "Bài viết đã được lưu thành công!";
} else {
    echo "Lỗi khi lưu bài viết: " . $connection->error;
}

Kiểm Tra Lưu Bài Viết

Cuối cùng sau khi viết code bạn cần kiểm tra lại bằng cách truy cập vào trang tạo bài viết ở địa chỉ http://blog.local/create.php sau đó nhập đầy đủ dữ liệu cho hai
trường tiêu đề và nội dung rồi bấm nút gửi đi. Nếu làm đúng theo hướng dẫn bạn sẽ thấy kết quả hiển thị như sau:

Bài viết đã được lưu thành công!

Như vậy ở bài học này bạn đã được tìm hiểu cách lưu bài viết lên database. Ở bài học tiếp theo chúng ta sẽ tìm hiểu cách hiển thị danh sách các bài viết đã được lưu lên cơ sở dữ liệu.