Bài viết này hướng dẫn một số lỗi trong khi lập trình web.


Các bạn xem để khi lập trình tránh những lỗi cơ bản trong lập trình PHP nhé, chúc các bạn học tốt và thành đạt



6. Không tách biệt phần server và client





Vài lập trình viên cố kết nối cả chương trình với nhau, nghĩa là ghép chung mã HTML (client-side - phần khách) với mã PHP (server-side - phần chủ) vào trong một tập tin lớn.

Mặc dù điều này tốt cho các site nhỏ, nhưng nó có thể trở thành vấn đề lớn khi các site đó trở nên lớn hơn và được bổ sung thêm tính năng. Lập trình theo cách này làm nảy sinh vấn đề khó bảo trì và các tập tin trở nên cồng kềnh.

1. Hàm API

Khi muốn tách biệt phần khách - chủ, bạn có vài lựa chọn. Một cách là viết những hàm hiển thị nội dung linh động và đặt chúng đúng chỗ trong trang web.

Thí dụ dưới đây minh hoạ điều này:

index.php - phần khách

HTML 


<?php include_once ("site.lib"); ?>
<html>
<head>
<title> <?php print_header (); ?> </title>
</head>
<body>
<h1> <?php print_header (); ?> </h1>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="25%">
<?php print_links (); ?>
</td>
<td>
<?php print_body (); ?>
</td>
</tr>
</table>
</body>
</html>


site.lib - phần chủ

Mã lệnh (PHP)


<?php
$dbh = mysql_connect ("localhost", "sh", "pass")
or die (sprintf ("Cannot connect to MySQL [%s]: %s", mysql_errno (), mysql_error ()));
@mysql_select_db ("MainSite")
or die (sprintf ("Cannot select database [%s]: %s", mysql_errno (), mysql_error ()));

$sth = @mysql_query ("SELECT * FROM site", $dbh)
or die (sprintf ("Cannot execute query [%s]: %s", mysql_errno (), mysql_error ()));

$site_info = mysql_fetch_object ($sth);

function print_header ()
{
global $site_info;
print $site_infheader;
}

function print_body ()
{
global $site_info;
print nl2br ($site_infbody);
}

function print_links ()
{
global $site_info;

$links = explode ("\n", $site_inflinks);
$names = explode ("\n", $site_inflink_names);

for ($i = 0; $i < count ($links); $i++)
{
print "\t\t\t <a xhref=\"$links[$i]\">$names[$i]</a> \n
\n";
}
}
?>



Như bạn thấy trong thí dụ trên, tách biệt khách chủ làm tăng tính dễ đọc trong chương trình của bạn. Một lợi ích khác là một khi bạn đã có các hàm API hiển thị nội dung, bạn có thể để cho thiết kế viên tham gia thay đổi bố cục mà không cần sửa mã chương trình.

1.1. Lợi ích của hàm API

    * Tương đối sáng sủa

    * Nhanh, hầu như không lãng phí thời gian (overhead)

1.2. Bất lợi

    * Không sáng sủa và dễ dàng bằng hệ thống mẫu (template system)

    * Cần một ít kiến thức PHP để sửa mẫu

2. Hệ thống khuôn mẫu


Một cách khác để tách biệt khách chủ là dùng hệ thống khuôn mẫu. Nghĩa là, có một số đánh dấu nội dung sau đó dùng chương trình phân tích, thay thế các đánh dấu đó bằng thông tin cần thiết.

Thí dụ, bạn có thể tạo một tập tin như thế này:


<html>
<head>
<title>%%PAGE_TITLE%%</title>
</head>
<body %%BODY_PROPERTIES%%>
<h1>%%PAGE_TITLE%%</h1>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="25%">%%PAGE_LINKS%%</td>
<td>%%PAGE_CONTENT%%</td>
</tr>
</table>
</body>
</html>



Sau đó có thể viết chương trình phân tách tập tin, thay thế các thông tin trong dấu cách %% bằng các thông tin thích hợp.

Ghi chú: một lớp hỗ trợ hệ thống khuôn mẫu khá tốt là lớp FastTemplate, có ở URL is hidden from guests, please register and login to view the hyperlink

2.1. Ưu điểm của hệ thống khuôn mẫu

    * Rất trong sáng

    * Không cần kiến thức PHP để sửa khuôn mẫu

2.2. Nhược điểm

    * Chậm hơn, bạn cần phân tách tập tin khuôn mẫu, sau đó xuất ra

    * Việc hiện thực phức tạp hơn