Monday, 21 March 2011

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.

01 <?php
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.

1 <table align=center width=400 border=1>
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.

01 <?php
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:

01 <?php
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.


Bài 13: Viết ứng dụng quản lý thành viên bằng PHP & MYSQL

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.

01 <?php
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.

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>

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.


Form Thêm Thành Viên

01 <form action=add_user.php method=POST>
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)

01 <?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
02if($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.

01 <?php
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

Bài 11: Viết ứng dụng đăng nhập bằng PHP và MYSQL

Ở những bài trước chúng ta đã học qua các kiến thức trọng yếu về PHP. Tuy nhiên, để có thể xây dựng một website hoàn chỉnh bằng những kiến thức đó thì quả thật không đơn giản. Bởi vì các kiến thức qua sách vở và tài liệu dù sao cũng chỉ là những kiến thức tổng quát và thiếu tính khách quan thực tiến. Nên khi người học lập trình bước vào giai đoạn viết ứng dụng thì thường rất lúng túng. Đó cũng là lý do tôi viết bài này để hưỡng dẫn các bạn dần làm quen với cách tiếp cận một ứng dụng PHP&MYSQL như thế nào.


Trước hết chúng ta phải thiết kế và xây dựng mô hình cơ sở dữ liệu ứng với từng lệnh bên dưới (xem lại bài ngôn ngữ SQL và MYSQL Căn Bản) sau đó mới tiến hành triển khai lập trình.

1 mysql -hlocalhost -uroot -proot
2 mysql>create database project;
3 mysql>use project;
4 mysql>create table user( id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOTNULL, password CHAR(50) NOT NULL, level CHAR(1) NOT NULL, PRIMARY KEY(id));
5 mysql>insert into user(username,password,level) values ("admin","12345","2") ("abc","12345","1");




Vậy là chúng ta đã có cơ sở dữ liệu như mô hình trên. Tiếp đến chúng ta thiết kế Form HTML để có màn hình đăng nhập khi người dùng truy cập.

Demo Login Example

1 <form action=login.php method=post>
2 Username: <input type=text name=username size=25 /><br />
3 Password: <input type=password name=password size=25 /><br />
4 <input type=submit name=ok value="Dang Nhap" />
5 </form>

Tiếp đến chúng ta tiến hành kiểm tra dữ liệu từ form

01 <?php
02 if(isset($_POST['ok']))
03 {
04 if($_POST['username'] == NULL)
05 {
06 echo "Please enter your username<br />";
07 }
08 else
09 {
10 $u=$_POST['username'];
11 }
12 if($_POST['password'] == NULL)
13 {
14 echo "Please enter your password<br />";
15 }
16 else
17 {
18 $p=$_POST['password'];
19 }
20 }
21 ?>

Đoạn code ở trên sẽ kiểm tra xem người dùng có tiến hành nhấn nút đăng nhập hay không. Và nếu có thì chúng ta sẽ xét tiếp tình trạng người dùng có để trống các ô username và password hay không. Nếu có chúng ta sẽ thông báo lỗi ở bên trên form, để người sử dụng tiến hành nhập liệu.


Kế đến chúng ta kiểm tra xem có tồn tại hai biến $u và $p (chỉ khi người dùng đăng nhập thành công thì mới có thể tạo ra 2 biến đó). Tiếp đến chúng ta tiến hành kết nối cơ sở dữ liệu (xem lại bài kết hợp PHP & MYSQL trong ứng dụng web).

1 <?php
2 $conn=mysql_connect("localhost","root","root") or die("can't connect this database");
3 mysql_select_db("project",$conn);
4 ?>

Và tiến hành kiểm tra xem username và password người sử dụng vừa nhập có trùng khớp với thông tin có trong cơ sở dữ liệu hay không ?. Nếu không thì chúng ta sẽ báo lỗi ngay. Ngược lại sẽ tiến hành lấy dữ liệu từ bảng và gán vào session. Để có thể quản lý phiên làm việc một cách hiệu quả trên mọi trang của khu vực admin (xem lại bài khái niệm cơ bản về cookie và session).

01 <?php
02 if($u && $p)
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."' and password='".$p."'";
07 $query=mysql_query($sql);
08 if(mysql_num_rows($query) == 0)
09 {
10 echo "Username or password is not correct, please try again";
11 }
12 else
13 {
14 $row=mysql_fetch_array($query);
15 session_start();
16 session_register("userid");
17 session_register("level");
18 $_SESSION['userid'] = $row[id];
19 $_SESSION['level'] = $row[level];
20 }
21 }
22 ?>

Như vậy code hoàn chỉnh cho ứng dụng này là như sau:

01 <?php
02 if(isset($_POST['ok']))
03 {
04 if($_POST['username'] == NULL)
05 {
06 echo "Please enter your username<br />";
07 }
08 else
09 {
10 $u=$_POST['username'];
11 }
12 if($_POST['password'] == NULL)
13 {
14 echo "Please enter your password<br />";
15 }
16 else
17 {
18 $p=$_POST['password'];
19 }
20 if($u && $p)
21 {
22 $conn=mysql_connect("localhost","root","root") or die("can't connect this database");
23 mysql_select_db("project",$conn);
24 $sql="select * from user where username='".$u."' and password='".$p."'";
25 $query=mysql_query($sql);
26 if(mysql_num_rows($query) == 0)
27 {
28 echo "Username or password is not correct, please try again";
29 }
30 else
31 {
32 $row=mysql_fetch_array($query);
33 session_start();
34 session_register("userid");
35 session_register("level");
36 $_SESSION['userid'] = $row[id];
37 $_SESSION['level'] = $row[level];
38
39 }
40 }
41 }
42 ?>
43 <form action=login.php method=post>
44 Username: <input type=text name=username size=25 /><br />
45 Password: <input type=password name=password size=25 /><br />
46 <input type=submit name=ok value="Dang Nhap" />
47 </form>

