Web back-end (7) - Làm quen với PHP

Xem video bài giảng       

1         Lập trình back-end căn bản

Như các bạn đã biết, một trong những năng lực quan trọng của một lập trình viên là khả năng thích ứng. Nghĩa là, họ có thể dễ dàng chuyển đổi ngôn ngữ lập trình trong thời gian ngắn (trong một vài tuần), ví dụ từ ngôn ngữ PHP sang C#, từ Java sang JavaScript,…v.v.

Để có được năng lực thích ứng, chúng ta cần học các môn học “Cơ sở ngành” thật bài bản, ví dụ cần học thật kĩ các môn Nhập môn lập trình, Kĩ thuật lập trình, Lập trình hướng đối tượng, Cấu trúc dữ liệu thuật giải, Kiến trúc máy tính, Hệ điều hành, Cơ sở dữ liệu, Lý thuyết mạng,…v.v. Sau đó lựa chọn và học thật bài bản một nền tảng làm ứng dụng.

Ở phần này, xem như bạn đã có kiến thức cơ sở ngành, nên sẽ tập trung nhiều vào mảng làm ứng dụng web phía server. Đồng thời chúng ta cũng sẽ cùng trải nghiệm: khi học một ngôn ngữ, một nền tảng phát triển ứng dụng mới thì cần tìm hiểu các nội dung gì, đây cũng là một kĩ năng quan trọng giúp bạn tăng khả năng thích ứng.

Để lập trình phía web server, chúng ta có thể chọn 1 trong nhiều ngôn ngữ lập trình khác nhau. Phần này sẽ sử dụng PHP làm công cụ để minh họa, giúp bạn hiểu sâu hơn cách thức giao tiếp, trao đổi thông tin giữa web client và web server; đồng thời cũng giúp bạn làm quen với cách xây dựng một ứng dụng web.

Qua các bài học trước, bạn cũng đã thiết lập được hạ tầng giao tiếp giữa web client và web server, bao gồm cài đặt phần mềm web server (Apache), cài đặt trình dịch mã nguồn (PHP interpreter), kết nối giữa web server và trình dịch mã nguồn. Vậy là bạn đã sẵn sàng để học, thực hành và bắt tay vào làm các ứng dụng web từ đơn giản tới phức tạp. Bạn không nên học ngay framework vì nó che đi nhiều xử lý nền tảng bên dưới, thời gian đầu nên đi sâu tìm hiểu bản chất, trải nghiệm; sau đó mới học framework.

1.1       Làm quen với PHP

1.1.1       Tổng quan về PHP

PHP ban đầu là viết tắt của Personal Home Page, sau này nó là viết tắt đệ quy của “PHP: Hypertext Preprocessor”. Nó là ngôn ngữ lập trình web phía server, dùng để tạo ra trang web động. Trang web động hiểu nôm na là trang web có nội dung thay đổi tùy thuộc vào ngữ cảnh và điều kiện sử dụng, ví dụ các trang web cho phép người dùng tương tác để đăng bài viết mới, hoặc các trang web mua bán trực tuyến.  

Từ chữ “hypertext preprocessor” đã phần nào hình dung ra cách hoạt động của ngôn ngữ PHP, “bộ tiền xử lý siêu văn bản”, hiểu nôm na là thành phần xử lý sơ bộ mã nguồn trang web tại web server, sau đó mã nguồn này được chuyển tiếp về web client để xử lý thêm một lần nữa. Nghĩa là trong một tập tin mã nguồn có thể gồm nhiều ngôn ngữ (PHP, HTML, CSS, JavaScript) trình thông dịch PHP sẽ xử lý các đoạn mã được đánh dấu là ngôn ngữ PHP, xuất kết quả ra vị trí tương ứng, còn các đoạn mã khác thì nó chỉ chép lại y nguyên. Sau cùng, gửi toàn bộ tập tin kết quả này về trình duyệt.

Viết tắt đệ quy (recursive acronym)

Viết tắt (acronym) là cách viết rút gọn của một từ hoặc một cụm từ. Thông thường, từ viết tắt sẽ chứa một hoặc nhiều chữ cái của từ gốc.

Ví dụ: ban đầu PHP là viết tắt của “Personal Home Page”.

Viết tắt đệ quy là một kiểu viết tắt, trong đó từ viết tắt lại chính là bản sao của một trong những từ gốc. Viết tắt đệ quy là một cách chơi chữ để gây ấn tượng. Ví dụ: PHP là viết tắt của “PHP:Hypertext Preprocessor”. Đệ quy là nó gọi lại, dùng lại chính nó, thử phân tích chữ PHP:

– Giải thích lần 1: PHP là viết tắt của “PHP: Hypertext Preprocessor”, vậy “PHP” trong “PHP:Hypertext Preprocessor” là viết tắt của cái gì?

– Giải thích lần 2: PHP lại là viết tắt của “PHP:Hypertext Preprocessor, vậy “PHP” trong “PHP: Hypertext Preprocessor” là viết tắt của cái gì?

– Giải thích lần  n: PHP lại là viết tắt của “PHP: Hypertext Preprocessor, vậy “PHP” trong “PHP:Hypertext Preprocessor” là viết tắt của cái gì?

Từ phiên bản đầu tiên do Rasmus Lerdorf tạo ra năm 1994, đến nay đã có nhiều phiên bản PHP ra đời, ví dụ gồm các phiên bản PHP3, PHP4, PHP5, PHP6, PHP7 và PHP8. Mỗi phiên bản có những đặc tính, những cải tiến và điều chỉnh khác nhau, khi làm việc với phiên bản nào thì bạn nên đọc tài liệu về phiên bản đó để làm việc hiệu quả hơn. Có thể đọc thêm tài liệu về PHP tại https://www.php.net/docs.php.

Một vài thông tin khác liên quan đến PHP:

– Tập tin mã nguồn PHP có phần mở rộng là .php

– Là ngôn ngữ lập trình mã nguồn mở, chạy trên nhiều nền tảng, hỗ trợ nhiều loại cơ sở dữ liệu

– Là ngôn ngữ lập trình đơn giản; có nhiều web framework PHP và CMS PHP miễn phí, giúp làm ứng dụng web được tiện lợi.

1.1.2       Tạo và xử lý form

Một trong những công việc đơn giản, phổ biến mà ngôn ngữ lập trình phía server thường làm là xử lý một form HTML gửi từ phía client lên.

Phần này sẽ lập trình minh họa chức năng đặt mua sách của một website bán sách.

Để bắt đầu, chúng ta sẽ tạo một thư mục cho dự án, ví dụ sẽ tạo thư mục có tên là sach trong htdocs của Apache.

Tạo form đặt mua sách

Form đặt mua sách ở đây là một biểu mẫu, bao gồm tên của 3 cuốn sách mà khách hàng sẽ mua, khách hàng sẽ nhập số lượng mỗi cuốn mà họ muốn mua, rồi bấm nút Đặt mua.

Viết mã HTML cho form đặt mua sách, để trong tập tin sach/orderform.html.

[orderform.html]

    <form action="processorder.php" method="post">

        <table style="border: 0px;">

            <tr style="background: #cccccc;">

                <td style="width: 200px; text-align: center;">Tên sách</td>

                <td style="width: 100px; text-align: center;">Số lượng</td>

            </tr>

            <tr>

                <td>Tự học làm web 1 - HTML</td>

                <td><input type="text" name="HTMLsoLuong" size="6" maxlength="3" /></td>

            </tr>

            <tr>

                <td>Tự học làm web 2 - CSS</td>

                <td><input type="text" name="CSSsoLuong" size="6" maxlength="3" /></td>

            </tr>

            <tr>

                <td>Tự học làm web 3 - JavaScript</td>

                <td><input type="text" name="JSsoLuong" size="6" maxlength="3" /></td>

            </tr>

            <tr>

                <td colspan="2" style="text-align: center;"><input type="submit" value="Đặt mua" /></td>

            </tr>

        </table>

    </form> 

