Liên hệ tư vấn

PHP: Ngôn ngữ lập trình được sử dụng nhiều hàng đầu thế giới


PHP là một ngôn ngữ lập trình kịch bản (scripting) phía máy chủ (server-side) được thiết kế để phát triển các ứng dụng web động. PHP là viết tắt của PHP: Hypertext Preprocessor, tức là một bộ xử lý trước văn bản siêu văn bản. PHP có thể nhúng vào HTML và chạy trên nhiều hệ điều hành và nền tảng khác nhau.

php-la-gi

Lịch sử và nguồn gốc của PHP

PHP được phát triển bởi Rasmus Lerdorf vào năm 1994, ban đầu là một tập hợp các công cụ để quản lý các biểu mẫu web và tương tác với cơ sở dữ liệu. Sau đó, Lerdorf công bố mã nguồn của PHP cho cộng đồng và nhận được sự đóng góp của nhiều lập trình viên khác. PHP đã trải qua nhiều phiên bản cải tiến và mở rộng tính năng, từ PHP 2, PHP 3, PHP 4, PHP 5 cho đến PHP 7 hiện nay.

Tìm hiểu thêm: JavaScript – Ngôn ngữ lập trình phổ biến nhất thế giới

Ưu điểm và ứng dụng của PHP

uu-diem-va-ung-dung-cua-php

PHP có nhiều ưu điểm so với các ngôn ngữ lập trình web khác, chẳng hạn như:

Dễ học và sử dụng: PHP có cú pháp đơn giản, dễ hiểu và gần gũi với người dùng. PHP cũng có nhiều tài liệu hướng dẫn và hỗ trợ cho người mới bắt đầu.

Miễn phí và mã nguồn mở: PHP là một ngôn ngữ miễn phí và mã nguồn mở, có thể tải về và sử dụng trên bất kỳ máy tính nào. PHP cũng có một cộng đồng lớn và năng động, thường xuyên cập nhật và cải thiện ngôn ngữ.

Nhanh và hiệu quả: PHP được biên dịch trực tiếp trên máy chủ, không cần qua trình biên dịch hay thông dịch riêng biệt. PHP cũng có thể sử dụng các công nghệ cache để tăng tốc độ xử lý.

Linh hoạt và tương thích: PHP có thể nhúng vào HTML hoặc kết hợp với các ngôn ngữ khác như JavaScript, CSS, XML… PHP cũng có thể chạy trên nhiều hệ điều hành (Windows, Linux, Mac OS…) và hỗ trợ nhiều loại cơ sở dữ liệu (MySQL, PostgreSQL, Oracle…).

PHP được ứng dụng rộng rãi trong các lĩnh vực liên quan đến web, chẳng hạn như:

Xây dựng website động: PHP có thể tạo ra các trang web động theo yêu cầu của người dùng, ví dụ như hiển thị thông tin cá nhân, giỏ hàng, tin tức…

Phát triển ứng dụng web: PHP có thể phát triển các ứng dụng web từ đơn giản như WordPress đến phức tạp như các trang sàn thương mại điện tử…

Xem thêm: ASP.NET là gì? Các tính năng chính của ASP.NET

Tính năng và cú pháp cơ bản của PHP

PHP là một ngôn ngữ lập trình đa mục đích, đa hìnhđa nền tảng. PHP có thể thực hiện nhiều tác vụ khác nhau, từ xử lý dữ liệu, tạo nội dung động, giao tiếp với cơ sở dữ liệu, đến gửi email, tạo ảnh, mã hóa dữ liệu… PHP cũng có thể thích ứng với nhiều phong cách lập trình khác nhau, từ lập trình hướng thủ tục, lập trình hướng đối tượng, cho đến lập trình hàm. PHP cũng có thể chạy trên nhiều hệ điều hành và nền tảng khác nhau, từ Windows, Linux, Mac OS, cho đến Unix, Solaris…

cu-phap-va-tinh-nang-cua-php

Cú pháp và cấu trúc ngôn ngữ PHP

Cú pháp của PHP là một tập hợp các quy tắc và quy ước để viết mã nguồn PHP. Cú pháp của PHP có những đặc điểm sau:

Phân biệt chữ hoa chữ thường: PHP phân biệt chữ hoa chữ thường trong các tên biến, hằng số và hàm. Ví dụ: $name, $Name$NAME là ba biến khác nhau; echoECHO là hai hàm khác nhau.

Sử dụng dấu chấm phẩy (;) để kết thúc một câu lệnh: PHP sử dụng dấu chấm phẩy (;) để phân tách các câu lệnh trong một khối mã. Ví dụ: echo "Hello"; echo "World";

Sử dụng dấu ngoặc nhọn ({}) để bắt đầu và kết thúc một khối mã: PHP sử dụng dấu ngoặc nhọn ({}) để định nghĩa phạm vi của một khối mã, ví dụ như trong một hàm, một vòng lặp, một câu điều kiện…

Ví dụ: if ($a > $b) { echo "a is greater than b"; }

Sử dụng dấu gạch chéo ngược (\) để thoát ký tự đặc biệt: PHP sử dụng dấu gạch chéo ngược (\) để thoát ký tự đặc biệt trong một chuỗi, ví dụ như dấu ngoặc kép (“), dấu gạch chéo ngược (\), ký tự xuống dòng (\n)…

Ví dụ: echo "She said \"Hello\" to me";

Sử dụng các thẻ mở và đóng <?php ?> để nhúng mã PHP vào HTML: PHP có thể nhúng vào HTML bằng cách sử dụng các thẻ mở và đóng (). Mã PHP sẽ được máy chủ xử lý và gửi kết quả về cho trình duyệt.

Ví dụ:

<html> <head> <title>PHP Example</title> </head> <body> <h1><?php echo "Hello World"; ?></h1> </body> </html>

Biến và kiểu dữ liệu trong PHP

bien-va-kieu-du-lieu-trong-php

Biến là một định danh để lưu trữ và thao tác với dữ liệu trong PHP. Biến có thể chứa các giá trị thuộc nhiều kiểu dữ liệu khác nhau, ví dụ như số nguyên, số thực, chuỗi, mảng, đối tượng… Biến trong PHP có những đặc điểm sau:

Bắt đầu bằng ký tự dấu $: Tên biến trong PHP phải bắt đầu bằng ký tự dấu $, sau đó là các ký tự chữ cái hoặc gạch dưới (_). Ví dụ: $name, $_age, $number1

Phân biệt chữ hoa chữ thường: Tên biến trong PHP phân biệt chữ hoa chữ thường, nghĩa là $name$Name là hai biến khác nhau.

Không cần khai báo kiểu dữ liệu: PHP là một ngôn ngữ động, nghĩa là không cần khai báo kiểu dữ liệu cho biến trước khi sử dụng. Kiểu dữ liệu của biến sẽ được xác định theo giá trị được gán cho nó. Ví dụ: $name = "John"; // string, $age = 25; // integer, $price = 9.99; // float

Kiểu dữ liệu là một thuộc tính của dữ liệu, xác định giá trị mà dữ liệu có thể lấy và các phép toán mà dữ liệu có thể thực hiện. PHP hỗ trợ nhiều kiểu dữ liệu khác nhau, chia thành hai loại chính: kiểu nguyên thủykiểu phức tạp.

Kiểu nguyên thủy: Là các kiểu dữ liệu đơn giản, chỉ chứa một giá trị duy nhất. Có bốn kiểu nguyên thủy trong PHP: boolean, integer, floatstring.

Boolean: Là kiểu dữ liệu chỉ có hai giá trị: true (đúng) hoặc false (sai). Boolean thường được sử dụng để lưu trữ kết quả của các phép so sánh hoặc điều kiện. Ví dụ: $is_male = true; // boolean

Integer: Là kiểu dữ liệu số nguyên, có giá trị từ -2^31 đến 2^31 – 1 (khoảng -2 tỷ đến 2 tỷ). Integer có thể được viết ở hệ cơ số 10 (thập phân), hệ cơ số 2 (nhị phân), hệ cơ số 8 (bát phân) hoặc hệ cơ số 16 (thập lục phân).

Ví dụ:

$age = 25; // integer in decimal
$binary = 0b1010; // integer in binary
$octal = 0777; // integer in octal
$hex = 0xFF; // integer in hexadecimal

Float: Là kiểu dữ liệu số thực, có giá trị từ -1.8 x 10^308 đến 1.8 x 10^308. Float có thể được viết ở dạng thập phân hoặc dạng mũ. Ví dụ: $price = 9.99; // float in decimal, $mass = 5.97E24; // float

String: Là kiểu dữ liệu chuỗi, chứa một hoặc nhiều ký tự. String có thể được viết trong dấu ngoặc kép (“) hoặc dấu ngoặc đơn (‘), nhưng có một số khác biệt quan trọng. String trong dấu ngoặc kép có thể chứa các biến và các ký tự đặc biệt được thoát bởi dấu gạch chéo ngược, và sẽ được xử lý trên máy chủ. String trong dấu ngoặc đơn sẽ được hiển thị nguyên vẹn, không xử lý biến hay ký tự đặc biệt. Ví dụ:

