20 bài tập lập trình PHP

Để cài đặt PHP, các bạn có thể cài đặt từng gói riêng lẻ (PHP, Apache, Mysql). Tuy nhiên, tôi vẫn khuyến khích các bạn cài đặt dạng gói tích hợp. Sẽ tiện lợi cho việc sau này hơn rất nhiều.

Gói phần mềm mà tôi chọn là : Appserv - Win - 2.5.8 (Tên phần mềm là Appserv, dành cho phiên bản window, phiên bản 2.5.8).

Bước 1: Bạn cài đặt bình thường bằng cách nhấp vào file exe.

Bước 2: Phần mềm sẽ cho bạn chọn cần cài những module nào. Hãy giữ nguyên tất cả như hình dưới và nhấn next.

 

 

doc66 trang | Chuyên mục: PHP | Chia sẻ: dkS00TYs | Lượt xem: 13180 | Lượt tải: 1download
Tóm tắt nội dung 20 bài tập 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 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().
view source 
print?
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:
view source 
print?
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.
view source 
print?
1
<?php 
2
echo "So Luong: - "; 
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.
view source 
print?
1
<?php 
2
echo "Xoa Sach Nay"; 
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']).
view source 
print?
1
<?php 
2
echo " Gia tien cho mon hang: ". number_format($_SESSION['cart'][$row[id]]*$row[price],3) ." VND"; 
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.
view source 
print?
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.
view source 
print?
1
<?php 
2
echo "Tong tien cho cac mon hang: ". number_format($total,3)." VND"; 
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.
view source 
print?
1
<?php 
2
echo ""; 
3
echo ""; 
4
echo "Mua Sach Tiep - Xoa Bo Gio Hang"; 
5
?>
Như vậy, code đầy đủ sẽ là:
view source 
print?
01
<?php 
02
echo ""; 
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 ""; 
15
 echo "$row[title]"; 
16
 echo "Tac gia: $row[author] - Gia: ".number_format($row[price],3)." VND"; 
17
 echo "So Luong: - "; 
18
 echo "Xoa Sach Nay"; 
19
 echo " Gia tien cho mon hang: ". number_format($_SESSION['cart'][$row[id]]*$row[price],3) ." VND"; 
20
 echo ""; 
21
 $total+=$_SESSION['cart'][$row[id]]*$row[price]; 
22
} 
23
echo ""; 
24
echo "Tong tien cho cac mon hang: ". number_format($total,3)." VND"; 
25
echo ""; 
26
echo ""; 
27
echo ""; 
28
echo "Mua Sach Tiep - Xoa Bo Gio Hang"; 
29
echo "";  
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.
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.
view source 
print?
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.
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
?>
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
19
20
 Demo Shopping Cart - Created By My Kenny 
21
22
23
24
Demo Shopping Cart 
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 ""; 
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 ""; 
54
   echo "$row[title]"; 
55
   echo "Tac gia: $row[author] - Gia: ".number_format($row[price],3)." VND"; 
56
   echo "So Luong: - "; 
57
   echo "Xoa Sach Nay"; 
58
   echo " Gia tien cho mon hang: ". number_format($_SESSION['cart'][$row[id]]*$row[price],3) ." VND"; 
59
   echo ""; 
60
   $total+=$_SESSION['cart'][$row[id]]*$row[price]; 
61
   } 
62
  echo ""; 
63
  echo "Tong tien cho cac mon hang: ". number_format($total,3)." VND"; 
64
  echo ""; 
65
  echo ""; 
66
  echo ""; 
67
  echo "Mua Sach Tiep - Xoa Bo Gio Hang"; 
68
  echo "";  
69
 } 
70
else
71
 { 
72
  echo ""; 
73
  echo 'Ban khong co mon hang nao trong gio hangBuy Ebook'; 
74
  echo ""; 
75
 } 
76
?> 
77
78
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:
view source 
print?
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
?>
Download toàn bộ mã nguồn của bài này tại đây.
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. 
Hy vọng trong thời gian tới, tôi sẽ viết tiếp bài viết sử dụng mô hình thanh toán trực tuyến (paypal) kết hợp với giỏ hàng để hoàn chỉnh bài hưỡng dẫn về shopping cart này. 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 trả lời với khung phản hồi bên dưới. Mong sẽ nhận được nhiều ý kiến đóng góp từ các bạn.

File đính kèm:

  • doc20 bài tập lập trình PHP.doc