Ở bài sau, chúng ta sẽ tiếp tục tìm hiểu ứng dụng kết hợp PHP & MYSQL cho việc thêm một thành viên như thế nào. Mọi sự góp ý, cũng như thắc mắc của các bạn dành cho bài viết vui lòng sử dụng tính năng thảo luận tại diễn đàn. Hoặc thông qua việc liên hệ của hệ thống website. Mong sẽ nhận được nhiều ý kiến đóng góp từ các bạn.

Nguồn: leech



Saturday, 19 March 2011

Bài 10: Kết hợp PHP và MYSQL trong ứng dụng website


Ở bài trước, chúng ta đã cùng nghiên cứu về các cú pháp sql và Mysql cơ bản bao gồm việc tảo bảng, tạo kết nối, thêm, sửa, xóa các dòng dữ liệu trong cơ sở dữ liệu. Và tiếp theo bài này, chúng ta sẽ cùng tìm hiểu về cách sử dụng mysql kết hợp với PHP để xuất ra dữ liệu như thế nào.
Để làm việc với mysql và PHP chúng ta cần nắm 6 hàm cơ bản:

Bài 9: Cơ bản về ngôn ngữ SQL và Mysql


Mysql là hệ quản trị dữ liệu miễn phí, được tích hợp sử dụng chung với apache, PHP. Chính yếu tố phát triển trong cộng đồng mã nguồn mở nên mysql đã qua rất nhiều sự hỗ trợ của những lập trình viên yêu thích mã nguồn mở. Mysql cũng có cùng một cách truy xuất và mã lệnh tương tự với ngôn ngữ SQL. Nhưng Mysql không bao quát toàn bộ những câu truy vấn cao cấp như SQL. Về bản chất Mysql chỉ đáp ứng việc truy xuất đơn giản trong quá trình vận hành của website nhưng hầu hết có thể giải quyết các bài toán trong PHP.

Bài 8: Khái niệm về hàm và gọi lại hàm trong PHP


Để giảm thời gian lặp lại 1 thao tác code nhiều lần, PHP hỗ trợ người lập trình việc tự định nghĩa cho mình những hàm có khả năng lặp lại nhiều lần trong website. Việc này cũng giúp cho người lập trình kiểm soát mã nguồn một cách mạch lạc. Đồng thời có thể tùy biến ở mọi trang. Mà không cần phải khởi tạo hay viết lại mã lệnh như HTML thuần.


Bài 7: Khái niệm cơ bản về Cookie và session trong PHP


Cookie và session là hai phương pháp sử dụng để quản lý các phiên làm việc giữa người sử dụng và hệ thống. Việc quản lý phiên làm việc này sẽ giúp bạn tạo ra sự chứng thực hiệu quả bởi việc xác nhận thông tin trước khi truy cập vào một phân vùng cố định. Ngoài ra, việc quản lý tốt phiên làm việc cũng giúp người truy cập cảm thấy dễ dàng sử dụng dịch vụ của trang web cho những lần truy cập sau. Bởi cớ chế quản lý phiên làm việc ghi nhận lại quá trình truy cập của người sử dụng khi họ thăm viếc trang web của bạn lần đầu.

Bài 6: Tổng quan về mảng và các hàm hỗ trợ trong PHP


Cũng như bao ngôn ngữ lập trình khác. PHP cũng tồn tại một loại dữ liệu được gọi là mảng. Cụ thể hơn Mảng là 1 biến danh sách. Nghĩa là, một biến vốn chứa nhiều phần tử được tạo bởi các số hoặc chuỗi. Nó cho phép chúng ta lưu trữ, sắp xếp thứ tự và truy cập nhiều giá trị với một tên. Và cần lưu ý rằng một phần tử mảng luôn bắt đầu với giá trị là 0.



Friday, 18 March 2011

Bài 5: Tìm hiểu quy trình làm việc trên file trong PHP


Một trong những tác vụ đặc biệt của PHP đó là cho phép xử lý dữ liệu trực tiếp thông qua quá trình nhận và đọc nội dung trên 1 file dữ liệu. Điều này giúp cho PHP trở nên tinh tế và dễ tùy biến hơn khi xử lý 1 lượng dữ liệu có quy mô lớn. Việc thao tác mở, đọc, ghi, đóng file này cũng có ý nghĩa tuần tự như bạn đang làm việc trực tiếp trên 1 file dữ liệu thực thụ.

Bài 4: Xử lý giá trị form trong PHP

Bài 4: Xử lý giá trị form trong PHP

Một trong những ứng dụng quan trọng của PHP đó là giúp tương tác xử lý dữ liệu trên form của người sử dụng. Nhằm mục đích giúp cập nhật thông tin một cách linh động và dễ dàng quản lý chung hơn bởi sự kết hợp tuyệt vời của cơ sở dữ liệu. Tuy nhiên để làm được điều ấy PHP yêu cầu form phải đáp ứng 1 số quy định chung đặt ra.
Chúng ta cùng phân tích thẻ form trong HTML sau: