Friday, 25 March 2011
Hướng phát triển lập trình PHP
Sau 20 bài cơ bản của PHP chắc trong số chúng ta có được một tí gì rồi. Nhưng sự thực thì còn rất nhiều điều về PHP mà chúng ta cần phải học hỏi.
Vậy câu hỏi là sau khi học xong 20 bài kia bạn đã làm được gì ?
Với một người sáng tạo thì chúng ta có thể xây dựng được cả hệ thống lớn, những website doanh nghiệp bán ra tiền (với một ít giải thuật nữa). Nhưng hãy dừng lại !
Bạn học hết 20 bài đó thì ngoài kia đã có bao nhiêu công nghệ PHP đã ra đời....
Theo tôi bạn hãy chọn 2 phương pháp phát sau để học :
+ PHP,MySQL và Ajax(thuần Jquery nha)......
+ PHP và MySQL thuần khiết(Không JS trong bắt lỗi, thực thi.....)
2 phương pháp trên tôi đang nói đến PHP trong thiết kế Web không để cập đến bạn biết HTML,CSS,JS,...
Toàn bộ tài liệu tôi sẽ upload từ từ,hãy chuẩn bị đi...
Học lập trình không khó - Khó ở một điều vượt qua chính mình..
Note: Chuẩn bị mỳ tôm, bánh mỳ, sữa,trứng, tập thể dục, uống nhiều nước nếu không bạn sẽ không có đủ sức khỏe để overnight !
Tuesday, 22 March 2011
Bài 20: Viết ứng dụng tạo giỏ hàng - shopping cart - phần 2
Bài 20: Viết ứng dụng tạo giỏ hàng - shopping cart - phần 2
Ở phần 1 tôi đã trình bày phần hiển thị thông tin sách có trong cơ sở dữ liệu, chu trình thực thi của việc thêm một quyển sách vào giỏ hàng. Và cơ chế quản lý giỏ hàng của chúng ta như thế nào. Tiếp tục với phần 2, tôi sẽ trình bày cách quản lý giỏ
hàng như chỉnh sửa món hàng, liệt kê hàng hóa trong giỏ hàng và xóa bỏ từng món hàng hay cả giò hàng như thế nào. Để có thể hiểu được phần 2. Các bạn vui lòng xem lại bài 19: Viết ứng dụng tạo giỏ hàng – shopping cart – phần 1.
Phần 2: Xây dựng hệ thống quản lý giỏ hàng.
Sau khi đã thêm một món hàng, tại giỏ hàng ta cũng cần phải xử lý để hiển thị các món hàng đã có trong giỏ. Và như phương pháp ở phần 1, chúng ta tạm lưu mã sách trong session. (xem lại Bài 7: Khái niệm cơ bản về Cookie và session trong PHP) . Vậy ở trang giỏ hàng này, ta sẽ khởi tạo session và sử dụng vòng lặp duyệt mảng foreach để lặp toàn bộ mã sách đang lưu trong session. Tiếp tục, ta lại chuyển chúng sang dạng chuỗi bằng hàm implode().
1 <?php
2 Session_start();
3 Foreach($_SESSION['cart'] as $key=>$value)
4 {
5 $item[]=$key;
6 }
7 $str=implode(",",$item);
8 ?>
Giả sử lúc này chuỗi của chúng ta sẽ có dạng 7,8,9. Công việc tiếp theo là kết nối CSDL để liệt kê các sản phẩm có mã như ở trên. (xem lại bài 10: kết hợp php & mysql trong ứng dụng website). Thay vì sử dụng select * from tên_bảng where id= ??. Thì để tối ưu hơn, tôi sẽ sử dụng phép in trong SQL. Lúc này câu truy vẫn sẽ tương đương:
1 <?php
2 $sql="select * from books where id in ('$str') order by id desc";
3 $query=mysql_query($sql);
4 while($row=mysql_fetch_array($query))
5 ?>
Tiếp tục, ta lặp toàn bộ thông tin sách bao gồm tên, tác giả, giá tiền và cả số lượng mà ta đã lưu trong session là $_SESSION['cart'][ 'ID_Món_Hàng']. ID_Món_hàng chính là thông tin ta lặp ra từ CSDL ($row[id]).
Bên cạnh đó tại phần số lượng, ta sẽ đưa giá trị lưu ở session ra textbox (vì tại giỏ hàng, người dùng được phép điều chỉnh số lượng, nên lúc này ta cần tạo textbox cho họ điều chỉnh). Vì lặp toàn bộ các quyển sách nên tại tên tên của textbox số lượng ta cũng cần truyền id để nhận biết số lượng đó thuộc ID của quyển sách nào.
1 <?php
2 echo "<p align=right>So Luong: <input type=text name=qty[$row[id]] size=5 value={$_SESSION['cart'][$row[id]]}> - ";
3 ?>
Chúng ta cũng cho người dùng được phép xóa 1 món hàng nào đó ra khỏi giỏ hàng của họ. Bằng cách truyền mã quyển sách của từng quyển vào liên kết delcart.php.
1 <?php
2 echo "<a href=delcart.php?productid=$row[id]>Xoa Sach Nay</a></p>";
3 ?>
Tại đây, ta cũng cần tính luôn giá tiền của từng quyển sách tương ứng với số lượng mà họ đã chọn. Như vậy, số lượng là phần ta lưu ở session, còn giá tiền là phần ta lấy ra từ CSDL ứng với mảng $row ($row['price']).
1 <?php
2 echo "<p align=right> Gia tien cho mon hang: ". number_format($_SESSION['cart'][$row[id]]*$row[price],3) ." VND</p>";
3 ?>
Sau cùng, ta cần tính tổng tiền của toàn bộ sản phẩm có trong giỏ hàng. Bằng cách cộng dồn tổng giá tiền của từng món.
1 <?php
2 $total+=$_SESSION['cart'][$row[id]]*$row[price];
3 ?>
Phần còn lại, là chúng ta hiển thị giá tiền với đúng định dạng VND của Việt Nam.
1 <?php
2 echo "<b>Tong tien cho cac mon hang: <font color=red>". number_format($total,3)." VND</font></b>";
3 ?>
Đồng thời, ta cũng tạo nút cho phép người dùng cập nhật. Và cho phép người dúng xóa toàn bộ giỏ hàng.
1 <?php
2 echo "<input type="submit" name=submit value="Cap Nhat Gio Hang">";
3 echo "<div class=pro align=center>";
4 echo "<b><a href=index.php>Mua Sach Tiep</a> - <a href=delcart.php?productid=0>Xoa Bo Gio Hang</a></b>";
5 ?>
Như vậy, code đầy đủ sẽ là:
01 <?php
02 echo "<form action=cart.php method=post>";
03 foreach($_SESSION['cart'] as $key=>$value)
04 {
05 $item[]=$key;
06 }
07 $str=implode(",",$item);
08 $connect=mysql_connect("localhost","root","root") or die("Can not connect database");
09 mysql_select_db("shop",$connect);
10 $sql="select * from books where id in ($str)";
11 $query=mysql_query($sql);
12 while($row=mysql_fetch_array($query))
13 {
14 echo "<div class=pro>";
15 echo "<h3>$row[title]</h3>";
16 echo "Tac gia: $row[author] - Gia: ".number_format($row[price],3)." VND<br />";
17 echo "<p align=right>So Luong: <input type=text name=qty[$row[id]] size=5 value={$_SESSION['cart'][$row[id]]}> - ";
18 echo "<a href=delcart.php?productid=$row[id]>Xoa Sach Nay</a></p>";
19 echo "<p align=right> Gia tien cho mon hang: ". number_format($_SESSION['cart'][$row[id]]*$row[price],3) ." VND</p>";
20 echo "</div>";
21 $total+=$_SESSION['cart'][$row[id]]*$row[price];
22 }
23 echo "<div class=pro align=right>";
24 echo "<b>Tong tien cho cac mon hang: <font color=red>". number_format($total,3)." VND</font></b>";
25 echo "</div>";
26 echo "<input type="submit" name=submit value="Cap Nhat Gio Hang">";
27 echo "<div class=pro align=center>";
28 echo "<b><a href=index.php>Mua Sach Tiep</a> - <a href=delcart.php?productid=0>Xoa Bo Gio Hang</a></b>";
29 echo "</div>";
30 ?>
Sau khi thiết lập thành công trang giỏ hàng cơ bản, lúc này ta đã có thể thêm sách một cách dễ dàng. Tuy nhiên, giả sử trong trường hợp không có sách thì sao ?. Chúng ta vẫn chưa xét đến trường hợp giỏ hàng rỗng thì sẽ như thế nào. Vậy khi nào thì giỏ hàng rỗng ?. Đó là khi session của giỏ hàng không tồn tại Id của quyển sách nào. Cụ thể, $_SESSION[‘cart'][id]. Khi id không tồn tại trong session này thì cũng là lúc giỏ hàng không tồn tại.
Bài 20: Viết ứng dụng tạo giỏ hàng - shopping cart - phần 2
Vậy trước khi cho hiển thị giỏ hàng, ta cần kiểm tra xem có tồn tại id nào trong giỏ hàng hay không. Và vì id lưu ở dạng mảng đa chiều, nên ta cần dùng vòng lặp duyệt mảng foreach.
foreach($_SESSION[‘cart’] as $k=>$v)
Với $k có ý nghĩa tương đương $id quyển sách và $v tương đương là số lượng của quyển sách trong giỏ hàng. Vậy nếu tồn tại biến $k, thì tức có nghĩa là trong giỏ hàng có sách.
01 <?php
02 $ok=1;
03 if(isset($_SESSION['cart']))
04 {
05 foreach($_SESSION['cart'] as $k => $v)
06 {
07 if(isset($k))
08 {
09 $ok=2;
10 }
11 }
12 }
13 if($ok == 2)
14 {
15 // code xử lý giỏ hàng ở trên.
16 }
17 ?>
Đoạn code này, ta sử dụng biến $ok để làm biến kiểm tra, mặc định khi load dữ liệu biến $ok sẽ bằng 1. Và khi trong giỏ hàng tồn tại sách thì chúng ta sẽ thay đổi biến $ok thành 2. Và gọi giỏ hàng như code ở trên.
Ở phần trên, ta cũng có đề cập khi người dùng tiến hành chỉnh sửa số lượng từng món hàng đơn lẻ qua textbox và nhấn cập nhận thì hệ thống sẽ tiến hành chỉnh sửa lại thông tin giỏ hàng. Vậy chúng ta sẽ xử lý như thế nào cho trương hợp đó.
Nếu chú ý, các bạn sẽ thấy dòng code chứa textbox cho phép người dùng nhập số lượng có một tham số đặc biêt là name=qty[$row[id]]. Vậy tham số này được dùng để làm gì ?.
Tham số này, nói cho chúng ta biết số lượng đang hiển thị là thuộc mã sản phẩm nào. Vậy khi tiến hành cập nhật giỏ hàng ta sẽ kiểm tra, nếu $qty[$row[id]] mà có giá trị là 0. Tức là người đó muốn xóa bỏ giỏ hàng. Ngược lại, ta chỉ viêc cập nhật giỏ hàng $id tương ứng với số lượng nhập ở textbox.
01 <?php
02 if(isset($_POST['submit']))
03 {
04 foreach($_POST['qty'] as $key=>$value)
05 {
06 if( ($value == 0) and (is_numeric($value)))
07 {
08 unset ($_SESSION['cart'][$key]);
09 }
10 elseif(($value > 0) and (is_numeric($value)))
11 {
12 $_SESSION['cart'][$key]=$value;
13 }
14 }
15 header("location:cart.php");
16 }
17 ?>
Việc xóa món hàng ở trên chỉ đơn giản là hủy bỏ session của id đó. Việc cập nhật số lượng chỉ đơn giản là gán đè số lượng người nhập (thẻ value trong textbox) vào số lượng đang lưu trong session.
Vậy code hoàn chỉnh của trang cart.php này sẽ như sau:
view source
print?
01 <?php
02 if(isset($_POST['submit']))
03 {
04 foreach($_POST['qty'] as $key=>$value)
05 {
06 if( ($value == 0) and (is_numeric($value)))
07 {
08 unset ($_SESSION['cart'][$key]);
09 }
10 elseif(($value > 0) and (is_numeric($value)))
11 {
12 $_SESSION['cart'][$key]=$value;
13 }
14 }
15 header("location:cart.php");
16 }
17 ?>
18 <html>
19 <head>
20 <title>Demo Shopping Cart - Created By My Kenny</title>
21 <link rel="stylesheet" href="style.css" />
22 </head>
23 <body>
24 <h1>Demo Shopping Cart</h1>
25 <?
26 $ok=1;
27 if(isset($_SESSION['cart']))
28 {
29 foreach($_SESSION['cart'] as $k => $v)
30 {
31 if(isset($k))
32 {
33 $ok=2;
34 }
35 }
36 }
37 if($ok == 2)
38 {
39
40 echo "<form action=cart.php method=post>";
41 foreach($_SESSION['cart'] as $key=>$value)
42 {
43 $item[]=$key;
44 }
45 $str=implode(",",$item);
46 $connect=mysql_connect("localhost","root","root") or die("Can not connect database");
47 mysql_select_db("shop",$connect);
48 session_start();
49 $sql="select * from books where id in ($str)";
50 $query=mysql_query($sql);
51 while($row=mysql_fetch_array($query))
52 {
53 echo "<div class=pro>";
54 echo "<h3>$row[title]</h3>";
55 echo "Tac gia: $row[author] - Gia: ".number_format($row[price],3)." VND<br />";
56 echo "<p align=right>So Luong: <input type=text name=qty[$row[id]] size=5 value={$_SESSION['cart'][$row[id]]}> - ";
57 echo "<a href=delcart.php?productid=$row[id]>Xoa Sach Nay</a></p>";
58 echo "<p align=right> Gia tien cho mon hang: ". number_format($_SESSION['cart'][$row[id]]*$row[price],3) ." VND</p>";
59 echo "</div>";
60 $total+=$_SESSION['cart'][$row[id]]*$row[price];
61 }
62 echo "<div class=pro align=right>";
63 echo "<b>Tong tien cho cac mon hang: <font color=red>". number_format($total,3)." VND</font></b>";
64 echo "</div>";
65 echo "<input type="submit" name=submit value="Cap Nhat Gio Hang">";
66 echo "<div class=pro align=center>";
67 echo "<b><a href=index.php>Mua Sach Tiep</a> - <a href=delcart.php?productid=0>Xoa Bo Gio Hang</a></b>";
68 echo "</div>";
69 }
70 else
71 {
72 echo "<div class=pro>";
73 echo '<p align=center>Ban khong co mon hang nao trong gio hang<br /><a href=index.php>Buy Ebook</a></p>';
74 echo "</div>";
75 }
76 ?>
77 </body>
78 </html>
Và cuối cùng, khi người dùng nhấn xóa toàn bộ giỏ hàng hay chỉ xóa một món hàng, ta sẽ gọi tới trang delcart.php. Vậy trang này sẽ xử lý như thế nào ?.
Tại đây, ta có thể nhận tham số là: $_GET[‘productid'];
Tham số này sẽ là $id mà chúng truyền qua liên kết. Nếu xóa toàn bộ giỏ hàng, tức ta sẽ truyền cho nó giá trị bằng 0. Lúc này, ta sẽ hủy toàn bộ $_SESSION[‘cart']. Ngược lại, nếu là một $id cụ thể, thì ta chỉ xóa món hàng đó mà thôi. $_SESSION[‘cart'][$id].
Code hoàn chỉnh của file delcart.php như sau:
01 <?php
02 session_start();
03 $cart=$_SESSION['cart'];
04 $id=$_GET['productid'];
05 if($id == 0)
06 {
07 unset($_SESSION['cart']);
08 }
09 else
10 {
11 unset($_SESSION['cart'][$id]);
12 }
13 header("location:cart.php");
14 exit();
15 ?>
Như vậy, chúng ta đã hoàn tất việc xây dựng hoàn chỉnh một hệ thống shopping cart đơn giản. Tuy rằng, đây không phải là một bài viết hoàn chỉnh trong việc xây dựng mô hình thương mại điện tử. Nhưng quá đó, phần nào giúp các bạn hiểu và dễ dàng phát triển hệ thống của mình có tổ chức hơn.
Nguồn :leech
Bài 19: Viết ứng dụng tạo giỏ hàng - shopping cart - phần 1
Ở những bài trước, chúng ta đã đề cập tới các ứng dụng cơ bản, gần gũi với môi trường làm việc của chúng ta. Trong bài này, tôi sẽ tiếp tục hưỡng dẫn các bạn xây dựng hệ thống giỏ hàng (shopping cart) một ứng dụng phổ biến rất thường gặp trên các website cung cấp sản phẩm hiện nay. Nó gần như được thay thế cho việc mua sắm, việc lựa chọn thủ công mà chúng ta vẫn thường làm.
Do nội dung và kiến thức của bài này khá dài, nên tôi sẽ trình bày bài viết này ở 2 phần, để giúp các bạn dễ theo dõi và dễ nắm bắt các kiến thức mà tôi đề cập về ứng dụng.
Phần 1: Xây dựng trang hiển thị sản phẩm.
Đầu tiên, ta khởi tạo bảng CSDL đơn giản như sau (xem lại bài 9: cơ bản về ngôn ngữ sql và mysql)
1 CREATE TABLE `books` (
2 `id` int(10) unsigned NOT NULL auto_increment,
3 `title` varchar(255) NOT NULL,
4 `author` varchar(100) NOT NULL,
5 `price` int(30) NOT NULL,
6 PRIMARY KEY (`id`)
7 );
Ở trên là một bảng lưu thông tin của các quyển sách với tên, tác giả, giá tiền của các quyển sách.
1 INSERT INTO `books` VALUES (1, 'PHP Can Ban', 'Kenny', 115);
2 INSERT INTO `books` VALUES (2, 'PHP Nang Cao', 'Kenny', 150);
3 INSERT INTO `books` VALUES (3, 'PHP Framework', 'Kenny', 300);
4 INSERT INTO `books` VALUES (4, 'Joomla Can Ban', 'Kenny', 100);
Tiếp tục ta tạo file style.css để trình bày dữ liệu đẹp mắt
01 body{
02 font:12px verdana;
03 }
04 .pro{
05 border:1px solid #999999;
06 margin:5px;
07 padding:5px;
08 width:400px;
09 }
10 a{
11 color:#666666;
12 text-decoration:none;
13 font-weight:900;
14 }
15 #cart{
16 border:1px solid #999999;
17 margin:5px;
18 padding:5px;
19 width:400px;
20 text-align:center;
21 }
Sau khi đã hoàn tất việc chuẩn bị cơ sở dữ liệu và giao diện, tiếp theo ta sẽ xây dựng trang hiển thị các món hàng trên website, cho phép người sử dụng lựa chọn sách khi truy cập.
Để liệt kê danh sách các quyển sách đang có trong database, ta cần kết nối CSDL với thao tác code như sau. (xem lại bài 10: kết hợp php & mysql trong ứng dụng website).
1
Lúc này, ta có thể liệt kê các quyển sách bằng cú pháp sau:
view source
print?
1
Lúc này, ta có thể liệt kê các quyển sách bằng cú pháp sau:
01
05 {
06 while($row=mysql_fetch_array($query))
07 {
08 echo "
09 echo "
$row[title]
";10 echo "Tac Gia: $row[author] - Gia: ".number_format($row[price],3)." VND
";
11 echo "";
12 echo "
13 }
14 }
15 ?>
Đoạn code ở trên thực thi việc hiển thị sách nếu trong CSDL ít nhất 1 record. Và chúng sẽ liệt kê tiêu đề sách, tác giả, giá tiền. Ở đây, tôi sử dụng number_format() để lấy ra 3 số 000 cuối, ứng với đơn vị tiền tệ của Việt Nam là VNĐ.
Sau cùng tôi tạo một liên kết cho phép thêm quyển sách đó vào giỏ hàng nếu người mua cảm thấy ưng ý. (addcart.php sẽ là trang thêm vào giỏ hàng với tham số là mã của quyển sách).
Bài 19: Viết ứng dụng tạo giỏ hàng - shopping cart
Nói đến ứng dụng shopping cart thì hiện nay, trên thị trường tồn tại nhiều phương pháp code. Có thể sử dụng chuỗi để lưu giỏ hàng, cũng có thể lưu vào CSDL nháp giỏ hàng của người dùng và cũng có thể sử dụng mảng và session để lưu thông tin giỏ hàng. Trong khuôn khổ bài viết này, tôi sẽ sử dụng session và mảng để lưu thông tin giỏ hàng. (xem lại Bài 7: Khái niệm cơ bản về Cookie và session trong PHP)
Tại trang addcart.php tôi cần khởi tạo một session và lưu mã quyển sách vào một mảng. Cụ thể là: $_SESSION[‘cart'][$id] (xem lại bài 6: tổng quan về mảng về các hàm hỗ trợ). Với $id là mã quyển sách mà người dụng đã chọn ở trang xem hàng hóa (index.php). Mục đích chính của trang addcart này là lưu trữ hoặc tính toán lại số lượng sản phẩm khi mà họ lựa chọn. (lưu ý là số lượng các món hàng).
Một vấn đề đặt ra trong trang này, là làm thế nào để nhận biết món hàng người đó đã chọn hay chưa. Chẳng hạn. Lần đầu tôi chọn mua quyển A, sau đó tôi quay lại chọn mua tiếp quyển A. vậy trong giỏ hàng phải ghi nhận số lượng quyền A này là 2. Chứ không thể chỉ lưu là 1 được.
Vậy, lúc này ta sẽ kiểm tra xem. Quyển sách mà ta vừa chọn có tồn tại trong giỏ hàng hay chưa. Nếu có, ta phải tiến hàng lấy số lượng đang có tăng lên 1 đơn vị. Còn nếu không, ta phải gán số lượng của chúng là 1.
Code xử lý hoàn chỉnh trang addcart này sẽ như sau:
01
Nôm na, chúng ta có thể hiểu addcart chỉ đơn giản là xử lý số lượng hàng hóa và lưu chúng ở dạng mảng mà thôi.
Như vậy tại trang mua sách, ta cũng cần cho khách hàng biết rằng trong giỏ hàng của họ hiện đang có bao nhiêu món hàng. Hoặc nếu chưa có món nào, ta cũng phải báo cho họ biết về việc đó.
Vậy khi nào thì giỏ hàng rỗng ?. Đó là khi session của giỏ hàng không tồn tại Id của quyển sách nào. Cụ thể, $_SESSION[‘cart'][id]. Khi id không tồn tại trong session này thì cũng là lúc giỏ hàng không tồn tại.
Vậy trước khi cho hiển thị giỏ hàng, ta cần kiểm tra xem có tồn tại id nào trong giỏ hàng hay không. Và vì id lưu ở dạng mảng đa chiều, nên ta cần dùng vòng lặp duyệt mảng foreach.
foreach($_SESSION[‘cart'] as $k=>$v)
Với $k có ý nghĩa tương đương $id quyển sách và $v tương đương là số lượng của quyển sách trong giỏ hàng. Vậy nếu tồn tại biến $k, thì tức có nghĩa là trong giỏ hàng có sách. Khi đó ta sử dụng một biến đã để báo hiệu rằng sách có tồn tại trong giỏ hàng hay không.
01
05 {
06 if(isset($k))
07 {
08 $ok=2;
09 }
10 }
11 }
12 if ($ok != 2)
13 {
14 echo '
Ban khong co mon hang nao trong gio hang
';15 } else {
16 $items = $_SESSION['cart'];
17 echo '
Ban dang co '.count($items).' mon hang trong gio hang
';18 }
19 >
Trong đoạn code trên ta sử dụng hàm count nhắm đềm xem trong mảng hiện tại (giỏ hàng) hiện đang có bao nhiêu quyển sách. Và thực thi việc báo cho người dùng biết họ đang có bao nhiều quyển sách trong giỏ hàng.
Toàn bộ code xử lý của trang mua sách (index.php) này như sau:
01
04 html
05 head
06 title Demo Shopping Cart - Created By My Kenny /title
07 link rel="stylesheet" href="style.css" /
08 head
09 body
10
Demo Shopping Cart
11
12 < 13 if(isset($_SESSION['cart'])) 14 { 15 foreach($_SESSION['cart'] as $k=>$v)
16 {
17 if(isset($v))
18 {
19 $ok=2;
20 }
21 }
22 }
23 if ($ok != 2)
24 {
25 echo '
Ban khong co mon hang nao trong gio hang
';26 } else {
27 $items = $_SESSION['cart'];
28 echo '
Ban dang co '.count($items).' mon hang trong gio hang
';29 }
30 >
31
32 < 33 $connect=mysql_connect("localhost","root","root") 34 or die("Can not connect database"); 35 mysql_select_db("shop",$connect); 36 $sql="select * from books order by id desc"; 37 $query=mysql_query($sql); 38 if(mysql_num_rows($query) > 0)
39 {
40 while($row=mysql_fetch_array($query))
41 {
42 echo "
43 echo "
$row[title]
";44 echo "Tac Gia: $row[author] - Gia: ".number_format($row[price],3)." VND
";
45 echo "";
46 echo "
47 }
48 }
49
50 >
51 body
52 /html
Như vậy, trong bài này chúng ta đã hoàn tất trang xem sách và trang xử lý việc thêm sản phẩm mới vào giỏ hàng như thế nào. Mời các bạn đọc tiếp bài sau với tính năng quản lý, sửa, xóa từng món hàng hoặc cả giỏ hàng trong hệ thống.
Nguồn Leech:
Bài 18: Xây dựng ứng dụng tạo trang upload nhiều hình ảnh
Bài 18: Xây dựng ứng dụng tạo trang upload nhiều hình ảnh
1 CREATE TABLE `images` (
2 `img_id` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
3 `img_url` VARCHAR( 255 ) NOT NULL ,
4 `img_name` VARCHAR( 150 ) NOT NULL
5 );
Như vậy, tôi có bảng images với 3 cột thuộc tính là img_id dùng để lưu khóa của từng hình, img_url dùng để lưu đường dẫn vào hệ thống, img_name dùng để lưu tên hình ảnh.
Ứng dụng của chúng ta cũng rất cần sự tùy biến và dễ sử dụng. Sao cho người dùng có thể hoàn toàn thao tác. Ví dụ: nếu có 2 hình, họ chỉ muốn tạo ra 2 chế độ chọn file thì sẽ chỉ khai báo là 2. Và ngược lại nếu là n hình, họ sẽ tạo được n file lựa chọn. Để làm được điều này, trước tiên ta cần tạo 1 form nhỏ cho phép người dùng nhập vào số lượng file mà họ muốn thao tác. Vậy tôi khởi tạo file có tên upload.php với mã lệnh form như sau:
1 <form action="upload.php" method="post">
2 Enter your Image: <input type="text" name="txtnum" value="<?php echo $_POST['txtnum']; ?>" size="10" />
3 <input type="submit" name="ok_num" value="Accept" />
4 </form>
Sau khi người dùng nhấn nút accept thì cũng là lúc chúng ta tạo ra số field upload theo yêu cầu của họ. Vậy, ta có code xử lý bên dưới như sau:
01 <?php
02 if(isset($_POST['ok_num']))
03 {
04 $num=$_POST['txtnum'];
05 echo "<hr />";
06 echo "Ban dang chon $num file upload<br />";
07 echo "<form action='doupload.php?file=$num' method='post' enctype='multipart/form-data'>";
08 for($i=1; $i <= $num; $i++)
09 {
10 echo "<input type='file' name='img[]' /><br />";
11 }
12 echo "<input type='submit' name='ok_upload' value='Upload' />";
13 echo "</form>";
14 }
15 ?>
Đoạn code này sử dụng vòng lặp for với điều kiện là biến $i sẽ nhỏ hơn số file mà họ nhập vào. Đồng thời, để việc upload thành công tại form ta cũng cần thêm đoạn code :
Số lượng field sẽ lặp theo yêu cầu của người dùng. Do vậy. tại name của thể input, ta sẽ sử dụng mảng để lưu thông tin. Sử dụng name='img[]', có nghĩa là mỗi lần lặp và mỗi lần người dùng chọn file thì mảng img sẽ thêm 1 khóa tương ứng.
Và cuối cùng là nút submit thực thi công việc upload và gọi tới trang doupload.php?file=$num (chỉ rõ số file cụ thể do người dùng nhập tại trang doupload).
Vậy toàn bộ code của trang upload này sẽ như sau:
01 <form action="upload.php" method="post">
02 Enter your Image: <input type="text" name="txtnum" value="<?php echo $_POST['txtnum']; ?>" size="10" />
03 <input type="submit" name="ok_num" value="Accept" />
04 </form>
05 <?php
06 if(isset($_POST['ok_num']))
07 {
08 $num=$_POST['txtnum'];
09 echo "<hr />";
10 echo "Ban dang chon $num file upload<br />";
11 echo "<form action='doupload.php?file=$num' method='post' enctype='multipart/form-data'>";
12 for($i=1; $i <= $num; $i++)
13 {
14 echo "<input type='file' name='img[]' /><br />";
15 }
16 echo "<input type='submit' name='ok_upload' value='Upload' />";
17 echo "</form>";
18 }
19 ?>
Tại trang thực hiện nhiệm vụ doupload.php ta cần kiểm tra xem, người dùng có nhấn nút upload từ trang bên kia hay không ?. Nếu có ta sẽ xử lý công đoạn upload ấy, nếu không ta cần thông báo lỗi cho người dùng và yêu cầu họ chọn file.
01 <<?php
02 if(isset($_POST['ok_upload']))
03 {
04 //thực thi upload
05 }
06 else
07 {
08 echo "Vui long chon hinh truoc khi truy cap vao trang nay";
09 }
10 ?>
Như vậy, khi người dùng nhấn upload, ta sẽ lấy được tham số là biến $num từ liên kết $_GET[‘file'] mà ta đã thiết lập trên phần form action của file upload ở trang trước.
Biến $num này dùng để thực thi việc upload và tuần tự lấy các thông tin của file.
Để upload file từ máy lên hệ thống ta cần sử dụng hàm:
move_uploaded_file(tên_file_tạm,đường dẫn tới hệ thống).
Có thể diễn giải nôm na công việc của hàm này như sau: Ngay sau khi người dùng nhấn upload, hệ thống sẽ tạo ra 5 tham số ứng với từng file. Cụ thể là tên tạm (tmp_name), tên gốc (name), kích thước (size), định dạng mime (type) và lỗi (error) nếu có. Và khác với kiểu nhập liệu thông thường, khi chúng ta sử dụng thì lúc này sẽ phát sinh một biến môi trường mới là $_FILES[‘ten'] và dĩ nhiên nó sẽ đi kèm với 5 tham số cụ thể ở trên.
Ví dụ: $_FILES[‘ten'][‘name'] //Lấy ra tên gốc của file.
Vậy ứng với cú pháp upload ở trên ta sẽ có:
move_uploaded_file($_FILES['img']['tmp_name'],"data/".$_FILES['img']['name']);
Cú pháp này sẽ tự động upload hình ảnh lên thư mục data trên hệ thống. Vậy ta cần phải tạo thư mục data ngang cấp với 2 file upload và doupload. Nếu là host thật, bạn cần CHMOD thư mục là 777 (cho phép thư mục có toàn quyền) thì mới thực thi upload file được.
Trong tình huống của chúng ta, vì là upload một lúc nhiều file, nên lúc này ta phải sử dụng tham số mảng tại trang upload ta đã khởi tạo.
Vậy ứng với biến $num ta nhận từ upload ở trên ta sẽ triển khai code đơn giản như sau:
1 <?php
2 for($i=0; $i< $num; $i++)
3 {
4 move_uploaded_file($_FILES['img']['tmp_name'][$i],"data/".$_FILES['img']['name'][$i]);
5 $url="data/".$_FILES['img']['name'][$i];
6 $name=$_FILES['img']['name'][$i];
7 }
8 ?>
Với biến $i là số lượng tăng lên theo vòng lặp. Vì mảng luôn bắt đầu bởi khóa là 0 nên ta cần phải thiết lập khởi tạo biến $i với giá trị là 0. Biến $url và $name là đường dẫn hình ảnh và tên gốc của tấm hình được sử dụng để lưu vào CSDL.
Kế tới, ta cần lưu thông tin hình ảnh tương ứng vào cơ sở dữ liệu. Để làm được điều này, ta cần kết nối CSDL với cú pháp sau:
1 <?php
2 $conn=mysql_connect("localhost","root","root") or die("can't connect your database");
3 mysql_select_db("images",$conn);
4 ?>
Như vậy mỗi khi upload thành công một hình ảnh, ta phải thêm hình ảnh đó vào CSDL như sau:
1 <?php
2 $sql="insert into images(img_url,img_name) values('$url','$name')";
3 mysql_query($sql);
4 ?>
Sau khi thêm vào CSDL ta cần hiển thị thông tin và hình ảnh vừa upload để cho người dùng biết họ đã upload thành công.
Khi đó ta sử dụng một biến $site để lưu đường dẫn gốc hiển thị trên textbox.
Vậy hoàn chỉnh code cho file doupload.php này như sau:
01 <?php
02 $site="http://www.qhonline.info";
03 if(isset($_POST['ok_upload']))
04 {
05 $num=$_GET['file'];
06 echo "<h3>Demo Images Script - Copyright by QHOnline.Info</h3>";
07 $conn=mysql_connect("localhost","root","root") or die("can't connect your database");
08 mysql_select_db("images",$conn);
09 for($i=0; $i< $num; $i++)
10 {
11 move_uploaded_file($_FILES['img']['tmp_name'][$i],"data/".$_FILES['img']['name'][$i]);
12 $url="data/".$_FILES['img']['name'][$i];
13 $name=$_FILES['img']['name'][$i];
14 $sql="insert into images(img_url,img_name) values('$url','$name')";
15 mysql_query($sql);
16 echo "Upload Thanh cong file <b>$name</b><br />";
17 echo "<img src='$url' width='120' /><br />";
18 echo "Images URL: <input type='text' name='link' value='$site/$url' size='35' /><br />";
19
20 }
21 mysql_close($conn);
22 }
23 else
24 {
25 echo "Vui long chon hinh truoc khi truy cap vao trang nay";
26 }
27 ?>
Nguồn : leech
Bài 17: Xây dựng hệ thống bình chọn bằng PHP và MYSQL
Bài 17: Xây dựng hệ thống bình chọn bằng PHP và MYSQL
Ở loạt bài trước, chúng ta đã bàn tới các ứng dụng quản lý người sử dụng, xây dựng bộ đếm, tạo mã bảo mật để phòng chống những người có dụng ý xấu trên website. Tiếp theo, trong bài này chúng ta sẽ bàn về cách thức xây dựng hệ thống cho phép người dùng bình chọn khi họ tiến hành thăm viếng website của chúng ta. Để xây dựng hệ thống bình chọn chúng ta cần phân tích xem hệ thống này cần có bao nhiêu bảng quan hệ.
A- Phân tích và thiết kế cơ sở dữ liệu:
Trong tình huống này chúng ta cần 1 bảng câu hỏi và 1 bảng câu trả lời.
Phân tích quan hệ giữa chúng ta có:
1 Câu hỏi có nhiều câu trả lời.
1 câu trả lời chỉ dành cho 1 câu hỏi.
2 -> qtitle VARCHAR(255) NOT NULL,
3 -> qdate DATE NOT NULL DEFAULT '0000-00-00',
4 -> PRIMARY KEY(qid));
|
2 -> qid INT(10) UNSIGNED NOT NULL,
3 -> atitle VARCHAR(255) NOT NULL,
4 -> acount INT(10) NOT NULL DEFAULT '0',
5 -> PRIMARY KEY(aid));
|
Nhập liệu bằng CSDL ta có:
2 2009-10-10");
3 mysql> Insert into answer(qid,atitle,acount) values("1","Nhin rat dep",0);
4 mysql> Insert into answer(qid,atitle,acount) values("1","Nhin Dep",0);
5 mysql> Insert into answer(qid,atitle,acount) values("1","Nhin Cung duoc",0);
6 mysql> Insert into answer(qid,atitle,acount) values("1","Nhin qua xau",0);
|
Kết nối cơ sở dữ liệu:
2 $conn=mysql_connect("localhost","root","root") or die("can not connect database");
3 mysql_select_db("poll_exam",$conn);
4 ?>
|
Lựa chọn câu hỏi có trong cơ sở dữ liệu để liệt kê ra trên website, sau đó ta lại tiếp tục liệt kê các câu trả lời của câu hỏi đó bằng cách sử dụng dấu chọn lựa (radio). Như vậy chúng ta sẽ phải chạy cùng lúc 2 câu truy vấn lồng nhau trong suốt quá trình truy xuất.
02 $sql="select * from question order by qid desc";
03 $query=mysql_query($sql);
04 if(mysql_num_rows($query) > 0)
05 {
06 $row=mysql_fetch_array($query);
07 $qid=$row[qid];
08 echo "<form action="poll.php?questionid=$qid" method="post" >";
09 echo "<h2>$row[qtitle]</h2>";
10 $sql2="select * from answer where qid='".$qid."' order by aid";
11 $query2=mysql_query($sql2);
12 if(mysql_num_rows($query2) > 0)
13 {
14 while($row2=mysql_fetch_array($query2)){
15 echo "<input type=radio name=answer value=$row2[aid]>$row2[atitle]<br />";
16 }
17 }
18 echo "<input type=submit name=ok value="Binh Chon">";
19 echo "<a href=result.php?questionid=$qid>Xem Ket Qua</a>";
20 echo "</form>";
21 }
22 ?>
|
Và màn hình sẽ xuất ra như hình bên dưới
Và khi người dùng nhất nút Bình chọn, chúng ta sẽ gọi lại chính trang đó để xử lý dữ liệu mà người dùng vừa lựa chọn.
Vậy ta phải sử dụng lệnh isset() để kiểm tra xem người dùng có nhấn nút bình chọn không, tiếp đến ta lấy ra id mà người dùng vừa tiến hành chọn ở form bên dưới.
Cuối cùng ta cập nhật dữ liệu bằng cách lấy số trong cơ sở dữ liệu cộng tiếp cho 1 đơn vị nữa. Và đưa người dùng sang trang kết quả.
Vì trong đoạn code này có lệnh header nên chúng ta phải đặt quá trình xử lý này ở trên form. Nếu không sẽ bị lỗi dữ liệu khi gởi.
01 <?php02 if(isset($_POST['ok']))
03 {
04 $id=$_POST['answer'];
05 $qid=$_GET['questionid'];
06 $sql3="update answer set acount=acount + 1 where aid='".$id."'";
07 mysql_query($sql3);
08 header("location: result.php?questionid=$qid");
09 exit();
10 }
11 ?>
Vậy toàn bộ code của trang poll.php này như sau.
02 $conn=mysql_connect("localhost","root","root") or die("can not connect database");
03 mysql_select_db("poll_exam",$conn);
04 if(isset($_POST['ok']))
05 {
06 $id=$_POST['answer'];
07 $qid=$_GET['questionid'];
08 $sql3="update answer set acount=acount + 1 where aid='".$id."'";
09 mysql_query($sql3);
10 header("location: result.php?questionid=$qid");
11 exit();
12 }
13 $sql="select * from question order by qid desc";
14 $query=mysql_query($sql);
15 if(mysql_num_rows($query) > 0)
16 {
17 $row=mysql_fetch_array($query);
18 $qid=$row[qid];
19 echo "<form action="poll.php?questionid=$qid" method="post" >";
20 echo "<h2>$row[qtitle]</h2>";
21 $sql2="select * from answer where qid='".$qid."' order by aid";
22 $query2=mysql_query($sql2);
23 if(mysql_num_rows($query2) > 0)
24 {
25 while($row2=mysql_fetch_array($query2)){
26 echo "<input type=radio name=answer value=$row2[aid]>$row2[atitle]<br />";
27 }
28 }
29 echo "<input type=submit name=ok value="Binh Chon">";
30 echo "<a href=result.php?questionid=$qid>Xem Ket Qua</a>";
31 echo "</form>";
32 }
33 ?>
|
C- Xây dựng trang kết quả bình chọn result.php
Ở trang này, ta sẽ lấy giá trị question id của người bình chọn từ trang poll.php và tính toán xem tỷ lệ phần trăm của các câu hỏi ấy như thế nào.
Đầu tiên, ta lấy giá trị từ poll.php?questionid=1. vậy 1 là giá trị ta sẽ có được từ $_GET['questionid']. Tiếp đến ta lại dùng giá trị vừa lấy được này để liệt kê thông tin câu hỏi và tính toán giá trị.
Để tính toán giá trị, ta cần biết tổng số bình chọn trong toàn bộ các câu trả lời hiện nay là bao nhiêu. Bằng câu lệnh SUM ta có thể làm được điều đó.
|
Câu lệnh này cho phép ta lấy ra tổng số bình chọn trong cơ sở dữ liệu của câu hỏi mà ta truyền vào. Để SUM được acount ta cần phải GROUP(gom nhóm) chúng ta lại theo mã câu hỏi mà chúng ta cần tìm. having là mệnh đề theo sau có ý nghĩa tương đương với where, nó thường được sử dụng theo GROUP.
Như vậy để lấy ra tổng số phiếu bình chọn ta chỉ việc thực thi câu truy vấn này, và lấy tên cột tạm là total.
2 $sql2="select qid, SUM(acount) as total from answer group by qid having qid='".$qid."'";
3 $query2=mysql_query($sql2);
4 $row2=mysql_fetch_array($query2);
5 $total=$row2[total];
6 ?>
|
kế tới, ta lại tính toán số phiếu của từng câu hỏi trong cơ sở dữ liệu, dựa vào tổng số câu hỏi này.
Ví dụ: Tổng số câu hỏi là 10
câu 1 là 3
câu 2 là 4
câu 3 là 2
câu 4 là 1
vậy suy ra phần trăm trên tổng số 10 của 4 câu này được tính bằng cách lấy. số liệu của từng câu chia cho tổng số câu hỏi và nhân cho 100. (3/10)*100 = 30%
Để làm tròn kết quả ta sử dụng hàm round(). Giúp dữ liệu đưa về sự đồng bộ và rõ ràng nhất.
Vậy code xử lý của chúng ta như sau:
2 $sql2="select qid, SUM(acount) as total from answer group by qid having qid='".$qid."'";
3 $query2=mysql_query($sql2);
4 $row2=mysql_fetch_array($query2);
5 $total=$row2[total];
6 ?>
|
Kết quả khi xuất ra sẽ có hình như sau:
Vậy toàn bộ mã nguồn của trang result.php này như sau:
01 <?php02 $conn=mysql_connect("localhost","root","root") or die("can not connect database");
03 mysql_select_db("poll_exam",$conn);
04 if(isset($_GET['questionid']))
05 {
06 $qid=$_GET['questionid'];
07 $sql="select * from question where qid='".$qid."'";
08 $query=mysql_query($sql);
09 $row=mysql_fetch_array($query);
10 echo "<h2>$row[qtitle]</h2>";
11 $sql2="select qid, SUM(acount) as total from answer group by qid having qid='".$qid."'";
12 $query2=mysql_query($sql2);
13 $row2=mysql_fetch_array($query2);
14 $total=$row2[total];
15 $sql3="select * from answer where qid='".$qid."' order by aid";
16 $query3=mysql_query($sql3);
17 if(mysql_num_rows($query3) > 0){
18 while($row3=mysql_fetch_array($query3)){
19 $percent=round(($row3[acount]/$total)*100,2);
20 echo "<h4 style="color:red; font:12px verdana; ">$row3[atitle] : $row3[acount] ($percent %)</h4>";
21 }
22 }
23 }
24 ?>
Nguồn: Leech
|
Bài 16: Viết ứng dụng đếm số người online bằng php
Trong bài này, chúng ta sẽ nói về cách thức xây dựng tính năng thống kê số người đang viếng thăm website của bạn. Vì là chức năng nhỏ, nên tôi không đi nhiều về những tính năng lớn như bao nhiêu khách, bao nhiêu thành viên,...Chỉ đơn thuần là quá trình hiển thị hiện tại có bao nhiều người đang thăm viếng website của bạn.
Trước hết, chúng ta khởi tạo cở sở dữ liệu như sau.
1 mysql> create table useronline(tgtmp INT(15) DEFAULT "0" NOT NULL ,
2 ip VARCHAR(50) NOT NULL ,
3 local VARCHAR(100) NOT NULL,
4 PRIMARY KEY(tgtmp),
5 KEY ip(ip),
6 KEY local(local));
tgtmp là thời gian mà họ truy cập được tính khi họ truy vào trang web đó.
IP là dãy số lưu thông tin IP của họ khi viếng thăm website của chúng ta.
local là nơi lưu đường dẫn mà họ đang truy cập.
Khi người dùng truy cập vào trang web, chúng ta sẽ tiến hành insert thông tin của họ vào cơ sở dữ liệu với các tham số cơ bản nhưng trong database.
tgtmp được tính ra bằng hàm time(). Hàm này sẽ lấy ra thời gian hiện tại của người truy cập. Tiếp tục ta lại tính thời gian mới của họ, được tính bằng việc quy ước thời gian quy định. Cụ thể ở đây tôi cho là 900 giây tương đương với 15 phút truy cập của họ.
1
2 $tg=time();
3 $tgout=900;
4 $tgnew=$tg - $tgout;
5
như vậy nếu thời gian lưu trong database mà nhỏ hơn thời gian new này thì chúng ta có thể hiểu rằng vị khách ấy đã rời khỏi website của chúng ta. Cụ thể hơn.
Ví dụ: tôi viếng thăm website đó là 7h.
như vậy hệ thống sẽ ghi thông tin lúc đó là 7h.
Nếu sau 1 thời gian tôi không làm gì, hoặc tôi không truy cập website đó nữa thì hệ thống sẽ không ghi nhận thông tin mới. Như thế nếu bây giờ 8h và trừ đi 15 phút tôi quy ước, rõ ràng là thời gian mới hiện tại là 7h45, Thời gian này vẫn lớn hơn thời điểm lưu thông tin 7h (7h45 > 7h). Do vậy, nếu chúng thỏa điều kiện đó thì chúng ta chỉ việc xóa đi các record trong cơ sở dữ liệu là xong.
Vậy ta có code kết nối CSDL như sau:(xem lại bài 10: kết hợp PHP và MYSQL trong ứng dụng)
1
2 $conn=mysql_connect("localhost","root","root") or die("can't connect");
3 mysql_select_db("online",$conn);
4
Sau đó ta tiến hành ghi nhận thông tin người dùng vào CSDL.
1
2 $sql="insert into useronline(tgtmp,ip,local) values('$tg','$REMOTE_ADDR','$PHP_SELF')";
3 $query=mysql_query($sql);
4
$REMOTE_ADDR là biến môi trường dùng để lấy ra IP của người truy cập.
$PHP_SELF là biến môi trường dùng để lấy ra đường dẫn mà người dùng đang truy cập.
Tiếp đến ta tiến hành xóa record khi thời gian thực lớn hơn thời gian trong cơ sở dữ liệu.
1
2 $sql="delete from useronline where tgtmp < $tgnew";
3 $query=mysql_query($sql);
4
Tiếp tục là công việc hiển thị thông tin ra bên ngoài bằng cách liệt kệ các record có trong database.
1
2 $sql="SELECT DISTINCT ip FROM useronline WHERE file='$PHP_SELF'";
3 $query=mysql_query($sql);
4 $user = mysql_num_rows($query);
5
DISTINCT là cú pháp cho phép liệt kệ các dòng record mà không cho phép chúng có dữ liệu trùng lặp như cú pháp select bình thường.
Vậy chúng ta sẽ liệt kê tất cả những ip của những ai đang truy cập trên trang useronline.php.
Phần việc cuối cùng còn lại là chúng ta sẽ xuất thông tin ấy ra trình duyệt.
Và sau đây là toàn bộ nội dung code của trang useronline.php
01
02 $tg=time();
03 $tgout=900;
04 $tgnew=$tg - $tgout;
05 $conn=mysql_connect("localhost","root","root") or die("can't connect");
06 mysql_select_db("online",$conn);
07 $sql="insert into useronline(tgtmp,ip,local) values('$tg','$REMOTE_ADDR','$PHP_SELF')";
08 $query=mysql_query($sql);
09 $sql="delete from useronline where tgtmp < $tgnew";
10 $query=mysql_query($sql);
11 $sql="SELECT DISTINCT ip FROM useronline WHERE file='$PHP_SELF'";
12 $query=mysql_query($sql);
13 $user = mysql_num_rows($query);
14 echo "user online :$user";
15
Nguồn:leech
Monday, 21 March 2011
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:
02 <table>
03 <tr>
04 <td align="left">
05 <label for="captcha">Captcha</label>
06 </td>
07 <td>
08 <input type="text" name="txtCaptcha" maxlength="10" size="32" />
09 </td>
10 <td>
11 <img src="random_image.php" />
12 </td>
13 </tr>
14 <tr>
15 <td> </td>
16 <td>
17 <input type=submit name=ok value="Check" />
18 </td>
19 </tr>
20 </table>
21 </form>
|
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.
Đầ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.
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.
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:
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.
01 <?php |
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.
Sau đây là toàn bộ code của trang form.php.01 <?php
02 session_start();
03 if(isset($_POST['ok']))
04 {
05 if($_POST['txtCaptcha'] == NULL)
06 {
07 echo "Please enter your code";
08 }
09 else
10 {
11 if($_POST['txtCaptcha'] == $_SESSION['security_code'])
12 {
13 echo "ma lenh hop le";
14 }
15 else
16 {
17 echo "Ma lenh khong hop le";
18 }
19 }
20 }
21 ?>
22 <form action="form.php" method=post>
23 <table>
24 <tr>
25 <td align="left">
26 <label for="captcha">Captcha</label>
27 </td>
28 <td>
29 <input type="text" name="txtCaptcha" maxlength="10" size="32" />
30 </td>
31 <td>
32 <img src="random_image.php" />
33 </td>
34 </tr>
35 <tr>
36 <td> </td>
37 <td>
38 <input type=submit name=ok value="Check" />
39 </td>
40 </tr>
41 </table>
42 </form>
Nguồn: leech
|
Bài 14: viết ứng dụng sửa xóa thành viên bằng PHP và MYSQL
Trong bài trước chúng ta đã nói về cách thêm và quản lý thành viên kết hợp PHP và MYSQL. Tiếp theo trong bài này, chúng ta sẽ viết tiếp 2 ứng dụng sửa và xóa thành viên để hoàn tất module user.
Để theo kịp bài này, các bạn vui lòng xem lại bài 11,12,13. Vì các bài được hưỡng dẫn liền mạch từ đầu tới cuối.
Cũng như những bài trước, hệ thống sửa và xóa thành viên này cũng chỉ có thể thực hiện được khi người sử dụng đăng nhập thành công với quyền hạn của 1 administrator. Do vậy, bạn đừng quên kiểm tra session ở đầu khi bắt đầu viết ứng dụng này nhé.
02 sessison_start();
03 if(isset($_SESSION['userid']) && $_SESSION['level'] == 2)
04 {
05 // tại đây thực thi các hoạt động khi đăng nhập thành công.
06 }
07 else
08 {
09 header("location: login.php");
10 exit();
11 }
12 ?>
|
A- Xây dựng trang sửa thành viên:
Vì là trang chỉnh sửa thành viên, nên nội dung của chúng có phần sẽ giống với phần thêm thành viên, chỉ khác là các ô nhập liệu giờ đây đã có dữ liệu. Dữ liệu này chúng ta tiến hành lấy từ cơ sở dữ liệu thông qua biến truyền mà ở trang quản lý đã gửi edit_user.php?userid=$row[id]
Như vậy để lấy được giá trị từ liên kết này chúng ta sẽ sử dụng biến $_GET['userid']. Sau khi đã có được giá trị này, việc còn lại của bạn là lấy thông tin của id này từ cơ sở dữ liệu và đưa vào form để người dùng có thể chỉnh sửa.
Vậy ta có.02 $sql="select * from user where id='".$id."'";
03 $query=mysql_query($sql);
04 $row=mysql_fetch_array($query);
05 ?>
06 <form action="edit_user.php?userid=<?=$id?>" method=post>
07 Level: <select name=level>
08 <option value=1 <? if($row[level] == 1) echo "selected"; ?>) >Member</option>
09 <option value=2 <? if($row[level] == 2) echo "selected"; ?>>Administrator</option>
10 </select><br />
11 Username: <input type=text name=user size=20 value="<?=$row[username]?>" /><br />
12 Password: <input type=password name=pass size=20 /> <br />
13 Re-password: <input type=password name=repass size=20 /><br />
14 <input type=submit name=ok value="Edit User" />
15 </form>
|
Theo như đoạn code ở trên phần value chúng ta muốn đưa giá trị vào thì buộc phải sử dụng 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:
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ó.
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:
02 $conn=mysql_connect("localhost","root","root") or die("can't connect this database");
03 mysql_select_db("project",$conn);
04 $id=$_GET['userid'];
05 if(isset($_POST['ok']))
06 {
07 if($_POST['user'] == NULL)
08 {
09 echo "Please enter your username";
10 }
11 else
12 {
13 $u=$_POST['user'];
14 }
15 if($_POST['pass'] != $_POST['repass'])
16 {
17 echo "Password and re-password is not correct";
18 }
19 else
20 {
21 if($_POST['pass'] != NULL)
22 {
23 $p=$_POST['pass'];
24 }
25 }
26 $l = $_POST['level'];
27 if($u && $p && $l )
28 {
29 $sql="update user set username='".$u."', password='".$p."', level='".$l."' where id='".$id."'";
30 mysql_query($sql);
31 header("location:mana_user.php");
32 exit();
33 }
34 else
35 {
36 if($u && $l)
37 {
38 $sql="update user set username='".$u."', level='".$l."' where id='".$id."'";
39 mysql_query($sql);
40 header("location:mana_user.php");
41 exit();
42 }
43 }
44 }
45 $sql="select * from user where id='".$id."'";
46 $query=mysql_query($sql);
47 $row=mysql_fetch_array($query);
48 ?>
49 <form action="edit_user.php?userid=<?=$id?>" method=post>
50 Level: <select name=level>
51 <option value=1 <? if($row[level] == 1) echo "selected"; ?>) >Member</option>
52 <option value=2 <? if($row[level] == 2) echo "selected"; ?>>Administrator</option>
53 </select><br />
54 Username: <input type=text name=user size=20 value="<?=$row[username]?>" /><br />
55 Password: <input type=password name=pass size=20 /> <br />
56 Re-password: <input type=password name=repass size=20 /><br />
57 <input type=submit name=ok value="Edit User" />
58 </form>
|
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.
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.
C- Tổng kết:
Như vậy chúng ta đã kết thúc các thao tác thêm, sửa, xóa, quản lý thành viên. Qua những chuỗi bài học này, chắc hẳn các bạn đã có những khái niệm hình thành từ việc ứng dụng lập trình PHP để xây dựng các hệ thống cơ bản rồi. Việc lập trình 1 ứng dụng đòi hỏi bạn ngoài việc vận dụng nội dung đã học ra, bạn còn phải biết linh động xử lý các tình huống một cách hiệu quả. Tránh việc rập khuôn một cách máy móc và học thuộc các nội dung code. Vì ở những mô hình khác, bài toán khác bạn sẽ có những cách thức xử lý và giải quyết khác nhau.
Nguồn: Leech
Bài 13: Viết ứng dụng quản lý thành viên bằng PHP và MYSQL
Ở các bài trước, chúng ta đã cùng tìm hiểu về việc thêm một thành viên và thiết lập trang đăng nhập vào hệ thống administrator. Ở bài này, chúng ta sẽ cùng nghiên cứu về ứng dụng quản trị các tài khoản. Hay nói cách khác là hệ thống lại toàn bộ danh sách của những thành viên trên website của chúng ta.
Sau khi đăng nhập vào trang admin người dùng sẽ được đẩy sang trang quản lý admin, tại đây chỉ những ai đã đăng nhập đúng với username và password trong cơ sở dữ liệu và có quyền hạn level là 2 thì mới có thể truy xuất vào trang này. Vì vậy chúng ta cần thao tác kiểm tra session để quản lý phiên làm việc của người sử dụng. Đặt đoạn code sau ở những trang bạn muốn kiểm tra quyền truy cập của người sử dụng.
02 sessison_start();
03 if(isset($_SESSION['userid']) && $_SESSION['level'] == 2)
04 {
05 // tại đây thực thi các hoạt động khi đăng nhập thành công.
06 }
07 else
08 {
09 header("location: login.php");
10 exit();
11 }
12 ?>
|
Như vậy, chúng ta sẽ đặt đoạn code này ở trang quản lý user. Cụ thể tôi đặt trang này có tên file là manage_user.php. Vì dữ liệu sẽ lặp lại toàn bộ user và ứng với từng user sẽ là 1 dòng dữ liệu được lặp lại. Chúng ta sẽ xây dựng 1 bảng gồm có STT là số thứ tự của từng user được đếm trên mỗi user khi lặp, username là tên truy cập của họ, level là cấp bậc của user (1 là member và 2 là admin), edit là cột chứa các link chỉnh sửa user, del là cột xóa các user.
2 <tr>
3 <td>STT</td>
4 <td>Username</td>
5 <td>Level</td>
6 <td>Edit</td>
7 <td>Del</td>
8 </tr>
|
Tiếp theo, chúng ta sẽ kết nối CSDL để tiến hành lặp các user.
02 $conn=mysql_connect("localhost","root","root") or die("can't connect this database");
03 mysql_select_db("project",$conn);
04 $sql="select * from user order by id DESC";
05 $query=mysql_query($sql);
06 if(mysql_num_rows($query) == "")
07 {
08 echo "<tr><td colspan=5 align=center>Chua co username nao</td></tr>";
09 }
10 ?>
|
Đoạn code ở trên tiến hành lựa chọn tất cả user có trong database. Đồng thời kiểm tra xem trong database có tồn tại user nào không. Nếu không sẽ xuất ra thông báo "chưa có username nào". Ngược lại khi có tồn tại user chúng ta sẽ xử lý tiếp như sau:
02 $stt=0;
03 while($row=mysql_fetch_array($query))
04 {
05 $stt++;
06 echo "<tr>";
07 echo "<td>$stt</td>";
08 echo "<td>$row[username]</td>";
09 if($row[level] == "1")
10 {
11 echo "<td>Member</td>";
12 }
13 else
14 {
15 echo "<td>Admin</td>";
16 }
17 echo "<td><a href=edit_user.php?userid=$row[id]>Edit</a></td>";
18 echo "<td><a href=del_user.php?userid=$row[id]>Del</a></td>";
19 echo "</tr>";
20 ?>
|
Ở đây ta dùng biến $stt để làm bộ đếm cho số lượng user. Như vậy, cứ mỗi lần lặp 1 user thì bộ đếm này sẽ tự động tăng lên 1 đơn vị. Sau đó, chúng ta đưa dữ liệu vào mảng và truyền các giá trị trên vào các cột dữ liệu trong bảng.
Tới đây ta đã kết thúc thao tác quản lý các user đang tồn tại trong cơ sở dữ liệu. Sau đây là toàn bộ code trong ứng dụng này.
02 sesison_start();
03 if(isset($_SESSION['userid']) && $_SESSION['level'] == 2)
04 {
05 ?>
06 <table align=center width=400 border=1>
07 <tr>
08 <td>STT</td>
09 <td>Username</td>
10 <td>Level</td>
11 <td>Edit</td>
12 <td>Del</td>
13 </tr>
14 <?
15 $conn=mysql_connect("localhost","root","root") or die("can't connect this database");
16 mysql_select_db("project",$conn);
17 $sql="select * from user order by id DESC";
18 $query=mysql_query($sql);
19 if(mysql_num_rows($query) == "")
20 {
21 echo "<tr><td colspan=5 align=center>Chua co username nao</td></tr>";
22 }
23 else
24 {
25 $stt=0;
26 while($row=mysql_fetch_array($query))
27 {
28 $stt++;
29 echo "<tr>";
30 echo "<td>$stt</td>";
31 echo "<td>$row[username]</td>";
32 if($row[level] == "1")
33 {
34 echo "<td>Member</td>";
35 }
36 else
37 {
38 echo "<td>Admin</td>";
39 }
40 echo "<td><a href=edit_user.php?userid=$row[id]>Edit</a></td>";
41 echo "<td><a href=del_user.php?userid=$row[id]>Del</a></td>";
42 echo "</tr>";
43 }
44
45 }
46 ?>
47 </table>
Nguồn: leech
|
Bài 12: Viết ứng dụng thêm thành viên bằng PHP và MYSQL
Ở bài trước, chúng ta đã xây dựng ứng dụng thành viên. Cho phép người sử dụng thực thi công việc đăng nhập vào hệ thống. Trong bài này chúng ta sẽ tiếp tục công việc phát triển ứng dụng trên, để người sử dụng sau khi đăng nhập có những thao tác đặc quyền như thêm, quản lý, sửa, xoá thành viên của trang web. (xem lại Bài 11: Viết ứng dụng đăng nhập bằng PHP & MYSQL).
Sau khi đăng nhập vào trang admin người dùng sẽ được đẩy sang trang quản lý admin, tại đây chỉ những ai đã đăng nhập đúng với username và password trong cơ sở dữ liệu và có quyền hạn level là 2 thì mới có thể truy xuất vào trang này. Vì vậy chúng ta cần thao tác kiểm tra session để quản lý phiên làm việc của người sử dụng. Đặt đoạn code sau ở những trang bạn muốn kiểm tra quyền truy cập của người sử dụng.
02 session_start();
03 if(isset($_POST['ok']))
04 {
05 if($_POST['txtCaptcha'] == NULL)
06 {
07 echo "Please enter your code";
08 }
09 else
10 {
11 if($_POST['txtCaptcha'] == $_SESSION['security_code'])
12 {
13 echo "ma lenh hop le";
14 }
15 else
16 {
17 echo "Ma lenh khong hop le";
18 }
19 }
20 }
21 ?>
22 <form action="form.php" method=post>
23 <table>
24 <tr>
25 <td align="left">
26 <label for="captcha">Captcha</label>
27 </td>
28 <td>
29 <input type="text" name="txtCaptcha" maxlength="10" size="32" />
30 </td>
31 <td>
32 <img src="random_image.php" />
33 </td>
34 </tr>
35 <tr>
36 <td> </td>
37 <td>
38 <input type=submit name=ok value="Check" />
39 </td>
40 </tr>
41 </table>
42 </form>
|
Như vậy tại trang add_user.php chúng ta cũng đặt đoạn code trên và viết thêm 1 form thực thi công việc thêm thành viên.
02 Level: <select name=level>
03 <option value=1>Member</option>
04 <option value=2>Admin </option>
05 </select><br />
06 Username: <input type=text name=username size=25><br />
07 Password: <input type=password name=password size=25> <br />
08 Re-Password: <input type=password name=re-password size=25><br />
09 <input type=submit name="adduser" value="Add New User">
10 </form>
|
Tương tự như những bài trước, chúng ta cũng lần lượt kiểm tra từng đối tượng. Trước hết cần xem thử người dùng đã nhấn nút Add New user chưa, sau đó lại kiểm tra xem người dùng đã nhập đầy đủ thông tin chưa. Cuối cùng là so sánh giữa password và re-password có giống nhau hay không. Tiếp theo chúng ta gán biến $l sẽ bằng với giá trị mà khi người dụng chọn level cho user đó. (xem lại Bài 4: Xử lý giá trị form trong PHP)
02 if(isset($_POST['adduser']))
03 {
04 if($_POST['username'] == "")
05 {
06 echo "Vui long nhap username<br />";
07 }
08 else
09 {
10 $u=$_POST['username'];
11 }
12 if($_POST['password'] != $_POST['re-password'])
13 {
14 echo "Password va re-password khong chinh xac<br />";
15 }
16 else
17 {
18 if($_POST['password'] == "" )
19 {
20 echo "Vui long nhap password<br />";
21 }
22 else
23 {
24 $p=$_POST['password'];
25 }
26 }
27 $l=$_POST['level'];
28 }
29 ?>
|
Kế đến chúng ta lại tiếp tục kiểm tra xem có tồn tại biến $u, $p và $l hay không (chỉ khi người dùng nhập liệu thì mới tồn tại cùng lúc 3 biến này). sau khi đã kiểm tra sự tồn tại của 3 biến này chúng ta tiếp tục dùng PHP kết nối cơ sở dữ liệu để kiểm tra xem username mà người dùng vừa chọn có trùng với username khác trong cơ sở dữ liệu chưa. nếu trùng thì phải xuất thông báo lỗi yêu cầu họ chọn username khác còn nếu không thì ta lại tiến hành thêm thành viên mới này vào CSDL.
01 |
|
02 | if ( $u & $p & $l ) |
03 | { |
04 | $conn =mysql_connect( "localhost" , "root" , "root" ) or die ( "can't connect this database" ); |
05 | mysql_select_db( "project" , $conn ); |
06 | $sql = "select * from user where username='" . $u . "'" ; |
07 | $query =mysql_query( $sql ); |
08 | if (mysql_num_rows( $query ) != "" ) |
09 | { |
10 | echo "Username nay da ton tai roi ; |
11 | } |
12 | else |
13 | { |
14 | $sql2 = "insert into user(username,password,level) values('" . $u . "','" . $p . "','" . $l . "')" ; |
15 | $query2 =mysql_query( $sql2 ); |
16 | echo "Da them thanh vien moi thanh cong" ; |
17 | } |
18 | } |
19 | ?> |
Tới đây ta đã kết thúc thao tác thêm một thành viên mới vào cơ sở dữ liệu. Sau đây là toàn bộ code trong ứng dụng này.
02 session_start();
03 if(isset($_SESSION['userid']) && $_SESSION['level'] == 2)
04 {
05 if(isset($_POST['adduser']))
06 {
07 if($_POST['username'] == "")
08 {
09 echo "Vui long nhap username<br />";
10 }
11 else
12 {
13 $u=$_POST['username'];
14 }
15 if($_POST['password'] != $_POST['re-password'])
16 {
17 echo "Password va re-password khong chinh xac<br />";
18 }
19 else
20 {
21 if($_POST['password'] == "" )
22 {
23 echo "Vui long nhap password<br />";
24 }
25 else
26 {
27 $p=$_POST['password'];
28 }
29 }
30 $l=$_POST['level'];
31 if($u & $p & $l)
32 {
33 $conn=mysql_connect("localhost","root","root") or die("can't connect this database");
34 mysql_select_db("project",$conn);
35 $sql="select * from user where username='".$u."'";
36 $query=mysql_query($sql);
37 if(mysql_num_rows($query) != "" )
38 {
39 echo "Username nay da ton tai roi<br />";
40 }
41 else
42 {
43 $sql2="insert into user(username,password,level) values('".$u."','".$p."','".$l."')";
44 $query2=mysql_query($sql2);
45 echo "Da them thanh vien moi thanh cong";
46 }
47 }
48 }
49 }
50 ?>
51 <form action=add_user.php method=POST>
52 Level: <select name=level>
53 <option value=1>Member</option>
54 <option value=2>Admin </option>
55 </select><br />
56 Username: <input type=text name=username size=25><br />
57 Password: <input type=password name=password size=25> <br />
58 Re-Password: <input type=password name=re-password size=25><br />
59 <input type=submit name="adduser" value="Add New User">
60 </form>
61 <?php
62 }
63 else
64 {
65 header("location: login.php");
66 exit();
67 }
68 ?>
Nguồn: leech
|