Lập trình PHP

Ngôn ngữ PHP ra đời năm 1994 Rasmus Lerdorf sau đó được phát triển bởi nhiều người trải qua nhiều phiên bản. Phiên bản hiện tại là PHP 5 đã được công bố 7/2004.

Có nhiều lý do khiến cho việc sử dụng ngôn ngữ này chiếm ưu thế xin nêu ra đây một số lý do cơ bản :

- Mã nguồn mở (open source code)

- Miễn phí, download dễ dàng từ Internet.

- Ngôn ngữ rất dễ học, dễ viết.

- Mã nguồn không phải sửa lại nhiều khi viết chạy cho các hệ điều hành từ Windows, Linux, Unix

- Rất đơn giản trong việc kết nối với nhiều nguồn DBMS, ví dụ như : MySQL, Microsoft SQL Server 2000, Oracle, PostgreSQL, Adabas, dBase, Empress, FilePro, Informix, InterBase, mSQL, Solid, Sybase, Velocis và nhiều hệ thống CSDL thuộc Hệ Điều Hành Unix (Unix dbm) cùng bất cứ DBMS nào có sự hổ trợ cơ chế ODBC (Open Database Connectivity) ví dụ như DB2 của IBM.

 

doc39 trang | Chuyên mục: PHP | Chia sẻ: dkS00TYs | Lượt xem: 2124 | Lượt tải: 2download
Tóm tắt nội dung Lập trình PHP, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
g cú pháp gọn hoặc cũng có thể sử dụng bằng cách .. Ở đây chúng ta chỉ đưa ra giá trị trên text box username, còn lại mật khẩu do có thể bị mã hóa nên không nên hiển thị ra. Phần level do lưu trong cơ sở dữ liệu là những con số 1,2 nên khi đưa ra chúng ta phải so sánh, nếu trong bảng lưu là 1 thì ở chỗ có giá trị bằng 1 sẽ thêm chữ selected. Để mặc định lựa chọn khi người dùng nhấn vào nút chỉnh sửa.
Tiếp tới người dùng sẽ nhấn nút edit. Việc còn lại của chúng ta là kiểm tra dữ liệu khi họ tiến hành chỉnh sửa dữ liệu. Điểm khác biệt ở đây là chúng ta phải cân nhắc khi viết trang chỉnh sửa. Bởi không phải ai vào chỉnh sửa cũng đều sửa cả thông tin username, password, level. Có khi họ chỉ sửa mỗi level hoặc có khi họ chỉ sửa mỗi password.
Vì thế ta phải xét các trường hợp để giải quyết.
Trướng hợp 1: Người dùng chỉ chỉnh sửa username, level mà không chỉnh sửa password. Khi đó username, level bắt buộc đều đã có dữ liệu nên ta không cần kiểm tra chúng rỗng hay không. Nhưng với password chúng ta không thể bắt người lập trình nhập liệu. Và họ hoàn toàn có thể để rỗng.
Trường hợp 2: Người dùng chỉnh sửa username, level ,password. Khi đó ta xem password có dữ liệu và ta tiến hành cập nhật.
Để giải quyết bài toán trên thỏa 2 trường hợp ta sẽ xét phương pháp sau:
Ta kiểm tra password và repassword có giống nhau hay không ?. Nếu chúng khác nhau nghĩa là người dùng nhập liệu nhưng nhập sai. Vậy phải cảnh báo lỗi cho họ biết là họ đã nhập sai. Còn ngược lại nếu password và repassword giống nhau thì sẽ nảy sinh 2 trường hợp con. 
+ Một là password và repassword đều có dữ liệu
+ Hai là password và repassword không có dữ liệu.
Khi đó ở trường hợp con 1 chúng ta sẽ khởi tạo biến $p và ghi nhận thông tin họ nhập liệu. Và ở trường hợp 2 chúng ta không ghi nhận thông tin người nhập liệu vì họ không có ý định chỉnh sửa mật khẩu. Có thể viết đoạn code đơn giản như sau:
01
<?php
02
if($_POST['pass'] != $_POST['repass'])
03
{
04
 echo "Password and re-password is not correct";
05
}
06
else
07
{
08
 if($_POST['pass'] != NULL)
09
 {
10
  $p=$_POST['pass'];
11
 }
12
}
13
?>
Tiếp tới chúng ta sẽ phân loại dữ liệu cập nhật. Khi có username,password, level thì ta cập nhật tất cả thông tin của họ bằng cú pháp SQL. (xem lại bài 9: ngôn ngữ SQL và MYSQL cơ bản). Ngược lại khi không tồn tại password thì ta chỉ cập nhật username và level. 
Một điều nữa chúng ta cần quan tâm đó là đối với lệnh update và delete, ta phải truyền 1 id cụ thể để tránh việc chúng xóa hoặc sửa dữ liệu toàn bộ trong bảng user. Với id tôi truyền nhận từ bên ngoài ta sẽ có.
01
<?php
02
if($u && $p && $l )
03
{
04
 $sql="update user set username='".$u."', password='".$p."', level='".$l."' where id='".$id."'";
05
 mysql_query($sql);
06
 header("location:mana_user.php");
07
 exit();
08
}
09
else
10
{
11
 if($u && $l)
12
 { 
13
  $sql="update user set username='".$u."', level='".$l."' where id='".$id."'";
14
  mysql_query($sql);
15
  header("location:mana_user.php");
16
  exit();
17
 }
18
}
19
?>
Sau khi sửa thành công một thành viên chúng ta sẽ đưa người dùng trở về với trang quản lý (xem bài 13 để biết cách xây dựng trang quản lý thành viên như thế nào)
Nội dung của toàn bộ code ở trên như sau:
<?php
$conn=mysql_connect("localhost","root","root") or die("can't connect this database");
mysql_select_db("project",$conn);
$id=$_GET['userid'];
if(isset($_POST['ok']))
{
 if($_POST['user'] == NULL)
 {
  echo "Please enter your username";
 }
 else
 {
  $u=$_POST['user'];
 }
 if($_POST['pass'] != $_POST['repass'])
 {
  echo "Password and re-password is not correct";
 }
 else
 {
  if($_POST['pass'] != NULL)
  {
   $p=$_POST['pass'];
  }
 }
 $l = $_POST['level'];
 if($u && $p && $l )
 {
  $sql="update user set username='".$u."', password='".$p."', level='".$l."' where id='".$id."'";
  mysql_query($sql);
  header("location:mana_user.php");
  exit();
 }
 else
 {
  if($u && $l)
  {
   $sql="update user set username='".$u."', level='".$l."' where id='".$id."'";
   mysql_query($sql);
   header("location:mana_user.php");
   exit();
  }
 }
}
$sql="select * from user where id='".$id."'";
$query=mysql_query($sql);
$row=mysql_fetch_array($query);
?>
" method=post>
Level: 
) >Member
>Administrator
Username: " />
Password: 
Re-password: 
B- Xây dựng trang xóa thành viên:
Đối với trang xóa dữ liệu, chúng ta cũng không cần phải xử lý quá nhiều. Bởi nhiệm vụ của chúng chỉ đơn giản là xóa đi những dòng trong bảng. 
Như vậy cũng như trang edit chúng ta nhận giá trị từ nội dung liên kết ở trang quản lý đã gửi là del_user.php?userid=$row[id].
Và thực thi lệnh kết nối csdl để xử lý nội dung này.
1
<?php
2
$conn=mysql_connect("localhost","root","root") or die("can't connect this database");
3
mysql_select_db("project",$conn);
4
$sql="delete from user where id='".$id."'";
5
mysql_query($sql);
6
header("location:mana_user.php");
7
exit();
8
?>
Sau khi xóa xong thành viên thì hệ thống sẽ đưa chúng ta trở về trang quản lý user lại.
Bài 15: Viết ứng dụng tạo mã xác nhận bằng PHP
Ở những bài trước, chúng ta đã tìm hiểu về cách làm việc với PHP kết hợp MYSQL trong việc xây dựng hệ thống thêm, sửa, xóa và quản lý user. Trong bài này, chúng ta tiếp tục tìm hiểu phương pháp tạo dãy số ngẫu nhiên để chống tấn công flood dữ liệu. Hoặc ai đó cố tình spam khiến cơ sở dữ liệu của chúng ta không thể xử lý tiếp được.
Trước tiên, chúng ta tiến hành tạo form HTML đơn giản để thực thi thao tác nhập liệu như sau:
01
02
03
04
05
   Captcha
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
Chúng ta chú ý phần hình ảnh, tại đây tôi truyền đường dẫn chính là liên kết tới trang random_image.php. Trang này sẽ thực thi công việc tạo ra những bức hình có dãy số ngẫu nhiên để phần nhập liệu của người sử dụng tham chiếu tới.
Tiếp theo, chúng ta khởi tạo file random_image.php để lấy ra dãy số ngẫu nhiên và phát sinh chúng ngay trên tấm hình cho người truy cập nhập liệu.
Để làm được điều đó. Chúng ta sẽ khởi tạo session và lưu dãy số nhập liệu đó vào session của mình, sau đó so khớp với trang form bên kia.(xem lại bài 7: Khái niệm cơ bản về cookie và session trong PHP)
Đầu tiên chúng ta sử dụng hàm md5 và ran để mã hóa các ký tự bao gồm số và chữ cái. Khi sử dụng hàm md5() ký tự phát sinh sẽ lên tới 32 ký tự. Và chúng ta chỉ lấy duy nhất 5 ký tự từ chuỗi mã hóa đó bằng hàm substr. Tiếp tục ta lưu đoạn mã hóa này trong session cụ thể $_SESSION['security_code'], để tại trang form ta sẽ sử dụng so sánh với phần nhập liệu của người sử dụng.
Vậy nên đoạn code dưới sẽ giải quyết các tình huống này.
1
<?php
2
$md5_hash = md5(rand(0,999));
3
$security_code = substr($md5_hash, 15, 5);
4
$_SESSION["security_code"] = $security_code;
5
?>
Kế đến ta khởi tạo tấm hình với chiều rộng và chiều cao mà ta thiết lập thông qua hàm ImageCreate() . Và tiếp tục khai báo 2 màu chính là trắng và đen bằng hàm ImageColorAllocate($image, red, green, blue ). Hàm này sẽ tạo ra một màu sắc từ hệ màu RGB trên tấm hình mà chúng ta vừa khởi tạo. 
Tiếp tục ta đổ background của tấm hình sẽ là màu đen và chữ xuất hiện trên tấm hình sẽ là màu trắng bằng hàm ImageFill() và hàm ImageString(). Hàm ImageString có một số đối số cơ bản như sau: ImageString($image, 5, 30, 6, $security_code, $white); Trong đó: 
+ $image là hình mà chúng ta khởi tạo.
+ 5: là font-size mà chúng ta quy ước cho ký tự xuất hiện trên hình.
+ 30: là khoảng cách bên trái của tấm hình.
+ 6 : là khoảng cách từ trên của tấm hình.
+ $security_code: là đoạn code sau khi chúng ta cắt ra ở trên.
+ $white: là màu sắc mà chúng ta đã sử dụng hàm ImageColorAllocate() ở trên để khởi tạo ra màu trắng.
1
<?php
2
$width = 100;
3
$height = 30;
4
$image = ImageCreate($width, $height);
5
$white = ImageColorAllocate($image, 255, 255, 255);
6
$black = ImageColorAllocate($image, 0, 0, 0);
7
ImageFill($image, 0, 0, $black);
8
ImageString($image, 5, 30, 6, $security_code, $white);
9
?>
Kế tới chúng ta sẽ sử dụng lệnh header để trả nội dung này trở về dữ liệu dạng hình. Và tiến hành khởi tạo định dạng cho file hình mà chúng ta vừa tạo là JPG đồng thời giải phóng hình tạm được sử dụng để khợi tạo ra tấm hình này bằng đoạn code sau:
view source
print?
1
<?php
2
header("Content-Type: image/jpeg");
3
ImageJpeg($image);
4
ImageDestroy($image);
5
?>
Để dễ quản lý chúng ta sẽ đặt tất cả đoạn code trên vào trong 1 hàm để dễ sử dụng và quản lý chúng tốt hơn. Vậy toàn bộ đoạn code trong trang random_image.php này như sau.
<?php 
session_start();
create_image(); 
exit(); 
function create_image() 
{ 
 $md5_hash = md5(rand(0,999)); 
 $security_code = substr($md5_hash, 15, 5); 
 $_SESSION["security_code"] = $security_code;
 $width = 100; 
 $height = 30; 
 $image = ImageCreate($width, $height); 
 $white = ImageColorAllocate($image, 255, 255, 255); 
 $black = ImageColorAllocate($image, 0, 0, 0); 
 ImageFill($image, 0, 0, $black); 
 ImageString($image, 5, 30, 6, $security_code, $white); 
 header("Content-Type: image/jpeg"); 
 ImageJpeg($image); 
 ImageDestroy($image); 
} 
?>
Tiếp tục, trong trang form chúng ta phải khởi tạo session để chúng nhận được các giá trị mà ta đã khởi tạo và sử dụng ở trang random_image, kế tới ta kiểm tra xem người dùng có nhấn submit chưa. Nếu có ta sẽ tiếp tục kiểm tra xem người dùng nhập vào textbox có đúng là dãy số hiển thị trên hình ảnh hay không. Và xuất ra thông báo tương ứng với nội dung của người nhập liệu. (xem lại bài 4: Xử lý giá trị form trong PHP)
Sau đây là toàn bộ code của trang form.php.
<?php
session_start();
if(isset($_POST['ok']))
{
	if($_POST['txtCaptcha'] == NULL)
	{
	echo "Please enter your code";
	}
	else
	{
	if($_POST['txtCaptcha'] == $_SESSION['security_code'])
	{
	echo "ma lenh hop le";
	}
	else
	{
	echo "Ma lenh khong hop le";
	}
	}
}
?>
 Captcha
  

File đính kèm:

  • docLập trình PHP.doc
Tài liệu liên quan