$name = "John"; // string in double quotes
echo "Hello $name"; // Hello John
echo 'Hello $name'; // Hello $name

Kiểu phức tạp: Là các kiểu dữ liệu phức tạp, có thể chứa nhiều giá trị thuộc các kiểu dữ liệu khác nhau. Có ba kiểu phức tạp trong PHP: array, objectresource.

Array: Là kiểu dữ liệu mảng, chứa một danh sách các giá trị được lưu trữ theo cặp khóa (key) và giá trị (value). Khóa có thể là số nguyên hoặc chuỗi, giá trị có thể là bất kỳ kiểu dữ liệu nào. Mảng có thể được tạo bằng cách sử dụng hàm array() hoặc cú pháp ngắn gọn [ ]. Ví dụ:

$colors = array("red", "green", "blue"); // array with numeric keys
$fruits = ["apple" => "red"
"banana" => "yellow"
"orange" => "orange"]; // array with string keys

Object: Là kiểu dữ liệu đối tượng, chứa các thuộc tính (properties) và phương thức (methods) của một lớp (class). Đối tượng có thể được tạo bằng cách sử dụng từ khóa new để khởi tạo một thể hiện (instance) của một lớp. Ví dụ:

class Person { // define a class
public $name; // define a property
public function sayHello() { // define a method
echo "Hello, I am $this->name";
}
}
$john = new Person(); // create an object of class Person
$john->name = "John"; // assign a value to the property name
$john->sayHello(); // call the method sayHello

Resource: Là kiểu dữ liệu tài nguyên, chứa một tham chiếu đến một tài nguyên bên ngoài, ví dụ như một kết nối cơ sở dữ liệu, một file, một socket… Tài nguyên thường được tạo bởi các hàm xây dựng tài nguyên (resource constructor) và được giải phóng bởi các hàm hủy tài nguyên (resource destructor). Ví dụ:

$file = fopen("test.txt", "r"); // create a resource of file type
fclose($file); // close and free the resource

Các toán tử và điều kiện trong PHP

toan-tu-trong-php

Toán tử là các ký hiệu được sử dụng để thực hiện các phép toán trên các giá trị hoặc biến. PHP hỗ trợ nhiều loại toán tử khác nhau, chẳng hạn như:

Toán tử số học: Là các toán tử được sử dụng để thực hiện các phép tính số học, ví dụ như cộng (+), trừ (-), nhân (), chia (/), chia lấy dư (%), lũy thừa (*)… Ví dụ:

$a = 10; $b = 3;
echo $a + $b; // 13
echo $a - $b; // 7
echo $a * $b; // 30
echo $a / $b; // 3.3333333333333
echo $a % $b; // 1
echo $a ** $b; // 1000

Toán tử gán: Là các toán tử được sử dụng để gán giá trị cho biến, ví dụ như gán (=), gán cộng (+=), gán trừ (-=), gán nhân (=), gán chia (/=), gán chia lấy dư (%=), gán lũy thừa (*=)… Ví dụ:

$a = 10; // assign 10 to a
$a += 5; // equivalent to $a = $a + 5
$a -= 3; // equivalent to $a = $a - 3
$a *= 2; // equivalent to $a = $a * 2
$a /= 4; // equivalent to $a = $a / 4
$a %= 2; // equivalent to $a = $a % 2
$a **= 3; // equivalent to $a = $a ** 3

Toán tử so sánh: Là các toán tử được sử dụng để so sánh hai giá trị hoặc biến, và trả về một giá trị boolean (true hoặc false). Có nhiều loại toán tử so sánh, ví dụ như bằng (==), không bằng (!=), lớn hơn (>), nhỏ hơn (<), lớn hơn hoặc bằng (>=), nhỏ hơn hoặc bằng (<=), bằng về giá trị và kiểu (===), không bằng về giá trị hoặc kiểu (!==)… Ví dụ:

$a = 10; $b = "10";
var_dump($a == $b); // true
equal value
var_dump($a != $b); // false
not unequal value
var_dump($a > $b); // false
not greater than
var_dump($a < $b); // false
not less than
var_dump($a >= $b); // true
greater than or equal to
var_dump($a <= $b); // true
less than or equal to
var_dump($a === $b); // false
not equal value and type
var_dump($a !== $b); // true
unequal value or type

Dưới đây là đánh giá kết quả đoạn mã trên:

$a = 10;
$b = "10";

var_dump($a == $b); // true, vì giá trị của $a và $b là như nhau
var_dump($a != $b); // false, vì giá trị của $a và $b là như nhau
var_dump($a > $b); // false, vì $a không lớn hơn $b
var_dump($a < $b); // false, vì $a không nhỏ hơn $b
var_dump($a >= $b); // true, vì $a lớn hơn hoặc bằng $b
var_dump($a <= $b); // true, vì $a nhỏ hơn hoặc bằng $b
var_dump($a === $b); // false, vì $a và $b có giá trị và kiểu dữ liệu khác nhau
var_dump($a !== $b); // true, vì $a và $b có giá trị hoặc kiểu dữ liệu khác nhau

Toán tử logic: Là các toán tử được sử dụng để kết hợp các điều kiện logic, và trả về một giá trị boolean (true hoặc false). Có bốn loại toán tử logic: và (and hoặc &&), hoặc (or hoặc ||), phủ định (not hoặc !) và hoặc loại trừ (xor).

Ví dụ:

$x = true; $y = false; // true and false, var_dump($x or $y); // true, true or false, var_dump($x || $y); // true, true or false, var_dump(!$x); // false, not true, var_dump($x xor $y); // true, true xor false

Dưới đây là giải thích từng phần của mã:

$x = true; $y = false;: Đoạn mã này khởi tạo hai biến $x$y với giá trị tương ứng là truefalse.

var_dump($x or $y);: Toán tử or sẽ trả về giá trị true nếu một trong hai biểu thức $x hoặc $ytrue. Do $x có giá trị là true, kết quả của biểu thức là true. Hàm var_dump() được sử dụng để in ra kết quả, vì vậy kết quả sẽ là bool(true).

var_dump($x || $y);: Toán tử || (hoặc) tương tự như toán tử or, cũng trả về giá trị true nếu một trong hai biểu thức là true. Vì $x có giá trị là true, kết quả là true. Kết quả sẽ được in ra là bool(true).

var_dump(!$x);: Toán tử ! (phủ định) đảo ngược giá trị của biểu thức. Vì $x có giá trị là true, kết quả của biểu thức !$xfalse. Kết quả sẽ được in ra là bool(false).

var_dump($x xor $y);: Toán tử xor (hoặc loại trừ) trả về giá trị true nếu một trong hai biểu thức $x hoặc $ytrue, nhưng không đồng thời cả hai đều là true. Trong trường hợp này, $x có giá trị true$y có giá trị false, vì vậy kết quả của biểu thức xortrue. Kết quả sẽ được in ra là bool(true).

Toán tử chuỗi: Là các toán tử được sử dụng để nối hoặc gán nối các chuỗi. Có hai toán tử chuỗi: nối (.) và gán nối (.=). Ví dụ: 

$first_name = "John"; $last_name = "Doe";
$full_name = $first_name . " " . $last_name; // John Doe
$greeting = "Hello";
$greeting .= " " . $full_name; // Hello John Doe

Điều kiện là một biểu thức logic có thể trả về giá trị true hoặc false. Điều kiện thường được sử dụng để kiểm tra một điều kiện nào đó và thực hiện một hành động tương ứng. PHP hỗ trợ nhiều cấu trúc điều kiện khác nhau, chẳng hạn như:

Câu lệnh if…else: Là cấu trúc điều kiện cơ bản, cho phép thực hiện một khối mã nếu điều kiện là true, hoặc một khối mã khác nếu điều kiện là false. Ví dụ: 

if ($a > $b) { echo "a is greater than b"; } else { echo "a is not greater than b"; }

Câu lệnh if…elseif…else: Là cấu trúc điều kiện mở rộng, cho phép thực hiện một trong nhiều khối mã tùy thuộc vào điều kiện nào là true. Ví dụ: 

if ($a > $b) { echo "a is greater than b"; } elseif ($a == $b) { echo "a is equal to b"; } else { echo "a is less than b"; }

Câu lệnh switch…case: Là cấu trúc điều kiện thay thế, cho phép thực hiện một trong nhiều khối mã tùy thuộc vào giá trị của một biến hoặc biểu thức. Ví dụ: 

switch ($color) { case "red": echo "The color is red"; break; case "green": echo "The color is green"; break; case "blue": echo "The color is blue"; break; default: echo "The color is unknown"; }

Vòng lặp và cấu trúc điều khiển trong PHP

vong-lap-trong-php

Vòng lặp là một cấu trúc lập trình cho phép thực hiện một khối mã nhiều lần, tùy thuộc vào một điều kiện hoặc một biến đếm. PHP hỗ trợ nhiều loại vòng lặp khác nhau, chẳng hạn như:

