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.php.
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
-----
Cập nhật: 21/8/2023
-----
Bạn muốn tự học HTML bài bản? Xem thêm