Ở đoạn mã trên, giá trị thuộc tính action của form là một địa chỉ web (URL), nó sẽ được triệu gọi khi người dùng bấm vào nút “Đặt mua”, ví dụ trong trường hợp này là trang processorder.phpPhương thức để gửi dữ liệu của form về web server là POST (đầy đủ là HTTP POST), nó được khai báo trong thuộc tính method.

Thuộc tính name của các input được sử dụng để khai báo “tên biến” (variable), mỗi biến sẽ chứa giá trị mà người dùng nhập vào ô input tương ứng. Ví dụ, trong trường hợp này, biến HTMLsoLuong sẽ chứa số lượng cuốn “Tự học làm web 1 – HTML” mà người dùng nhập vào ô số lượng muốn mua.

Khi người dùng bấm vào nút “Đặt mua”, trình duyệt sẽ đóng gói các cặp “tên biến:giá trị” của mỗi input và gửi về trang proccessorder.php của website bằng giao thức POST. Tại trang proccessorder.php, lập trình viên sẽ viết mã PHP để xử lý dữ liệu được chuyển lên từ web client.

Cấu hình tên miền cho website

Chúng ta thực hiện cấu hình một tên miền cục bộ, đây là tên miền giả lập trên hệ thống Apache (ví dụ sach.vn) bằng cách thêm dòng khai báo trong tập tin C:\Windows\System32\drivers\etc\hosts là,

127.0.0.1 sach.vn

Và thêm các dòng khai báo sau vào cuối tập tin C:\Apache24\conf\extra\httpd-vhosts.conf,

<VirtualHost *:80>

    DocumentRoot "C:/Apache24/htdocs/sach"

    ServerName sach.vn

    <Directory "c:/Apache24/htdocs/sach">

        Options Indexes FollowSymLinks MultiViews

        AllowOverride all

        Require all granted

    </Directory>

</VirtualHost>

Và đây là kết quả khi chạy “form đặt mua sách” trên trình duyệt,


Bạn thử nhập vào số lượng mỗi cuốn sách muốn mua và bấm nút “Đặt mua”, trình duyệt sẽ chuyển tới trang http://sach.vn/processorder.php, nhưng do trang web này chưa có, nên bạn sẽ nhận được thông báo lỗi “404 Not Found”.

Xử lý form tại phía server

Như trong thuộc tính action của form đã khai báo, tập tin sẽ nhận thông tin do form đặt mua sách gửi tới và thực hiện các xử lý tại phía server là processorder.php. Công việc tiếp theo của bạn là tạo ra tập tin processorder.php trong thư mục của website, và viết mã nguồn xử lý.

Viết mã nguồn cho tập tin sach/processorder.php như sau,

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>Cửa hàng sách - Đơn hàng</title>

</head>

<body>

    <h1>Cửa hàng sách</h1>

    <h2>Các đơn hàng</h2>

</body>

</html>

Để ý sẽ thấy, đoạn mã trên hoàn toàn là HTML, giờ sẽ nhúng thêm mã PHP.

Chèn thêm đoạn mã dưới đây vào sau dòng mã <h2>Các đơn hàng</h2>,

<?php

        echo "<p>Đơn hàng đã được xử lý</p>";

?>

