Bi 19: Vit ng dng to gi hng - shopping cart - phn 1
nhng bi trc, chng ta cp ti cc ng dng c bn, gn gi vi mi trng
lm vic ca chng ta. Trong bi ny, ti s tip tc hng dn cc bn xy dng h thng gi hng (shopping cart) mt ng dng ph bin rt thng gp trn cc website cung cp sn phm hin nay. N gn nh c thay th cho vic mua sm, vic la chn th cng m chng ta vn thng lm.
Do ni dung v kin thc ca bi ny kh di, nn ti s trnh by bi vit ny 2 phn, gip cc bn d theo di v d nm bt cc kin thc m ti cp v ng dng.
Phn 1: Xy dng trang hin th sn phm.
u tin, ta khi to bng CSDL n gin nh sau (xem li bi 9: c bn v ngn 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 ); trn l mt bng lu thng tin ca cc quyn sch vi tn, tc gi, gi tin ca cc quyn sch. 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); Tip tc ta to file style.css trnh by d liu p mt 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 hon tt vic chun b c s d liu v giao din, tip theo ta s xy dng trang hin th cc mn hng trn website, cho php ngi s dng la chn sch khi truy cp. lit k danh sch cc quyn sch ang c trong database, ta cn kt ni CSDL vi thao tc code nh sau. (xem li bi 10: kt hp php & mysql trong ng dng website). 1 <?php 2 $connect=mysql_connect("localhost","root","root") 3 or die("Can not connect database"); 4 mysql_select_db("shop",$connect); 5 ?> Lc ny, ta c th lit k cc quyn sch bng c php sau: 01 <?php 02 $sql="select * from books order by id desc"; 03 $query=mysql_query($sql); 04 if(mysql_num_rows($query) > 0) 05 { 06 while($row=mysql_fetch_array($query)) 07 { 08 echo "<div class='pro'>"; 09 echo "<h3>$row[title]</h3>"; 10 echo "Tac Gia: $row[author] - Gia: ".number_format($row[price],3)." VND<br />"; 11 echo "<p align='right'><a href='addcart.php?item=$row[id]'>Mua Sach Nay</a></p>"; 12 echo "</div>"; 13 } 14 } 15 ?> on code trn thc thi vic hin th sch nu trong CSDL t nht 1 record. V chng s lit k tiu sch, tc gi, gi tin. y, ti s dng number_format() ly ra 3 s 000 cui, ng vi n v tin t ca Vit Nam l VN.
Sau cng ti to mt lin kt cho php thm quyn sch vo gi hng nu ngi mua cm thy ng . (addcart.php s l trang thm vo gi hng vi tham s l m ca quyn sch).
Ni n ng dng shopping cart th hin nay, trn th trng tn ti nhiu phng php code. C th s dng chui lu gi hng, cng c th lu vo CSDL nhp gi hng ca ngi dng v cng c th s dng mng v session lu thng tin gi hng. Trong khun kh bi vit ny, ti s s dng session v mng lu thng tin gi hng. (xem li Bi 7: Khi nim c bn v Cookie v session trong PHP)
Ti trang addcart.php ti cn khi to mt session v lu m quyn sch vo mt mng. C th l: $_SESSION['cart'][$id] (xem li bi 6: tng quan v mng v cc hm h tr). Vi $id l m quyn sch m ngi dng chn trang xem hng ha (index.php). Mc ch chnh ca trang addcart ny l lu tr hoc tnh ton li s lng sn phm khi m h la chn. (lu l s lng cc mn hng).
Mt vn t ra trong trang ny, l lm th no nhn bit mn hng ngi chn hay cha. Chng hn. Ln u ti chn mua quyn A, sau ti quay li chn mua tip quyn A. vy trong gi hng phi ghi nhn s lng quyn A ny l 2. Ch khng th ch lu l 1 c.
Vy, lc ny ta s kim tra xem. Quyn sch m ta va chn c tn ti trong gi hng hay cha. Nu c, ta phi tin hng ly s lng ang c tng ln 1 n v. Cn nu khng, ta phi gn s lng ca chng l 1.
Code x l hon chnh trang addcart.php ny s nh sau: 01 <?php 02 session_start(); 03 $id=$_GET['item']; 04 if(isset($_SESSION['cart'][$id])) 05 { 06 $qty = $_SESSION['cart'][$id] + 1; 07 } 08 else 09 { 10 $qty=1; 11 } 12 $_SESSION['cart'][$id]=$qty; 13 header("location:cart.php"); 14 exit(); 15 ?> Nm na, chng ta c th hiu addcart ch n gin l x l s lng hng ha v lu chng dng mng m thi.
Nh vy ti trang mua sch, ta cng cn cho khch hng bit rng trong gi hng ca h hin ang c bao nhiu mn hng. Hoc nu cha c mn no, ta cng phi bo cho h bit v vic .
Vy khi no th gi hng rng ?. l khi session ca gi hng khng tn ti Id ca quyn sch no. C th, $_SESSION['cart'][id]. Khi id khng tn ti trong session ny th cng l lc gi hng khng tn ti.
Vy trc khi cho hin th gi hng, ta cn kim tra xem c tn ti id no trong gi hng hay khng. V v id lu dng mng a chiu, nn ta cn dng vng lp duyt mng foreach.
foreach($_SESSION[cart'] as $k=>$v)
Vi $k c ngha tng ng $id quyn sch v $v tng ng l s lng ca quyn sch trong gi hng. Vy nu tn ti bin $k, th tc c ngha l trong gi hng c sch. Khi ta s dng mt bin bo hiu rng sch c tn ti trong gi hng hay khng. 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 echo '<p>Ban khong co mon hang nao trong gio hang</p>'; 16 } else { 17 $items = $_SESSION['cart']; 18 echo '<p>Ban dang co <a href="cart.php">'.count($items).' mon hang trong gio hang</a></p>'; 19 } 20 ?> Trong on code trn ta s dng hm count nhm m xem trong mng hin ti (gi hng) hin ang c bao nhiu quyn sch. V thc thi vic bo cho ngi dng bit h ang c bao nhiu quyn sch trong gi hng.
Ton b code x l ca trang mua sch (index.php) ny nh sau: 01 <?php 02 session_start(); 03 ?> 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 <h1>Demo Shopping Cart</h1> 11 <div id='cart'> 12 <?php 13 $ok=1; 14 if(isset($_SESSION['cart'])) 15 { 16 foreach($_SESSION['cart'] as $k=>$v) 17 { 18 if(isset($v)) 19 { 20 $ok=2; 21 } 22 } 23 } 24 if ($ok != 2) 25 { 26 echo '<p>Ban khong co mon hang nao trong gio hang</p>'; 27 } else { 28 $items = $_SESSION['cart']; 29 echo '<p>Ban dang co <a href="cart.php">'.count($items).' mon hang trong gio hang</a></p>'; 30 } 31 ?> 32 </div> 33 <?php 34 $connect=mysql_connect("localhost","root","root") 35 or die("Can not connect database"); 36 mysql_select_db("shop",$connect); 37 $sql="select * from books order by id desc"; 38 $query=mysql_query($sql); 39 if(mysql_num_rows($query) > 0) 40 { 41 while($row=mysql_fetch_array($query)) 42 { 43 echo "<div class=pro>"; 44 echo "<h3>$row[title]</h3>"; 45 echo "Tac Gia: $row[author] - Gia: ".number_format($row[price],3)." VND<br />"; 46 echo "<p align='right'><a href='addcart.php?item=$row[id]'>Mua Sach Nay</a></p>"; 47 echo "</div>"; 48 } 49 } 50
51 ?> 52 </body> 53 </html>
Nh vy, trong bi ny chng ta hon tt trang xem sch v trang x l vic thm sn phm mi vo gi hng nh th no. Mi cc bn c tip bi sau vi tnh nng qun l, sa, xa tng mn hng hoc c gi hng trong h thng.
Xem tip Bi 20: Vit ng dng to gi hng - shopping cart - phn 2