Vòng lặp while: Là vòng lặp cho phép thực hiện một khối mã miễn là điều kiện là true. Ví dụ:

$i = 1; // initialize a variable
while ($i <= 10) { // check the condition
echo $i . " "; // execute the code block
$i++; // increment the variable
}

Vòng lặp do…while: Là vòng lặp tương tự như vòng lặp while, nhưng sẽ thực hiện khối mã ít nhất một lần trước khi kiểm tra điều kiện. Ví dụ:

$i = 1; // initialize a variable
do { // execute the code block
echo $i . " "; // execute the code block
$i++; // increment the variable
} 
while ($i <= 10); // check the condition

Vòng lặp for: Là vòng lặp cho phép thực hiện một khối mã một số lần xác định, bằng cách sử dụng một biến đếm. Ví dụ:

for ($i = 1; $i <= 10; $i++) { // initialize
check and increment a variable
echo $i . " "; // execute the code block
}

Vòng lặp foreach: Là vòng lặp cho phép duyệt qua các phần tử của một mảng hoặc một đối tượng, và thực hiện một khối mã cho mỗi phần tử. Ví dụ:

$colors = array("red", "green", "blue"); // create an array
foreach ($colors as $color) { // loop through the array elements, echo $color . " "; // execute the code block
}

Cấu trúc điều khiển là các câu lệnh cho phép nhảy qua hoặc thoát khỏi một khối mã hoặc một vòng lặp, tùy thuộc vào một điều kiện hoặc một giá trị. PHP hỗ trợ hai loại cấu trúc điều khiển chính: breakcontinue.

Break: Là câu lệnh cho phép thoát khỏi một vòng lặp hoặc một câu lệnh switch…case, và tiếp tục thực hiện các câu lệnh bên ngoài. Ví dụ:

for ($i = 1; $i <= 10; $i++) { // loop from 1 to 10
if ($i == 5) { // check if i is equal to 5
break; // exit the loop
}
echo $i . " "; // execute the code block
}

Continue: Là câu lệnh cho phép bỏ qua các câu lệnh còn lại trong một vòng lặp, và tiếp tục với lần lặp tiếp theo.

Ví dụ:

for ($i = 1; $i <= 10; $i++) { // loop from 1 to 10
    if ($i % 2 == 0) { // check if i is even
        continue; // skip the rest of the code block
    }
    echo $i . " "; // execute the code block
}

Hàm và thư viện trong PHP

ham-va-thu-vien-trong-php

Hàm là một khối mã có tên, có thể được gọi và thực hiện một hoặc nhiều lần. Hàm có thể nhận vào một hoặc nhiều tham số (parameters) và trả về một giá trị (return value). Hàm trong PHP có những đặc điểm sau:

Định nghĩa hàm bằng từ khóa function: Để tạo một hàm trong PHP, ta sử dụng từ khóa function, theo sau là tên hàm, dấu ngoặc đơn chứa các tham số (nếu có), và dấu ngoặc nhọn chứa khối mã của hàm. Ví dụ: 

function add($a, $b) { // define a function named add with two parameters
return $a + $b; // return the sum of the parameters
}

Gọi hàm bằng tên hàm và dấu ngoặc đơn: Để gọi và thực hiện một hàm trong PHP, ta sử dụng tên hàm, theo sau là dấu ngoặc đơn chứa các đối số (arguments) truyền vào cho hàm (nếu có). Ví dụ: 

echo add(3, 5); // call the function add with two arguments and print the return value

Phân biệt chữ hoa chữ thường trong tên hàm: Tên hàm trong PHP không phân biệt chữ hoa chữ thường, nghĩa là ta có thể gọi hàm bằng cách sử dụng các ký tự chữ hoa hoặc chữ thường. Ví dụ: echo ADD(3, 5); // same as add(3, 5)

Sử dụng từ khóa return để trả về giá trị: Để trả về một giá trị từ một hàm trong PHP, ta sử dụng từ khóa return, theo sau là giá trị muốn trả về. Giá trị trả về có thể thuộc bất kỳ kiểu dữ liệu nào. Nếu không có từ khóa return, hàm sẽ trả về giá trị null. Ví dụ: 

function sayHello($name) { // define a function named sayHello with one parameter
echo "Hello $name"; // print a greeting message
return "Hello $name"; // return a greeting message
}

Thư viện là một tập hợp các hàm hoặc lớp được viết sẵn để thực hiện các chức năng cụ thể. Thư viện trong PHP có những đặc điểm sau:

Sử dụng từ khóa include hoặc require để sử dụng thư viện: Để sử dụng một thư viện trong PHP, ta cần phải nhúng file chứa thư viện vào file hiện tại bằng cách sử dụng từ khóa include hoặc require. Sự khác biệt giữa hai từ khóa này là nếu file thư viện không tồn tại hoặc không được tìm thấy, include sẽ sinh ra một cảnh báo (warning) và tiếp tục thực thi các câu lệnh tiếp theo, trong khi require sẽ sinh ra một lỗi nghiêm trọng (fatal error) và dừng thực thi các câu lệnh tiếp theo. Ví dụ:

include "library.php"; // include the file library.php
require "library.php"; // require the file library.php

Sử dụng hàm hoặc lớp trong thư viện như bình thường: Sau khi nhúng file thư viện vào file hiện tại, ta có thể sử dụng các hàm hoặc lớp trong thư viện như bình thường, bằng cách gọi tên hàm hoặc lớp đó. Ví dụ: 

include "math.php"; // include the file math.php
echo math::pi(); // call the static method pi of the class math
echo math::pow(2, 3); // call the static method pow of the class math

Sử dụng từ khóa namespace để tránh xung đột tên: Nếu có nhiều thư viện có chứa các hàm hoặc lớp có cùng tên, ta có thể sử dụng từ khóa namespace để định nghĩa và sử dụng các không gian tên (namespace) khác nhau cho các thư viện đó. Không gian tên là một cách để phân biệt các hàm hoặc lớp có cùng tên trong các thư viện khác nhau. Ví dụ: 

namespace math; // define a namespace named math

class math { // define a class named math
    public static function pi() { // define a static method named pi
        return 3.14;
    }
}

namespace geometry; // define another namespace named geometry

class math { // define another class named math
    public static function area($a, $b) { // define a static method named area
        return $a * $b;
    }
}

use math\math as m1; // use the namespace math and alias it as m1
use geometry\math as m2; // use the namespace geometry and alias it as m2

echo m1::pi(); // call the method pi of the class math in the namespace math
echo m2::area(2, 3); // call the method area of the class math in the namespace geometry

PHP và tìm kiếm người dùng

PHP-PRG-Double-Submit-Problem

PHP là một ngôn ngữ lập trình web động, có thể tạo ra các trang web phản ứng với yêu cầu của người dùng. PHP có thể xử lý dữ liệu đầu vào từ người dùng, tạo nội dung động dựa trên yêu cầu của người dùng, và tối ưu hóa tìm kiếm trên website với PHP.

PHP và việc xử lý dữ liệu đầu vào từ người dùng

PHP có thể nhận và xử lý dữ liệu đầu vào từ người dùng thông qua hai phương thức chính: GETPOST. Cả hai phương thức đều được sử dụng để gửi dữ liệu từ một trang web đến một trang web khác, nhưng có một số khác biệt quan trọng:

Phương thức GET: Là phương thức được sử dụng để gửi dữ liệu thông qua URL (Uniform Resource Locator) của trang web. Dữ liệu được gửi bằng cách thêm một chuỗi truy vấn (query string) vào cuối URL, bắt đầu bằng ký tự ? và theo sau là các cặp khóa=giá trị, cách nhau bởi ký tự &. Ví dụ: http://example.com/search.php?keyword=php&category=web. Phương thức GET có những đặc điểm sau:

Dễ nhìn thấy và chỉnh sửa: Dữ liệu được gửi bằng phương thức GET có thể được nhìn thấy và chỉnh sửa trên thanh địa chỉ của trình duyệt, hoặc được lưu lại trong lịch sử duyệt web.

Giới hạn kích thước: Dữ liệu được gửi bằng phương thức GET có kích thước giới hạn, tùy thuộc vào trình duyệt và máy chủ, nhưng thường không quá 2048 ký tự.

Không an toàn: Dữ liệu được gửi bằng phương thức GET không an toàn, vì có thể bị nhìn thấy hoặc chặn bởi bất kỳ ai. Do đó, không nên sử dụng phương thức GET để gửi các dữ liệu nhạy cảm, ví dụ như mật khẩu, thông tin cá nhân, thông tin thanh toán…

Thường được sử dụng cho các yêu cầu không làm thay đổi dữ liệu: Phương thức GET thường được sử dụng cho các yêu cầu chỉ lấy dữ liệu từ máy chủ, ví dụ như tìm kiếm, lọc, sắp xếp…

Phương thức POST: Là phương thức được sử dụng để gửi dữ liệu thông qua yêu cầu HTTP (Hypertext Transfer Protocol) của trang web. Dữ liệu được gửi bằng cách mã hóa và đính kèm vào phần nội dung (body) của yêu cầu HTTP, không hiển thị trên URL. Phương thức POST có những đặc điểm sau:

