> 백엔드 개발 > PHP 튜토리얼 > PHP에서 장바구니 기능을 구현하는 방법

PHP에서 장바구니 기능을 구현하는 방법

墨辰丷
풀어 주다: 2023-03-27 20:54:01
원래의
12130명이 탐색했습니다.

이 글에서는 장바구니 기능(빅애플 쇼핑 네트워크를 예로 들어)을 구현하기 위한 PHP 구현 방법을 주로 소개하는데, 이는 좋은 참고 가치가 있습니다. 편집기로 살펴보겠습니다

첫 번째는 몇 가지 간단한 로그인 페이지입니다:

<body>
<form action="chuli.php" method="post">
 <p style="margin-left: 500px; margin-top: 200px;
  height: 250px; width: 250px; border: 1px dashed black">
  <p style="margin-left: 100px; "><h3>登录</h3></p>
  <p style="margin-top: 20px">用户名:<input type="text" name="uid"/></p><br/>
  <p>密 码:<input type="password" name="pwd"/></p><br/>
  <p style="margin-left: 180px"><input type="submit" value="登录"/></p>
 </p>
</form>
</body>
로그인 후 복사

로그인 페이지가 작성된 후 처리 페이지에 들어가 데이터베이스에서 사용자 이름과 비밀번호를 검색해야 합니다:

<?php
session_start(); //开启session 必须要写到第一行
header("Content-type:text/html;charset=utf-8");
$uid=$_POST["uid"]; //从登录页面获取到用户名和密码
$pwd=$_POST["pwd"];
include("DADB.class.php");
$db=new DADB();
$sql="select password from login where username=&#39;{$uid}&#39;";
$arr=$db->Query($sql);
if($arr[0][0]==$pwd && !empty($pwd)) //判断所填写的密码和取到的密码是一样的,而且密码不能为空
{
 $_SESSION["uid"]=$uid;
 header("location:main.php");
}
else
{
 echo"登录失败";
}
로그인 후 복사

이것은 로그인 페이지를 보여줍니다:

이제 메인 페이지에 들어가 데이터베이스에서 모든 과일 정보를 검색한 다음 장바구니에 추가하는 기능을 구현해야 합니다.

<h2>大苹果购物网</h2>
<?php
session_start();
include("DADB.class.php");
$db=new DADB();
?>
<table border="1" width="100%" cellpadding="0" cellspacing="0">
 <tr>
  <td>代号</td>
  <td>水果名称</td>
  <td>水果价格</td>
  <td>原产地</td>
  <td>货架</td>
  <td>库存量</td>
  <td></td>
 </tr>
 <?php
 $uid=$_SESSION["uid"];
 $sql="select * from fruit";
 $arr=$db->Query($sql);
 foreach($arr as $v)
 {
  echo"<tr>
  <td>{$v[0]}</td> // 从数据库调出我们所需要的内容
  <td>{$v[1]}</td>
  <td>{$v[2]}</td>
  <td>{$v[3]}</td>
  <td>{$v[4]}</td>
  <td>{$v[5]}</td>
  <td><a href=&#39;add.php?ids={$v[0]}&#39;>购买</a></td> //这里的购买相当于添加购物车的功能
 </tr>";
 }
 ?>
 <?php
 //这里显示的是 购物车有多少产品,和产品的总价格
 $ann=array();
 if(!empty($_SESSION["gwc"]))
 {
  $ann=$_SESSION["gwc"];
 }
 $zhonglei = count($ann);
 $sum=0;
 foreach($ann as $k)
 {
  $sql1="select price from fruit where ids=&#39;{$v[0]}&#39;";
  $danjia=$db->Query($sql1);
  foreach($danjia as $n)
  {
   $sum=$sum + $n[0]*$k[1];
  }
 }
 echo"购物车有<mark>{$zhonglei}</mark>种商品,总价格为<mark>{$sum}</mark>元";
 ?>
</table>
<p>
<a href="gouwuche.php" rel="external nofollow" rel="external nofollow" >查看购物车</a>
<a href="main.php" rel="external nofollow" rel="external nofollow" >浏览商品</a>
<a href="zhanghu.php" rel="external nofollow" rel="external nofollow" >查看账户</a> </p>
</body>
로그인 후 복사

메인 페이지 표시:

다음은 장바구니 추가 페이지입니다.

<?php
session_start();
$ids = $_GET["ids"];
if(empty($_SESSION["gwc"]))
{
  //1.购物车是空的,第一次点击添加购物车
  $arr = array(
    array($ids,1)
  );
  $_SESSION["gwc"]=$arr;
}
else
{
  //不是第一次点击
  //判断购物车中是否存在该商品
  $arr = $_SESSION["gwc"]; //先存一下
  $chuxian = false;
  foreach($arr as $v)
  {
    if($v[0]==$ids)
    {
      $chuxian = true;
    }
  }
  if($chuxian)
  {
    //3.如果购物车中有该商品
    for($i=0;$i<count($arr);$i++)
    {
      if($arr[$i][0]==$ids)
      {
        $arr[$i][1]+=1;
      }
    }
    $_SESSION["gwc"] = $arr;
  }
  else
  {
    //2.如果购物车中没有该商品
    $asg = array($ids,1);
    $arr[] = $asg;
    $_SESSION["gwc"] = $arr;
  }
}
header("location:gouwuche.php");
로그인 후 복사