Lưu lại tập tin processorder.php, mở trình duyệt, mở form đặt mua sách (http://sach.vn/orderform.html), nhập vào số sách muốn mua, bấm nút “Đặt mua”, trình duyệt sẽ chuyển tới trang http://sach.vn/processorder.php, và đây là kết quả trên cửa sổ trình duyệt,

Cửa hàng sách

Các đơn hàng

Đơn hàng đã được xử lý

Trên trình duyệt, vào xem mã nguồn của trang http://sach.vn/processorder.php (bấm chuột phải vào màn hình giao diện trên trình duyệt, chọn view page source), bạn sẽ thấy nội dung là,

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>Cửa hàng sách - Đơn hàng</title>

</head>

<body>

    <h1>Cửa hàng sách</h1>

    <h2>Các đơn hàng</h2>

    <p>Đơn hàng đã được xử lý</p></body>

</html>

Mặc dù đường dẫn trên thanh địa chỉ trình duyệt vẫn là một tập tin PHP (http://sach.vn/processorder.php), tuy nhiên khi xem mã nguồn của trang web từ trình duyệt, bạn sẽ không thấy dòng mã nguồn PHP nào.

Quan sát tập tin sach/processorder.php trên trình soạn mã (ví dụ VS code), sẽ thấy mã nguồn bao gồm hỗn hợp của: ngôn ngữ HTML, các thẻ đánh dấu vùng mã PHP, và mã nguồn PHP.

Có hai cách để đánh dấu vùng mã PHP là: <?php  … ?> hoặc <? … ?>. Các câu lệnh của PHP sẽ được viết trong các cặp thẻ này. Mỗi câu lệnh kết thúc bằng dấu chấm phẩy (;).

Cũng như HTML, trong PHP các khoảng trắng như các dấu xuống hàng, các khoảng táp (tab), các khoảng trắng có độ dài từ 2 kí tự trở lên sẽ bị bỏ qua khi mã nguồn được thực thi. Ví dụ 2 đoạn mã sau là tương đương:

Cách 1,

echo "<p>chao bac teo</p>";

echo "<p>chao bac ti</p>";

Cách 2,

echo "<p>chao bac teo</p>";echo "<p>chao bac ti</p>";

Tuy nhiên, nên chọn cách viết 1 để dễ lập trình và tiện cho việc đọc hiểu mã nguồn.

Để viết chú thích (comment) trên một hàng, sử dụng kí hiệu // hoặc #, ví dụ:

echo "<p>chao bac teo</p>"; // xuất câu chào

echo "<p>chao bac ti</p>"; # xuất câu chào

Để viết chú thích (comment) trên nhiều hàng, sử dụng kí hiệu /* … */, ví dụ:

 /* xuất câu chào

    bac teo

    va bac ti */

    echo "<p>chao bac teo</p>";

    echo "<p>chao bac ti</p>";

Gọi một hàm có sẵn của PHP để lấy thông tin về thời gian hiện thời tại máy web server, ví dụ:

<?php

        echo "<p>Đơn hàng đã được xử lý vào lúc " . date('H:i, jS F Y') . "</p>";

?>

Kết quả xuất ra là:

Cửa hàng sách

Các đơn hàng

Đơn hàng đã được xử lý vào lúc 12:02, 12th November 2021

Ở đoạn mã trên đã sử dụng kí hiệu dấu chấm (.) để nối chuỗi (concatenation), sử dụng hàm date() để lấy thời gian hiện tại của server.

Hàm date() là hàm có sẵn (built-in) của ngôn ngữ PHP. Tham số (parameter) hay đối số (argument) của hàm date() là một chuỗi gồm nhiều ký tự với ý nghĩa như sau:

– H: giờ, tính theo hệ 24 giờ, thêm số 0 phía trước với các giá trị nhỏ hơn 10

– i: phút, thêm số 0 phía trước với các giá trị nhỏ hơn 10   

– j: ngày trong tháng, không thêm số 0 phía trước với các giá trị nhỏ hơn 10

– S: kí hiệu theo sau số ngày, ví dụ: 1st, 2nd, 3rd, 4th

– F: tháng

– Y: năm

1.1.3       Thiết lập chế độ báo lỗi của PHP

Khi lập trình, chương trình của chúng ta khó tránh khỏi việc mắc lỗi, có thể là lỗi cú pháp, lỗi đánh máy, hoặc lỗi logic xử lý.

Khi chương trình có lỗi, trình soạn thảo mã nguồn hoặc chương trình dịch sẽ báo lỗi cho chúng ta biết. Tuy nhiên, để đảm bảo an toàn cho chương trình, PHP thường tắt chế độ báo lỗi. Điều này gây khó khăn cho chúng ta khi tìm và sửa lỗi.

Ví dụ: chúng ta tạo ra một đoạn mã nguồn có lỗi là thiếu dấu chấm phẩy ở cuối lệnh.

    $x = 3

    echo $x;

Khi chạy chương trình, trên trình duyệt, chúng ta chỉ nhận được thông báo là:

This page isn’t working

sach.vn is currently unable to handle this request.

HTTP ERROR 500

Với thông báo lỗi như trên, chúng ta sẽ không thể biết lỗi xảy ra ở đâu và làm cách nào để sửa nó. Vì vậy, chúng ta cần bật chế độ thông báo lỗi cho PHP runtime (trình thông dịch và thực thi lệnh của PHP), để nó gửi thông báo lỗi về trình duyệt cho chúng ta. Các bước thực hiện:

– Vào thưc mục của PHP, tìm tới tập tin php.ini.

– Tạo một bản sao cho tập tin php.ini hiện tại, đổi tên thành php.ini-original. Mục đích để dự phòng một bản cấu hình đang chạy của PHP.

– Mở tập tin php.ini bằng một trình soạn thảo mã nguồn (ví dụ VS code)

– Tìm tới dòng có nội dung là display_errors, sửa giá trị từ Off thành On

...

; Default Value: On

; Development Value: On

; Production Value: Off

; http://php.net/display-errors

display_errors = Off

 

; The display of errors which occur during

...

– Vào cửa sổ Services để khởi động lại dịch vụ Apache

– Chạy lại chương trình trên trình duyệt, bạn sẽ nhận được thông báo lỗi như sau:

Parse error: syntax error, unexpected token "echo" in C:\Apache24\htdocs\sach\test.php on line 3

– Từ thông báo lỗi, chúng ta biết được lỗi xảy ra ở hàng số 3 trong mã nguồn, là lỗi cú pháp liên quan đến lệnh echo.

Để tắt chế độ báo lỗi của PHP runtime, chúng ta thực hiện các bước như trên, chỉ khác là thay đổi giá trị của display_errors, từ On thành Off

1.1.4       Xem và đọc thêm

– [1] Dùng các từ khóa sau tìm kiếm trên mạng để đọc thêm: ngôn ngữ PHP, PHP, tự học PHP, PHP tutorial

– [2] Ebook: Luke Welling & Laura Thomson, PHP and MySQL web development, fifth edition, 2017, trang 11 – 19

– [3] https://vi.wikipedia.org/wiki/PHP

– [4] https://en.wikipedia.org/wiki/PHP

– [5] https://www.php.net/docs.php

– [6] Introduction & What you need: https://www.youtube.com/watch?v=t0syDUSbdfE

1.1.5       Bài tập và thực hành

Bài tập 1. Cài đặt và chạy được ví dụ đã trình bày trong phần Tạo và xử lý form; gồm tạo form đặt sách và tập tin xử lý form tại phía server.

Bài tập 2. Bật và tắt chế độ báo lỗi của PHP runtime

1.1.6       Câu hỏi ôn tập

Câu 1. Thuộc tính action trong form HTML được dùng để làm gì?

A. Chứa giá trị của input submit

B. Chỉ định phương thức gửi dữ liệu về web server

C. Xác định tên biến sẽ chứa dữ liệu của form

D. Chỉ định nơi (URL) sẽ nhận dữ liệu của form để xử lý tại web server

Câu 2. A webform, web form or HTML form on a web page allows a user to enter data that is sent to a _______ for processing.

A. input

B. server

C. client

D. protocol

Câu 3. PHP là viết tắt của?

A. PHP: Hypertext Preprocessor

B. Program Hypertext Preprocessor

C. Program Hypertext Processor

D. Process Hypertext Preprocessor

Câu 4. Trong tập tin mã nguồn của PHP có thể chứa các loại mã?

A. Chỉ chứa mã PHP

B. Có thể gồm mã PHP, HTML, CSS, JavaScript

C. Chỉ chứa mã PHP và HTML

D. Chỉ chứa mã PHP, HTML và CSS

Câu 5. The _______is a compiler and runtime environment for the PHP scripting language and consists of the Zend Virtual Machine, which is composed of the Zend Compiler and the Zend Executor, that compiles and executes the PHP code.

A. Apache

B. .NET

C. JIT

D. Zend Engine

-----

Xem video bài giảng

Cập nhật: 21/8/2023

-----

Bạn muốn tự học HTML bài bản? Xem thêm