Không nhìn thấy và không chỉnh sửa: Dữ liệu được gửi bằng phương thức POST không nhìn thấy và không chỉnh sửa trên thanh địa chỉ của trình duyệt, và không được lưu lại trong lịch sử duyệt web.

Không giới hạn kích thước: Dữ liệu được gửi bằng phương thức POST không có kích thước giới hạn, có thể gửi được nhiều dữ liệu hơn phương thức GET.

An toàn hơn: Dữ liệu được gửi bằng phương thức POST an toàn hơn, vì không bị nhìn thấy hoặc chặn bởi bất kỳ ai. Do đó, nên sử dụng phương thức POST để gửi các dữ liệu nhạy cảm, ví dụ như mật khẩu, thông tin cá nhân, thông tin thanh toán…

Thường được sử dụng cho các yêu cầu làm thay đổi dữ liệu: Phương thức POST thường được sử dụng cho các yêu cầu gửi dữ liệu đến máy chủ để xử lý, ví dụ như đăng ký, đăng nhập, đăng bài, cập nhật thông tin…

PHP có thể nhận và xử lý dữ liệu từ người dùng thông qua hai biến siêu toàn cục (superglobal) là $_GET và $_POST. Cả hai biến đều là mảng kết hợp (associative array), chứa các cặp khóa=giá trị của dữ liệu được gửi bằng phương thức GET hoặc POST. Ví dụ: 

// URL: http://example.com/search.php?keyword=php&category=web
print_r($_GET); // print the $_GET array
/* Output:
Array (
    [keyword] => php
    [category] => web
)
*/

// Form:
<form method="post" action="login.php">
    <input type="text" name="username" value="john">
    <input type="password" name="password" value="123456">
    <input type="submit" name="submit" value="Login">
</form>

print_r($_POST); // print the $_POST array
/* Output:
Array (
    [username] => john
    [password] => 123456
    [submit] => Login
)
*/

Nhận và xử lý dữ liệu từ form

Form là một phần tử HTML cho phép người dùng nhập và gửi dữ liệu đến máy chủ. Form có thể chứa nhiều loại điều khiển (control) khác nhau, ví dụ như ô nhập liệu (input), nút chọn (radio), hộp kiểm (checkbox), danh sách chọn (select), nút gửi (submit)… Form có hai thuộc tính quan trọng là method và action. Thuộc tính method xác định phương thức gửi dữ liệu của form, có thể là GET hoặc POST. Thuộc tính action xác định URL của trang web sẽ xử lý dữ liệu của form.

Ví dụ: 

<form method="post" action="login.php"> <!-- create a form with method post and action login.php -->
  <input type="text" name="username" value="john"> <!-- create an input control with name username and value john -->
  <input type="password" name="password" value="123456"> <!-- create an input control with name password and value 123456 -->
  <input type="submit" name="submit" value="Login"> <!-- create a submit control with name submit and value Login -->
</form>

Để nhận và xử lý dữ liệu từ form, ta có thể sử dụng biến siêu toàn cục $_POST hoặc $_GET, tùy thuộc vào phương thức gửi dữ liệu của form. Ta có thể truy cập đến các giá trị của các điều khiển trong form bằng cách sử dụng tên của chúng làm khóa cho biến $_POST hoặc $_GET. Ví dụ: 

// File: login.php

// Get the values from the form
$username = $_POST['username']; // get the value of username from $_POST
$password = $_POST['password']; // get the value of password from $_POST
$submit = $_POST['submit']; // get the value of submit from $_POST

// Process the data
if ($submit == "Login") { // check if the submit button is clicked
    if ($username == "admin" && $password == "123456") { // check if the username and password are correct
        echo "Login successful"; // print a success message
    } else {
        echo "Login failed"; // print a failure message
    }
}

Xử lý dữ liệu từ URL và query string

URL là địa chỉ của một tài nguyên trên web, ví dụ như một trang web, một hình ảnh, một file… URL có thể chứa một chuỗi truy vấn (query string), là một chuỗi các tham số được gửi đến máy chủ để xử lý. Chuỗi truy vấn bắt đầu bằng ký tự ? và theo sau là các cặp khóa=giá trị, cách nhau bởi ký tự &. Ví dụ: http://example.com/search.php?keyword=php&category=web

Để nhận và xử lý dữ liệu từ URL và query string, ta có thể sử dụng biến siêu toàn cục $_GET, vì dữ liệu được gửi bằng phương thức GET. Ta có thể truy cập đến các giá trị của các tham số trong query string bằng cách sử dụng tên của chúng làm khóa cho biến $_GET. Ví dụ: 

// File: search.php

// Get the values from the query string
$keyword = $_GET['keyword']; // get the value of keyword from $_GET
$category = $_GET['category']; // get the value of category from $_GET

// Process the data
echo "You searched for $keyword in $category"; // print a message

Tạo nội dung động dựa trên yêu cầu của người dùng

PHP có thể tạo ra các nội dung động dựa trên yêu cầu của người dùng, ví dụ như hiển thị thông tin từ cơ sở dữ liệu, tạo và truy xuất cookie và session, thay đổi giao diện và nội dung theo thời gian, địa điểm, ngôn ngữ… PHP có thể làm được điều này nhờ vào các tính năng sau:

Hiển thị thông tin từ cơ sở dữ liệu

Cơ sở dữ liệu là một hệ thống lưu trữ và quản lý dữ liệu có cấu trúc, cho phép thực hiện các thao tác như thêm, xóa, sửa, truy vấn dữ liệu. PHP có thể kết nối và tương tác với nhiều loại cơ sở dữ liệu khác nhau, nhưng phổ biến nhất là MySQL, một hệ quản trị cơ sở dữ liệu quan hệ (Relational Database Management System) mã nguồn mở.

Để kết nối và tương tác với MySQL, PHP có thể sử dụng các hàm hoặc lớp được cung cấp sẵn trong các thư viện như MySQLi (MySQL Improved) hoặc PDO (PHP Data Objects). Cả hai thư viện đều hỗ trợ các tính năng như kết nối đến máy chủ MySQL, gửi và nhận câu lệnh SQL (Structured Query Language), xử lý kết quả trả về, xử lý lỗi và ngoại lệ…

Để hiển thị thông tin từ cơ sở dữ liệu MySQL, ta có thể làm theo các bước sau:

Bước 1: Kết nối đến máy chủ MySQL: Ta có thể sử dụng hàm mysqli_connect() hoặc phương thức PDO::__construct() để kết nối đến máy chủ MySQL. Ta cần cung cấp các thông tin như tên máy chủ (hostname), tên người dùng (username), mật khẩu (password) và tên cơ sở dữ liệu (database name). Ví dụ:

$conn = mysqli_connect("localhost", "root", "", "test"); // connect to MySQL server using mysqli

$conn = new PDO("mysql:host=localhost;dbname=test", "root", ""); // connect to MySQL server using PDO

Bước 2: Gửi câu lệnh SQL đến máy chủ MySQL: Ta có thể sử dụng hàm mysqli_query() hoặc phương thức PDO::query() để gửi một câu lệnh SQL đến máy chủ MySQL. Ta cần cung cấp kết nối đã được tạo ở bước 1 và câu lệnh SQL muốn gửi. Ví dụ:

$sql = "SELECT * FROM users"; // create a SQL statement

$result = mysqli_query($conn, $sql); // send the SQL statement using mysqli

$result = $conn->query($sql); // send the SQL statement using PDO

Bước 3: Nhận và xử lý kết quả trả về từ máy chủ MySQL: Nếu câu lệnh SQL được gửi thành công, ta sẽ nhận được một kết quả trả về từ máy chủ MySQL. Ta có thể sử dụng các hàm hoặc phương thức để duyệt qua các hàng (row) trong kết quả trả về và hiển thị thông tin của mỗi hàng. Ta có thể sử dụng các hàm như mysqli_fetch_assoc()mysqli_fetch_array()mysqli_fetch_object() hoặc các phương thức như PDOStatement::fetch()PDOStatement::fetchAll()PDOStatement::fetchObject()… Ví dụ: 

while ($row = mysqli_fetch_assoc($result)) { // loop through each row in the result using mysqli
    echo $row['id'] . " " . $row['name'] . " " . $row['email']; // print the information of each row
}

foreach ($result as $row) { // loop through each row in the result using PDO
    echo $row['id'] . " " . $row['name'] . " " . $row['email']; // print the information of each row
}

Bước 4: Đóng kết nối với máy chủ MySQL: Sau khi xử lý xong kết quả trả về, ta nên đóng kết nối với máy chủ MySQL để giải phóng tài nguyên và tránh lỗi. Ta có thể sử dụng hàm mysqli_close() hoặc phương thức PDO::close() để đóng kết nối. Ví dụ: 

mysqli_close($conn); // close the connection using mysqli

$conn = null; // close the connection using PDO

Tạo và truy xuất cookie và session