첫 번째는 장바구니 메인 인터페이스입니다.

<h2>购物车中有以下商品:</h2>
<table cellpadding="0" cellspacing="0" border="1" width="100%">
  <tr>
    <td>商品名称</td>
    <td>商品单价</td>
    <td>购买数量</td>
    <td></td>
  </tr>
 <?php
  session_start();
  //$uid=$_SESSION["uid"];
  $arr=array();
  if(!empty($_SESSION["gwc"]))
  {
    $arr=$_SESSION["gwc"];
  }
  include("DADB.class.php");
  $db=new DADB();
  foreach($arr as $v)
  {
    global $db;
    $sql="select * from fruit where ids=&#39;{$v[0]}&#39;";
    $att=$db -> Query($sql,1);
    foreach($att as $n)
    {
      echo"<tr>
    <td>{$n[1]}</td>
    <td>{$n[2]}</td>
    <td>{$v[1]}</td>
    <td>
<a href=&#39;shanchu.php?sy={$k}&#39;>删除</a></td>
</tr>";} } ?> </table> <p> <a href="gouwuche.php" rel="external nofollow" rel="external nofollow" >
查看购物车</a> <a href="main.php" rel="external nofollow" rel="external nofollow" >浏览商品</a> 
<a href="zhanghu.php" rel="external nofollow" rel="external nofollow" >查看账户</a> </p> 14 15 </body>
로그인 후 복사

그런 다음 삭제 페이지로 이동합니다. 장바구니에 담을 때 상품이 1개만 있거나, 상품이 2개 이상인 경우 처리가 이루어집니다.

<?php
session_start();
$sy = $_GET["sy"]; 
//根据索引找到该数据
$arr = $_SESSION["gwc"];
$arr[$sy]; //要删除的数据
//如果数量不为1,数量减1
if($arr[$sy][1]>1)
{
  $arr[$sy][1] = $arr[$sy][1]-1;
}
else //如果数量为1,移除
{
  unset($arr[$sy]);
}
$_SESSION["gwc"] = $arr; //最后存一下购物车的内容
header("location:gouwuche.php");
로그인 후 복사

제출 페이지는 잔액, 재고 등을 고려해야 하기 때문에 꽤 번거롭습니다.

두려워하지 말고 코딩만 하세요.

<?php
  session_start();
header("Content-type:text/html;charset=utf-8"); //防止出现乱码
$uid=$_SESSION["uid"];
//先查一下账户余额
include("DADB.class.php");
$db=new DADB();
$ysql="select account from login where username=&#39;{$uid}&#39;";
$yarr=$db->Query($ysql);
$yarr[0][0];//总额
//购物车的总价格,前面有写过
$arr=array();
if (!empty($_SESSION["gwc"]))
{
  $arr=$_SESSION["gwc"];
}
$sum=0;
foreach($arr as $v)
{
  $v[1];//购物车中产品的数量
  $psql="select price from fruit WHERE ids=&#39;{$v[0]}&#39;";
  $parr=$db->Query($psql);
  foreach($parr as $k)
  {
   $k[0];//产品的单价
    $sum+=$k[0]*$v[1];
  }
}
//判断余额是否满足购买
if($yarr[0][0]>=$sum)
{//余额满足,要判断库存
  foreach($arr as $v)
  {
    $ksql="select number from fruit where ids=&#39;{$v[0]}&#39;";
    $karr=$db->Query($ksql);
    $karr[0][0];//这是库存
    if($karr[0][0]<$v[1]) //表示库存不足,这时要给顾客提示库存不足
    {
      echo"库存不足";
      exit;
    }
  }
  //判断之后需要提交订单了
  //账户扣除余额
  $kcsql="update login set account=account-{$sum} where username=&#39;{$uid}&#39;";
  $db->Query($kcsql,0);//这里是修改语句,所以要加上0
  //扣除库存
  foreach($arr as $v)
  {
    $kcksql="update fruit set number=number-$v[1] where ids=&#39;{$v[0]}&#39;";
    $db->Query($kcksql,0);
  }
//所有的工作都做完了,这时我们就该提交订单了
// 这里我在数据库中做了两张表,把提交的订单添加到表中就可以保存了
//添加订单
$ddh = date("YmdHis");
$time = date("Y-m-d H:i:s");
$sdd = "insert into orders values(&#39;{$ddh}&#39;,&#39;{$uid}&#39;,&#39;{$time}&#39;)";
$db->Query($sdd,0);
//添加订单详情
  foreach($arr as $v)
  {
    $sddxq = "insert into orderdetails values(&#39;&#39;,&#39;{$ddh}&#39;,&#39;{$v[0]}&#39;,&#39;{$v[1]}&#39;)";
    $db->Query($sddxq,0);
  }
}
else
{
  echo "余额不足";
  exit;
}
?>
로그인 후 복사

위 내용은 이 글의 전체 내용이므로, 모든 분들의 공부에 도움이 되었으면 좋겠습니다.

관련 권장 사항:

JS 구현은 간단합니다쇼핑 카트함수 코드 분석

php는 하루의 저장 기간을 가진 쇼핑 카트클래스를 구현합니다.

위 내용은 PHP에서 장바구니 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