天天看點

php做網站購物車 你搞懂了嗎?

網上購物現已成為時尚,客戶選擇一個商品将其放入到購物車,然後傳回繼續購物或者去收銀台,這個功能如何實作呢?今天capucivar就将使用PHP來實作這個購物車的功能。

     首先,做一個簡單的首頁,從資料庫中查詢出來幾種商品,顯示在首頁,再添加一個購買按鈕。具體代碼如下:

<?php

include ("conn.php");

$sql="select * from produce";//查詢所有商品

$rs=mysql_query($sql,$conn);//執行sql語句,得到一個結果集

while($row=mysql_fetch_array($rs))//周遊結果集

{

?>

<table width="343" height="152" border="1"style="float:left">

  <tr>

   <td width="124"rowspan="3"><img

src="images/<?php echo$row["pimg"]?>" width="123" height="121" border="0"/></td>

   <td width="203"height="35">貨物名稱:<?php echo$row["pname"]?></td>

  </tr>

   <tdheight="28">貨物價格:<?php echo$row["price"]?></td>

   <td height="27"align="center"><ahref="buy.php?id=<?php echo $row["pid"]?>&pname=<?php

echo $row["pname"]?>">購買</a></td>

 </tr> </table>

}

對了,conn.php忘了寫,它是用來連接配接資料庫的:

 $conn=mysql_connect("localhost","root","");

 mysql_select_db("shop",$conn);

 mysql_query("set names gb2312");

這樣,界面的顯示如下:

點選購買的超連結之後到buy.php,在該頁面,就要将購買的東西存儲起來,我們可以将購買的一件東西放到一個一維數組裡,然後将suoyou的一維數組再放到一個二維數組中,最後将二維數組放入到session中。以後不管對購買的物品做如何修改,都可以從session裡拿出來進行修改。這樣管理起來就很友善了。具體代碼如下:

session_start();//使用session之前一定要将session開啟

ob_start();//要清空緩存就必須ob_start()

$pid=$_GET["id"];//得到購買物品的id

$name=$_GET["pname"];//得到購買物品的名字

$arr=$_SESSION["mycar"];//将session中的變量取出來

//下面先判斷這個變量是否是數組,可以得到以前是否買過東西

if(is_array($arr))

//如果是數組,說明以前買過東西

//如果買過東西又分兩種情況:

     if(array_key_exists($pid,$arr))

     {

     //1、array_key_exists($pid,$arr)判斷$arr中是否存在鍵值為$pid的一個一維數組,如果存在的話,就說明此商品以前購買過,隻需要把數量加1

          $uu=$arr[$pid];

//從二維數組裡拿出對應的一維數組,該一維數組包括id name num 三個值

          $uu["num"]=$uu["num"]+1;  //改變數量,将數量加1

          $arr[$pid]=$uu;

//改完後再将此一維數組放回二維數組中

     }

     else

     {   //2.此商品第一次購買,就将得到的id和name值組成一個一維數組

          $arr[$pid]=array("pid"=>$pid,"name"=>$name,"num"=>1);

else

$arr[$pid]=array("pid"=>$pid,"name"=>$name,"num"=>1);

$_SESSION["mycar"]=$arr;//購買完後,将此數組重新放入session中,便可以在各個頁面看到此session

ob_clean();//清空緩存

header("location:car.php");//跳轉到購物車界面(car.php)

下面就是購物車的代碼了:

session_start();//啟用session

$arr=$_SESSION["mycar"];//從session中拿出二維數組

//下面将數組裡的資料即客戶所購買的物品展示出來

<table width="600" height="37"border="1">

   <tdwidth="96">商品ID</td>

   <tdwidth="158">商品名稱</td>

   <tdwidth="154">商品數量</td>

   <tdwidth="177">删除</td>

foreach($arr as $a)//周遊這個二維數組

     <tr>

     <td width="96"><?phpecho $a["pid"]?></td>//物品的id

   <td width="158"><?phpecho $a["name"]?></td>//物品的名稱

   <td width="154"><?phpecho $a["num"]?></td>//物品的數量

   <td width="177"><ahref="delete.php?id=<?php echo $a[pid]?>">删除</a></td>//點選删除超連結到”delete.php”,将物品的id傳過去

</tr>

</table>

</form>

<ahref="index.php">傳回繼續購物</a>//傳回到首頁

capucivar購買了幾件商品之後,界面顯示出如下效果:

删除商品時,首先得到可獲所要删除商品的id,得到id之後,拿出二維數組裡對應得到的id的一維數組,将該一維數組清除掉(unset()),然後将二維數組再重新放到session()裡。下面寫删除的代碼:

session_start();//啟動session

ob_start();//清空緩存必須啟動的項

$pid=$_GET["id"];//得到通過get方式傳過來的id

$arr=$_SESSION["mycar"];//拿出session裡的二維數組

foreach($arr as$key=>$proId)//周遊該二維數組中的鍵值,這裡也就是商品的id

     if($key==$pid)//判斷鍵值等于傳過來的商品id

          unset($arr[$key]);//清除該一維數組

$_SESSION["mycar"]=$arr;//将清除之後的二維數組重新放到session裡

ob_clean();//清除緩存

header("location:car.php");//跳轉到購物車

寫完代碼之後,capucivar上面已經購買的商品id為2的商品删除,結果如下:

該購物車功能比較簡陋,隻是實作了購買和删除。其實購物車是比較簡單的,隻要思路理清了,那就跟計算1+1一樣簡單。

購物車的功能是這樣實作的:購買商品得到該商品的id和name,将這兩個值再加上一個數量(1)放到一個一維數組裡,一件商品是一個一維數組,那麼多件商品自然要用到二維數組了。在此之前,要先檢視之前是否購買過該商品,如果購買過的話,在之前的數量上加一,否則的話,就重新建立一個一維數組,将該一維數組放到二維數組裡,最後放入session中。删除時,得到要删除商品的id,然後從二維數組裡找存放該商品的一維數組,将這個一維數組清除掉,再将二維數組放入session。這樣類似上面簡單的購物車功能就實作了。