Cookie là một phương tiện để lưu trữ và truyền tải dữ liệu giữa trình duyệt và máy chủ. Cookie là một tập tin nhỏ được máy chủ gửi đến trình duyệt, và được trình duyệt lưu lại trên máy tính của người dùng. Cookie có thể chứa các thông tin như tên người dùng, mật khẩu, sở thích, lịch sử duyệt web… Cookie có thể được sử dụng để nhận diện người dùng, duy trì phiên đăng nhập, tùy biến giao diện và nội dung…

Session là một phương tiện để lưu trữ và truyền tải dữ liệu giữa các trang web khác nhau trong cùng một ứng dụng web. Session là một biến toàn cục được lưu trữ trên máy chủ, và được gán cho mỗi người dùng khi họ truy cập vào ứng dụng web. Session có thể chứa các thông tin như tên người dùng, quyền truy cập, giỏ hàng… Session có thể được sử dụng để kiểm soát quyền truy cập, theo dõi hoạt động của người dùng, lưu lại các lựa chọn của người dùng…

Để tạo và truy xuất cookie và session trong PHP, ta có thể làm theo các bước sau:

Bước 1: Tạo cookie bằng hàm setcookie(): Để tạo một cookie trong PHP, ta sử dụng hàm setcookie(), có thể nhận vào nhiều tham số, nhưng quan trọng nhất là tên (name) và giá trị (value) của cookie. Hàm setcookie() phải được gọi trước khi bất kỳ đầu ra nào được gửi đến trình duyệt. Ví dụ: setcookie("username", "john"); // create a cookie named username with value john

Bước 2: Truy xuất cookie bằng biến siêu toàn cục $_COOKIE: Để truy xuất một cookie trong PHP, ta sử dụng biến siêu toàn cục $_COOKIE, là một mảng kết hợp chứa các cặp khóa=giá trị của các cookie được gửi đến máy chủ. Ta có thể truy cập đến giá trị của một cookie bằng cách sử dụng tên của nó làm khóa cho biến $_COOKIE. Ví dụ: echo $_COOKIE["username"]; // print the value of the cookie named username

Bước 3: Tạo session bằng hàm session_start(): Để tạo một session trong PHP, ta sử dụng hàm session_start(), có thể nhận vào một tham số là một mảng các tùy chọn cho session. Hàm session_start() phải được gọi ở đầu mỗi trang web sử dụng session. Hàm này sẽ khởi tạo biến siêu toàn cục $_SESSION và gán cho nó một ID duy nhất. Ví dụ: session_start(); // start a session

Bước 4: Truy xuất session bằng biến siêu toàn cục $_SESSION: Để truy xuất một session trong PHP, ta sử dụng biến siêu toàn cục $_SESSION, là một biến toàn cục có thể lưu trữ và truyền tải dữ liệu giữa các trang web khác nhau. Ta có thể truy cập đến giá trị của một session bằng cách sử dụng tên của nó làm khóa cho biến $_SESSION. Ví dụ:

session_start(); // start the session
$_SESSION["username"] = "john"; // assign a value to the session named username
echo $_SESSION["username"]; // print the value of the session named username

Bước 5: Xóa cookie bằng hàm setcookie() với thời gian hết hạn: Để xóa một cookie trong PHP, ta sử dụng lại hàm setcookie(), nhưng lần này ta cần đặt thời gian hết hạn (expire) của cookie là một thời điểm trong quá khứ. Ví dụ:

setcookie("username", "", time() - 3600); // delete the cookie named username by setting its expire time to one hour ago

Bước 6: Xóa session bằng hàm session_destroy(): Để xóa một session trong PHP, ta sử dụng hàm session_destroy(), có thể nhận vào một tham số là ID của session muốn xóa. Hàm này sẽ xóa tất cả các dữ liệu liên quan đến session đó trên máy chủ. Ví dụ: session_destroy(); // destroy the current session

Tối ưu hóa tìm kiếm trên website với PHP

xay-dung-chuc-nang-tim-kiem-tren-website-bang-php

Tìm kiếm là một chức năng quan trọng của một website, cho phép người dùng tìm kiếm các thông tin, sản phẩm, dịch vụ… mà họ quan tâm. PHP có thể tạo ra các chức năng tìm kiếm động và linh hoạt, dựa trên dữ liệu từ cơ sở dữ liệu, URL, query string, form… PHP cũng có thể tối ưu hóa tìm kiếm trên website, bằng cách sử dụng các kỹ thuật như:

Tìm kiếm theo từ khóa

Tìm kiếm theo từ khóa là một kỹ thuật cho phép người dùng nhập vào một hoặc nhiều từ khóa để tìm kiếm các kết quả liên quan. Tìm kiếm theo từ khóa có thể được thực hiện bằng cách sử dụng các bước sau:

Bước 1: Tạo một form nhập liệu cho người dùng nhập vào từ khóa: Ta có thể tạo một form nhập liệu bằng HTML, có thể sử dụng phương thức GET hoặc POST để gửi dữ liệu. Ví dụ:

<form method="get" action="search.php"> <!-- create a form with method get and action search.php -->
  <input type="text" name="keyword" value=""> <!-- create an input control with name keyword and empty value -->
  <input type="submit" name="submit" value="Search"> <!-- create a submit control with name submit and value Search -->
</form>

Bước 2: Nhận và xử lý từ khóa từ form: Ta có thể nhận và xử lý từ khóa từ form bằng PHP, sử dụng biến siêu toàn cục $_GET hoặc $_POST, tùy thuộc vào phương thức gửi dữ liệu của form. Ta có thể sử dụng các hàm như trim(), strtolower(), explode() để loại bỏ các khoảng trắng thừa, chuyển đổi thành chữ thường, và tách thành một mảng các từ khóa. Ví dụ:

// File: search.php
// Get and process the keyword from the form
$keyword = $_GET['keyword']; // get the value of keyword from $_GET
$keyword = trim($keyword); // remove any extra whitespace from the keyword
$keyword = strtolower($keyword); // convert the keyword to lowercase
$keywords = explode(" ", $keyword); // split the keyword into an array of words

Bước 3: Tạo câu lệnh SQL để tìm kiếm theo từ khóa trong cơ sở dữ liệu: Ta có thể tạo một câu lệnh SQL để tìm kiếm theo từ khóa trong cơ sở dữ liệu MySQL, sử dụng toán tử LIKE hoặc hàm MATCH…AGAINST. Toán tử LIKE cho phép tìm kiếm các giá trị có chứa một chuỗi ký tự nào đó, có thể sử dụng ký tự đại diện (%) để thay thế cho một hoặc nhiều ký tự bất kỳ. Hàm MATCH…AGAINST cho phép tìm kiếm các giá trị có liên quan đến một hoặc nhiều từ khóa nào đó, có thể sử dụng các chế độ như IN NATURAL LANGUAGE MODE hoặc IN BOOLEAN MODE để tăng độ chính xác và linh hoạt của tìm kiếm. Ví dụ:

$sql = "SELECT * FROM posts WHERE title LIKE '%$keyword%' OR content LIKE '%$keyword%'"; // tạo câu lệnh SQL sử dụng toán tử LIKE

$sql = "SELECT * FROM posts WHERE MATCH (title, content) AGAINST ('$keyword' IN NATURAL LANGUAGE MODE)"; // tạo câu lệnh SQL sử dụng hàm MATCH...AGAINST

//Trong đoạn mã trên, chúng ta tạo câu lệnh SQL để truy vấn cơ sở dữ liệu. Câu lệnh đầu tiên sử dụng toán tử LIKE để tìm kiếm các bản ghi có tiêu đề hoặc nội dung chứa từ khóa tìm kiếm. Biểu thức '%$keyword%' được sử dụng để so khớp từ khóa với các giá trị trong cột tiêu đề hoặc nội dung.

//Câu lệnh thứ hai sử dụng hàm MATCH...AGAINST để tìm kiếm theo tiêu đề hoặc nội dung với cú pháp đầy đủ của hàm này. Câu lệnh này sử dụng tìm kiếm toàn văn bằng cách so sánh từ khóa với các từ trong cột tiêu đề và nội dung.

//Bạn có thể chọn câu lệnh phù hợp dựa trên yêu cầu của mình và tính năng tìm kiếm mong muốn.

Bước 4: Gửi câu lệnh SQL đến máy chủ MySQL và nhận kết quả trả về: Ta có thể gửi câu lệnh SQL đến máy chủ MySQL và nhận kết quả trả về bằng cách sử dụng các hàm hoặc phương thức đã được giới thiệu ở phần trước. Ví dụ:

$result = mysqli_query($conn, $sql); // sử dụng mysqli để gửi câu lệnh SQL và nhận kết quả
$result = $conn->query($sql); // sử dụng PDO để gửi câu lệnh SQL và nhận kết quả

//Trong đoạn mã trên, chúng ta sử dụng hàm mysqli_query() để gửi câu lệnh SQL tới máy chủ MySQL bằng đối tượng kết nối mysqli ($conn) và nhận kết quả trả về. Kết quả được lưu trữ trong biến $result.

//Tương tự, chúng ta cũng có thể sử dụng phương thức query() của đối tượng kết nối PDO ($conn) để gửi câu lệnh SQL tới cơ sở dữ liệu bằng PDO và nhận kết quả. Kết quả cũng được lưu trữ trong biến $result.

//Cả hai phương pháp đều đạt được mục tiêu thực hiện câu lệnh SQL và nhận kết quả, nhưng cú pháp khác nhau tùy thuộc vào loại đuôi mở rộng cơ sở dữ liệu được sử dụng (mysqli hoặc PDO). Chọn phương pháp phù hợp dựa trên đuôi mở rộng cơ sở dữ liệu bạn ưa thích.

Bước 5: Hiển thị kết quả trả về cho người dùng: Ta có thể hiển thị kết quả trả về cho người dùng bằng cách sử dụng các hàm hoặc phương thức để duyệt qua các hàng trong kết quả trả về và hiển thị thông tin của mỗi hàng. Ta có thể sử dụng các thẻ HTML để định dạng nội dung hiển thị. Ví dụ:

echo "<ul>"; // tạo danh sách không có thứ tự (unordered list)
while ($row = mysqli_fetch_assoc($result)) { // lặp qua từng hàng trong kết quả sử dụng mysqli
    echo "<li>"; // tạo một mục danh sách (list item)
    echo "<h3>" . $row['title'] . "</h3>"; // in tiêu đề của từng hàng
    echo "<p>" . $row['content'] . "</p>"; // in nội dung của từng hàng
    echo "</li>"; // đóng mục danh sách
}
echo "</ul>"; // đóng danh sách không có thứ tự (unordered list)

Trong đoạn mã trên, chúng ta sử dụng vòng lặp while để duyệt qua từng hàng trong kết quả của câu truy vấn. Đối với mỗi hàng, chúng ta tạo một mục danh sách (list item) và in tiêu đề và nội dung của hàng đó. Cuối cùng, chúng ta đóng danh sách không có thứ tự (unordered list) bằng cách đặt echo "</ul>". Điều này sẽ tạo ra một danh sách HTML với các tiêu đề và nội dung từ kết quả truy vấn.

Lọc và sắp xếp kết quả tìm kiếm

Lọc và sắp xếp kết quả tìm kiếm là một kỹ thuật cho phép người dùng lựa chọn các tiêu chí để giới hạn hoặc sắp xếp lại các kết quả tìm kiếm, ví dụ như theo danh mục, giá, thời gian, độ phổ biến… Lọc và sắp xếp kết quả tìm kiếm có thể được thực hiện bằng cách sử dụng các bước sau:

Bước 1: Tạo các điều khiển cho người dùng lựa chọn các tiêu chí lọc và sắp xếp: Ta có thể tạo các điều khiển bằng HTML, có thể sử dụng phương thức GET hoặc POST để gửi dữ liệu. Các điều khiển có thể là các nút chọn (radio), hộp kiểm (checkbox), danh sách chọn (select), nút gửi (submit)… Ví dụ:

<form method="get" action="search.php"> <!-- tạo một biểu mẫu với phương thức get và hành động search.php -->
  <input type="hidden" name="keyword" value="<?php echo $keyword; ?>"> <!-- tạo một input ẩn để lưu trữ từ khóa -->

  <label for="category">Danh mục:</label> <!-- tạo một nhãn cho danh mục -->
  <select name="category" id="category"> <!-- tạo một điều khiển chọn cho danh mục -->
    <option value="all">Tất cả</option> <!-- tạo một tùy chọn cho tất cả danh mục -->
    <option value="web">Web</option> <!-- tạo một tùy chọn cho danh mục web -->
    <option value="mobile">Mobile</option> <!-- tạo một tùy chọn cho danh mục di động -->
  </select>

  <label for="price">Giá:</label> <!-- tạo một nhãn cho giá -->
  <input type="radio" name="price" id="price" value="all" checked> Tất cả <!-- tạo một nút radio cho tất cả các mức giá -->
  <input type="radio" name="price" id="price" value="free"> Miễn phí <!-- tạo một nút radio cho mức giá miễn phí -->
  <input type="radio" name="price" id="price" value="paid"> Trả phí <!-- tạo một nút radio cho mức giá trả phí -->

  <label for="sort">Sắp xếp theo:</label> <!-- tạo một nhãn cho sắp xếp theo -->
  <input type="radio" name="sort" id="sort" value="relevance" checked> Tính phù hợp <!-- tạo một nút radio cho sắp xếp theo tính phù hợp -->
  <input type="radio" name="sort" id="sort" value="date"> Ngày <!-- tạo một nút radio cho sắp xếp theo ngày -->
  <input type="radio" name="sort" id="sort" value="popularity"> Độ phổ biến <!-- tạo một nút radio cho sắp xếp theo độ phổ biến -->

  <input type="submit" name="submit" value="Lọc và Sắp xếp"> <!-- tạo một nút gửi để lọc và sắp xếp kết quả -->
</form>

Bước 2: Nhận và xử lý các tiêu chí lọc và sắp xếp từ form: Ta có thể nhận và xử lý các tiêu chí lọc và sắp xếp từ form bằng PHP, sử dụng biến siêu toàn cục $_GET hoặc $_POST, tùy thuộc vào phương thức gửi dữ liệu của form. Ta có thể truy cập đến các giá trị của các điều khiển trong form bằng cách sử dụng tên của chúng làm khóa cho biến $_GET hoặc $_POST.

Ví dụ:

// File: search.php
// Lấy và xử lý tiêu chí lọc và sắp xếp từ biểu mẫu
$keyword = $_GET['keyword']; // lấy giá trị từ khóa từ $_GET
$category = $_GET['category']; // lấy giá trị danh mục từ $_GET
$price = $_GET['price']; // lấy giá trị giá từ $_GET
$sort = $_GET['sort']; // lấy giá trị sắp xếp từ $_GET

Bước 3: Tạo câu lệnh SQL để lọc và sắp xếp kết quả tìm kiếm theo các tiêu chí từ form: Ta có thể tạo một câu lệnh SQL để lọc và sắp xếp kết quả tìm kiếm theo các tiêu chí từ form, sử dụng các từ khóa như WHEREANDORORDER BY. Ta có thể sử dụng các toán tử hoặc hàm để so sánh, lọc, sắp xếp các giá trị trong cơ sở dữ liệu.

Ví dụ: 

$sql = "SELECT * FROM posts WHERE MATCH (title, content) AGAINST ('$keyword' IN NATURAL LANGUAGE MODE)"; // create a SQL statement to search by keyword

if ($category != "all") { // check if the category is not all
    $sql .= " AND category = '$category'"; // add a condition to filter by category
}

if ($price != "all") { // check if the price is not all
    $sql .= " AND price = '$price'"; // add a condition to filter by price
}

if ($sort == "date") { // check if the sort by is date
    $sql .= " ORDER BY date DESC"; // add an order by clause to sort by date in descending order
} elseif ($sort == "popularity") { // check if the sort by is popularity
    $sql .= " ORDER BY views DESC"; // add an order by clause to sort by views in descending order
} else { // otherwise
    $sql .= " ORDER BY relevance DESC"; // add an order by clause to sort by relevance in descending order
}

Bước 4: Gửi câu lệnh SQL đến máy chủ MySQL và nhận kết quả trả về: Ta có thể gửi câu lệnh SQL đến máy chủ MySQL và nhận kết quả trả về bằng cách sử dụng các hàm hoặc phương thức đã được giới thiệu ở phần trước.

Ví dụ: 

$result = mysqli_query($conn, $sql); // send the SQL statement using mysqli and get the result 
$result = $conn->query($sql); // send the SQL statement using PDO and get the result

Bước 5: Hiển thị kết quả trả về cho người dùng: Ta có thể hiển thị kết quả trả về cho người dùng bằng cách sử dụng các hàm hoặc phương thức để duyệt qua các hàng trong kết quả trả về và hiển thị thông tin của mỗi hàng. Ta có thể sử dụng các thẻ HTML để định dạng nội dung hiển thị.

Ví dụ: 

echo "<ul>"; // create an unordered list

while ($row = mysqli_fetch_assoc($result)) { // loop through each row in the result using mysqli
    echo "<li>"; // create a list item
    echo "<h3>" . $row['title'] . "</h3>"; // print the title of each row
    echo "<p>" . $row['content'] . "</p>"; // print the content of each row
    echo "<span>" . $row['category'] . "</span>"; // print the category of each row
    echo "<span>" . $row['price'] . "</span>"; // print the price of each row
    echo "<span>" . $row['date'] . "</span>"; // print the date of each row
    echo "<span>" . $row['views'] . "</span>"; // print the views of each row
    echo "</li>"; // close the list item
}

echo "</ul>"; // close the unordered list

Kỹ thuật tối ưu hóa và bảo mật trong PHP

bao-mat-website-la-gi-6

PHP là một ngôn ngữ lập trình web động, có thể tạo ra các ứng dụng web phong phú và chức năng. Tuy nhiên, PHP cũng có thể gặp phải một số vấn đề về hiệu suất và bảo mật, nếu không được viết và quản lý tốt. Do đó, ta cần áp dụng một số kỹ thuật tối ưu hóa và bảo mật trong PHP, như:

Tối ưu hóa mã nguồn PHP

Tối ưu hóa mã nguồn PHP là một kỹ thuật cho phép cải thiện hiệu suất của mã nguồn PHP, bằng cách giảm thiểu thời gian xử lý, tăng tốc độ chạy, giảm tài nguyên tiêu thụ… Tối ưu hóa mã nguồn PHP có thể được thực hiện bằng cách sử dụng các kỹ thuật như:

Cải thiện hiệu suất mã nguồn

Cải thiện hiệu suất mã nguồn là một kỹ thuật cho phép viết mã nguồn PHP một cách hiệu quả và tinh gọn, bằng cách sử dụng các kỹ thuật như:

Sử dụng các toán tử và hàm nhanh hơn: Một số toán tử và hàm trong PHP có thể được thay thế bằng các toán tử và hàm khác có tốc độ xử lý nhanh hơn. Ví dụ: 

echo "Hello" . " " . "World"; // slow
echo "Hello" . ' ' . "World"; // faster alternative

$a = $a + 1; // slow
$a++; // faster alternative

in_array($x, $array); // slow
isset($array[$x]); // faster alternative

Sử dụng các biến cục bộ thay vì biến toàn cục: Biến cục bộ là các biến chỉ có phạm vi trong một hàm hoặc một khối mã, trong khi biến toàn cục là các biến có phạm vi trong toàn bộ chương trình. Biến cục bộ có tốc độ truy cập nhanh hơn biến toàn cục, vì chúng được lưu trữ trong bộ nhớ stack, trong khi biến toàn cục được lưu trữ trong bộ nhớ heap. Ví dụ: 

function add($a, $b) { // định nghĩa một hàm với hai biến cục bộ
  return $a + $b; // trả về tổng của hai biến cục bộ
}

$x = 10;
$y = 20; // định nghĩa hai biến toàn cục

echo add($x, $y); // gọi hàm với hai biến toàn cục

Sử dụng các vòng lặp hiệu quả: Vòng lặp là một cấu trúc lập trình cho phép thực hiện một khối mã nhiều lần. Tuy nhiên, vòng lặp cũng có thể làm chậm hiệu suất của mã nguồn PHP, nếu không được sử dụng một cách hiệu quả. Ta có thể sử dụng các kỹ thuật như:

Giảm số lần lặp: Ta nên giảm số lần lặp tối thiểu cần thiết để thực hiện một khối mã, bằng cách sử dụng các điều kiện để thoát khỏi vòng lặp khi có thể, hoặc sử dụng các hàm có sẵn để thay thế cho vòng lặp. Ví dụ:

for ($i = 0; $i < count($array); $i++) { // chậm, đếm độ dài của mảng trong mỗi lần lặp
  echo $array[$i]; // in từng phần tử của mảng
}

for ($i = 0, $n = count($array); $i < $n; $i++) { // nhanh, đếm độ dài của mảng chỉ một lần
  echo $array[$i]; // in từng phần tử của mảng
}

foreach ($array as $element) { // nhanh hơn, sử dụng vòng lặp foreach thay vì vòng lặp for
  echo $element; // in từng phần tử của mảng
}

Tối ưu hóa điều kiện trong vòng lặp: Ta nên tối ưu hóa điều kiện trong vòng lặp, bằng cách sử dụng các toán tử và hàm nhanh hơn, hoặc đặt các điều kiện ít xảy ra trước. Ví dụ:

while ($a != 0 && $b != 0) { // chậm, sử dụng toán tử != hai lần
  // làm một số việc
}

while (!($a == 0 || $b == 0)) { // nhanh, sử dụng !, == và || chỉ một lần
  // làm một số việc
}

if ($a > 10 && expensive_function($a)) { // chậm, gọi một hàm tốn kém ngay cả khi $a không lớn hơn 10
  // làm một số việc
}

if (expensive_function($a) && $a > 10) { // nhanh, gọi một hàm tốn kém chỉ khi $a lớn hơn 10
  // làm một số việc
}

Sử dụng bộ nhớ cache và hệ thống cache: Bộ nhớ cache là một khu vực lưu trữ tạm thời cho các dữ liệu được sử dụng thường xuyên, cho phép truy cập nhanh hơn so với bộ nhớ chính. Hệ thống cache là một hệ thống quản lý bộ nhớ cache, cho phép tạo, lưu, truy xuất và xóa các dữ liệu trong bộ nhớ cache. PHP có thể sử dụng các hệ thống cache như APC (Alternative PHP Cache), Memcached, Redis… để tăng tốc độ xử lý của mã nguồn PHP. Ví dụ:

$memcached = new Memcached(); // tạo một đối tượng Memcached
$memcached->addServer("localhost", 11211); // thêm một máy chủ Memcached trên localhost cổng 11211
$result = $memcached->get("posts"); // lấy giá trị của khóa "posts" từ Memcached

if ($result) { // kiểm tra nếu giá trị tồn tại trong Memcached
  echo $result; // in giá trị từ Memcached
} else { // nếu không tồn tại
  $result = mysqli_query($conn, "SELECT * FROM posts"); // truy vấn cơ sở dữ liệu để lấy bài viết
  $memcached->set("posts", $result, 3600); // thiết lập giá trị của khóa "posts" là kết quả và thời gian tồn tại là một giờ trong Memcached
  echo $result; // in giá trị từ cơ sở dữ liệu
}

Bảo mật ứng dụng PHP

bao-mat-doi-voi-cloud-server

Bảo mật ứng dụng PHP là một kỹ thuật cho phép bảo vệ ứng dụng PHP khỏi các mối đe dọa và tấn công từ bên ngoài, ví dụ như SQL Injection, Cross-Site Scripting (XSS), Cross-Site Request Forgery (CSRF)… Bảo mật ứng dụng PHP có thể được thực hiện bằng cách sử dụng các kỹ thuật như:

Xử lý và ngăn chặn tấn công SQL Injection

SQL Injection là một kỹ thuật tấn công cho phép kẻ tấn công chèn các câu lệnh SQL độc hại vào các truy vấn SQL của ứng dụng PHP, nhằm truy cập hoặc thay đổi dữ liệu trong cơ sở dữ liệu. SQL Injection có thể gây ra các hậu quả nghiêm trọng, như đánh cắp thông tin cá nhân, xóa hoặc sửa đổi dữ liệu, thực hiện các hành động không được phép…

Để xử lý và ngăn chặn tấn công SQL Injection, ta có thể sử dụng các kỹ thuật như:

Kiểm tra và lọc dữ liệu đầu vào: Ta nên kiểm tra và lọc dữ liệu đầu vào từ người dùng, bằng cách sử dụng các hàm như trim(), stripslashes(), htmlspecialchars(), filter_var()… để loại bỏ các khoảng trắng thừa, các ký tự đặc biệt, các thẻ HTML, các giá trị không hợp lệ… Ví dụ:

$username = $_POST['username']; // lấy giá trị của username từ $_POST
$username = trim($username); // loại bỏ khoảng trắng thừa trong username
$username = stripslashes($username); // loại bỏ các ký tự backslashes (slashes ngược) trong username
$username = htmlspecialchars($username); // chuyển đổi các ký tự đặc biệt thành các thực thể HTML trong username
$username = filter_var($username, FILTER_SANITIZE_STRING); // làm sạch username như một chuỗi ký tự

Sử dụng các câu lệnh SQL được tham số hóa: Ta nên sử dụng các câu lệnh SQL được tham số hóa, là một kỹ thuật cho phép tách biệt giữa câu lệnh SQL và các giá trị được truyền vào. Ta có thể sử dụng các hàm hoặc phương thức như mysqli_prepare(), mysqli_stmt_bind_param(), mysqli_stmt_execute() hoặc PDO::prepare(), PDOStatement::bindParam(), PDOStatement::execute()… để tạo và thực thi các câu lệnh SQL được tham số hóa. Ví dụ:

$sql = "SELECT * FROM users WHERE username = ? AND password = ?"; // tạo câu lệnh SQL với hai tham số
$stmt = mysqli_prepare($conn, $sql); // chuẩn bị câu lệnh SQL sử dụng mysqli
mysqli_stmt_bind_param($stmt, "ss", $username, $password); // liên kết các tham số vào câu lệnh SQL sử dụng mysqli
mysqli_stmt_execute($stmt); // thực thi câu lệnh SQL sử dụng mysqli

$sql = "SELECT * FROM users WHERE username = :username AND password = :password"; // tạo câu lệnh SQL với hai tham số có tên
$stmt = $conn->prepare($sql); // chuẩn bị câu lệnh SQL sử dụng PDO
$stmt->bindParam(":username", $username); // liên kết các tham số vào câu lệnh SQL sử dụng PDO
$stmt->bindParam(":password", $password); // liên kết các tham số vào câu lệnh SQL sử dụng PDO
$stmt->execute(); // thực thi câu lệnh SQL sử dụng PDO

Quản lý phiên làm việc và bảo vệ khỏi tấn công Cross-Site Scripting (XSS)

Phiên làm việc (session) là một phương tiện để lưu trữ và truyền tải dữ liệu giữa các trang web khác nhau trong cùng một ứng dụng web. Phiên làm việc có thể được sử dụng để kiểm soát quyền truy cập, theo dõi hoạt động của người dùng, lưu lại các lựa chọn của người dùng…

Cross-Site Scripting (XSS) là một kỹ thuật tấn công cho phép kẻ tấn công chèn các đoạn mã JavaScript độc hại vào các trang web, nhằm ăn cắp hoặc thay đổi dữ liệu của người dùng, chuyển hướng người dùng đến các trang web giả mạo, thực hiện các hành động không được phép…

Để quản lý phiên làm việc và bảo vệ khỏi tấn công XSS, ta có thể sử dụng các kỹ thuật như:

Sử dụng hàm session_start() để bắt đầu một phiên làm việc: Để bắt đầu một phiên làm việc trong PHP, ta sử dụng hàm session_start(), có thể nhận vào một tham số là một mảng các tùy chọn cho phiên. Hàm session_start() phải được gọi ở đầu mỗi trang web sử dụng phiên. Hàm này sẽ khởi tạo biến siêu toàn cục $_SESSION và gán cho nó một ID duy nhất. Ví dụ: session_start(); // start a session

Sử dụng biến siêu toàn cục $_SESSION để lưu trữ và truyền tải dữ liệu giữa các trang web: Để lưu trữ và truyền tải dữ liệu giữa các trang web trong cùng một phiên, ta sử dụng biến siêu toàn cục $_SESSION, là một biến toàn cục có thể lưu trữ và truyền tải dữ liệu giữa các trang web khác nhau. Ta có thể truy cập đến giá trị của một phiên bằng cách sử dụng tên của nó làm khóa cho biến $_SESSION. Ví dụ:

$_SESSION["username"] = "john"; // assign a value to the session named username
echo $_SESSION["username"]; // print the value of the session named username

Sử dụng hàm session_destroy() để kết thúc một phiên làm việc: Để kết thúc một phiên làm việc trong PHP, ta sử dụng hàm session_destroy(), có thể nhận vào một tham số là ID của phiên muốn xóa. Hàm này sẽ xóa tất cả các dữ liệu liên quan đến phiên đó trên máy chủ. Ví dụ: session_destroy(); // destroy the current session

Sử dụng hàm htmlspecialchars() để chống lại tấn công XSS: Để chống lại tấn công XSS, ta nên sử dụng hàm htmlspecialchars(), có thể nhận vào một chuỗi và trả về một chuỗi đã được chuyển đổi các ký tự đặc biệt thành các thực thể HTML (HTML entities). Hàm này sẽ ngăn chặn các đoạn mã JavaScript độc hại được chèn vào các trang web. Ta nên sử dụng hàm này khi hiển thị các dữ liệu đầu vào từ người dùng hoặc từ cơ sở dữ liệu. Ví dụ: 

$tendangnhap = $_POST[‘tendangnhap’]; // lấy giá trị của tendangnhap từ $_POST 
$tendangnhap = htmlspecialchars($tendangnhap); // chuyển đổi các ký tự đặc biệt thành các thực thể HTML trong tendangnhap 
echo “Xin chào $tendangnhap”; // in ra một thông điệp chào mừng với tendangnhap

Tài liệu tham khảo và công cụ hỗ trợ

PHP là một ngôn ngữ lập trình web phổ biến và được sử dụng rộng rãi. Do đó, có nhiều tài liệu học PHP và các nguồn tài liệu tham khảo cho người mới bắt đầu và người có kinh nghiệm. Ngoài ra, cũng có nhiều công cụ phát triển PHP phổ biến và cộng đồng và diễn đàn hỗ trợ cho PHP.

Các tài liệu học PHP và các nguồn tài liệu tham khảo

Các tài liệu học PHP và các nguồn tài liệu tham khảo là các nguồn thông tin giúp người học nắm bắt các kiến thức cơ bản và nâng cao về PHP, cũng như tra cứu các chức năng, hàm, lớp, thư viện… của PHP. Các tài liệu học PHP và các nguồn tài liệu tham khảo có thể là:

Trang web chính thức của PHP: Là trang web chính thức của PHP, cung cấp các thông tin về PHP, các phiên bản mới nhất, các hướng dẫn cài đặt, các tài liệu tham khảo về các chức năng, hàm, lớp, thư viện… của PHP.

W3Schools: Là một trang web học lập trình web miễn phí, cung cấp các khóa học về HTML, CSS, JavaScript, PHP, MySQL… W3Schools có khóa học về PHP bao gồm các bài học từ cơ bản đến nâng cao, các ví dụ minh họa, các bài tập thực hành và kiểm tra.

PHP.net: Là một trang web cung cấp các tài liệu tham khảo về PHP, bao gồm các hướng dẫn, các ví dụ, các bình luận và các liên kết liên quan.

PHP The Right Way: Là một trang web cung cấp các hướng dẫn về các phương pháp và thực tiễn tốt nhất trong lập trình PHP.

Các công cụ phát triển PHP phổ biến

Các công cụ phát triển PHP phổ biến là các phần mềm hoặc dịch vụ giúp người lập trình PHP viết, kiểm tra, sửa lỗi, chạy và triển khai mã nguồn PHP một cách hiệu quả và tiện lợi. Các công cụ phát triển PHP phổ biến có thể là:

XAMPP: Là một gói phần mềm miễn phí và mã nguồn mở, cho phép cài đặt và chạy một máy chủ web Apache trên máy tính cá nhân. XAMPP bao gồm các thành phần như PHP, MySQL, Perl, phpMyAdmin…

Visual Studio Code: Là một trình biên tập mã nguồn miễn phí và mã nguồn mở, hỗ trợ nhiều ngôn ngữ lập trình, trong đó có PHP. Visual Studio Code có các tính năng như đánh dấu cú pháp, gợi ý mã, gỡ lỗi, kiểm tra lỗi, mở rộng…

PHPStorm: Là một môi trường phát triển tích hợp (Integrated Development Environment – IDE) chuyên dụng cho PHP, được phát triển bởi JetBrains. PHPStorm có các tính năng như chỉnh sửa mã thông minh, gỡ lỗi, kiểm tra lỗi, kiểm tra mã, hỗ trợ các framework và công nghệ web phổ biến…

CodeIgniter: Là một framework mã nguồn mở cho PHP, cho phép xây dựng các ứng dụng web nhanh chóng và dễ dàng. CodeIgniter có các tính năng như kiến trúc MVC (Model-View-Controller), thư viện và trợ giúp xây dựng, bảo mật và xử lý lỗi…

Xem thêm: Loopback là gì? Cách cài đặt và sử dụng từ A-Z

Cộng đồng và diễn đàn hỗ trợ cho PHP

Cộng đồng và diễn đàn hỗ trợ cho PHP là các nơi trao đổi, chia sẻ và giải đáp các vấn đề liên quan đến PHP. Cộng đồng và diễn đàn hỗ trợ cho PHP có thể là:

Stack Overflow: Là một trang web hỏi đáp về lập trình, có nhiều câu hỏi và câu trả lời về PHP.

PHP Freaks: Là một trang web cung cấp các tài nguyên về PHP, bao gồm các bài viết, tin tức, diễn đàn, công việc…

Laravel.io: Là một trang web cung cấp các tài nguyên về Laravel, một framework PHP phổ biến. Laravel.io có các chức năng như diễn đàn, podcast, blog, công việc…


Đánh giá: 

(0 lượt)
Lưu ý:

*Thông tin trong bài viết đều là những kiến thức chuyên môn và kinh nghiệm thực tế của đội ngũ sáng tạo tại MDIGI . Mọi hành vi sao chép vui lòng ghi trích dẫn nguồn MDIGI.vn! Xem Điều khoản & điều kiện của Chúng tôi.

*Cập nhật mới nhất ngày: 07/08/2023

Đôi nét về tác giả Mạnh Đức

Mạnh Đức

Tốt nghiệp Đại học kỹ thuật Lê Quý Đôn năm 2018 nhưng đã bắt đầu với Digital Marketing từ những năm 2015. Với kinh nghiệm thực chiến từ hàng trăm dự án, Mạnh Đức muốn mang những gì tốt nhất cho khách hàng của MDIGI.

26 bài viết cùng chủ đề Cơ bản về website

Cookie là gì? Tầm quan trọng của Cookie
CSS là gì? Vai trò của CSS đối với website
ASP.NET là gì? Các tính năng chính của ASP.NET
Thiết kế giao diện web đẹp, chuyên nghiệp
Quy trình thiết kế website chuyên nghiệp
Update website là gì? Tại sao cần Update website?
Theo dõi
Thông báo của
guest
0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận