【问题标题】:PHP Passing Value on CartPHP 在购物车上传递价值
【发布时间】:2014-09-02 15:05:33
【问题描述】:

我使用 PHP 创建了一个购物车页面。现在我遇到的问题是,当我从产品列表中将产品添加到购物车时,发生的情况是只添加了列表中的第一个产品。

当我添加另一个产品时(因为列表中的每个产品都有自己的“添加到购物车”按钮),第一个产品会再次添加。不管我选择什么项目,它最终还是会添加第一个产品。

我错过了什么吗?

这是我的代码:

产品列表:

    <?php do { ?>
         <tr>
          <td colspan="2"><font face="times new roman" size="3"><center><?php echo $prorow['pname']; ?></td>
          <td colspan="1"><font face="times new roman" size="3"><center><?php echo $prorow['pdesc']; ?></td>
          <td colspan="1"><font face="times new roman" size="3"><center><?php echo $prorow['price']; ?></td>
          <td colspan="1"><center><img src="admin/<?php echo $prorow['image']; ?>" width="80" height="80" />
          <td colspan="1">
              <input type="submit" name="addtocart" value="Add to Cart">
          </td>
        </tr>
    <?php } while ($prorow = mysqli_fetch_assoc($result)); ?>

我正在使用隐藏的输入类型传递值。

加入购物车:

<?php
ob_start();
$con = mysqli_connect('localhost', 'abra', 'abra','abra') or die("Could not connect database");

    $cname = mysql_escape_string($_POST['user']);
    $pid=mysql_escape_string($_POST['proID']);
    $pname=mysql_escape_string($_POST['proName']);
    $price=mysql_escape_string($_POST['proPRICE']);
    $qty=mysql_escape_string($_POST['qty']);


$addtocart = "INSERT INTO cart_track (bid, cName, pname, price, qty) VALUES ('$pid', '$cname', '$pname', '$price', '$qty')";

mysqli_query($con,$addtocart);
header("location:showcart.php");
exit;

ob_end_flush()
 ?>

显示购物车:

<?php
$con = mysqli_connect('localhost', 'abra', 'abra','abra') or die("Could not connect database");

 //Check if user wants to checkout or shop:
if(isset($_POST['checkout']))
{

    header("location:orders.php");
}
if(isset($_POST['shop']))
{
    header("location:prodtable.php");
}
//retrieve items . use session_id and/or datetime
//$PHPSESSID=session_id();
$showcart = "SELECT * from cart_track INNER JOIN products ON bid=pId WHERE bid=pId";
$result=mysqli_query($con, $showcart);


if(!$result)
{
$err=true;
//i recommend writing this error to a log or some text file, for security reasons.
$errmsg=mysql_error();
}
else
{
$err=false;
$num=mysqli_num_rows($result);
}
?>

我怀疑错误出在产品列表代码上,但我也检查了 AddtoCart 文件。

【问题讨论】:

  • 第一个sn-p,能不能把整个表格贴一下(貌似应该是表格)?您还混合了mysqlimysql,这是做不到的。选择其中一个(最好是mysqli 而不是mysql
  • 嗯,其余的 sn-p 都是纯 html,除了与数据库和表的连接部分,它们都很好。我怀疑 do while 循环。还是不行?
  • 你如何告诉 AddToCart 什么产品 id 添加到购物车?
  • 您所显示的只是一个提交按钮。您提到了隐藏的输入,但我没有看到任何输入。您如何设置正确的帖子数据可能是问题

标签: php session add cart


【解决方案1】:

这不是修复 OPs 问题的答案,而是修复一些 OPs “错误”的部分

header()

当您发送标头时,请确保紧跟在 exit;die; 之后,因为您希望代码停止并且不再处理。

header("location:prodtable.php");
die;

mysqlmysqli

选择其中之一。最好 mysqli 因为 mysql 已被弃用。

此扩展自 PHP 5.5.0 起已弃用,不推荐用于编写新代码,因为它将在未来被删除。相反,应该使用 mysqli 或 PDO_MySQL 扩展名

缩进

你有缩进“技术”和代码设计的混合体。坚持一个。

  • 有时{ 与条件位于同一行,有时则位于新行。
  • 有时有缩进,有时没有。

验证和清理输入

你太依赖mysql_real_escape_string()了;

  • 是已弃用库的一部分
  • 不验证输入

请先验证输入,然后再尝试将其插入数据库。如果您期望数据库中有某些内容并且由于之前没有数据验证,那么这将在以后避免头痛,特定系统可能会崩溃(并产生连锁反应)。

  Is foo an int -------------- Kill process, tell user.
       |             (NO)
       | (YES)
       |
       |
   Ok. Do further checks

评论

为了你自己,请使用更多这些。

是的,我知道这不是 codereview.se,但需要解决它们。我看到了很多问题,这篇文章应该适用。

【讨论】:

    【解决方案2】:

    好的,这是产品列表。

        <!----- PHP CODES HERE ---------->
        <?PHP
        $con = mysqli_connect('localhost', 'abra', 'abra','abra') or die("Could not connect database");
    
    $result=mysqli_query($con, "SELECT * FROM products");
    $prorow = mysqli_fetch_assoc($result);
    
       ?>
    

    <!-- TOP BAR -->
    <div id="top-bar">
    
        <div class="page-full-width cf">
    
            <ul id="nav" class="fl">
    
            <?php   
                session_start();
                if(isset($_SESSION['SES_UNAME']))
                    {
                        echo "<li class='v-sep'><a href='profile.php' class='round button dark menu-user image-left'>Logged in as <strong>".$_SESSION['SES_UNAME']."</strong></a></li>";
                    }
                else
                    {
                        header('location:   /loraine_mod/index.php');
                        exit();
                    }
            ?>  
    
    
                <li class="v-sep"><a class="round button dark" href="index.php">Home</a></li>
                <li class="v-sep"><a class="round button dark" href="prodtable.php">Product List</a></li>
                <li class="v-sep"><a class="round button dark" href="cart.php">My Cart</a></li>
                <li class="v-sep"><a href="logout.php" class="round button dark menu-logoff image-left">Log out</a></li>
    
            </ul> <!-- end nav -->
    
        </div> <!-- end full-width -->  
    
    </div> <!-- end top-bar -->
    
    
    <!-- MAIN CONTENT -->
    <div id="content">
    
                <div class="content-module">
    
                    <div class="content-module-main" align='center'>
                    <form method="POST" action="addtocart.php">
                        <table cols='5'>
                            <font face='algerian'>
                            <thead>
    
                                <tr>
                                    <th colspan="2"><font face='times new roman' size='3'><center>Name</th>
                                    <th colspan="1"><font face='times new roman' size='3'><center>Description</th>
                                    <th colspan="1"><font face='times new roman' size='3'><center>Price</th>
                                    <th colspan="1"><font face='times new roman' size='3'><center>Image</th>
                                    <th colspan="1"><font face='times new roman' size='3'><center>Actions</th>
                                </tr>
    
                            </thead>
    
                                            <input name="proID" type="hidden" value="<?php echo $prorow['pId']?>">
                                            <input name="proName" type="hidden" value="<?php echo $prorow['pname']?>">
                                            <input name="proPRICE" type="hidden" value="<?php echo $prorow['price']?>">
                                            <input name="user" type="hidden" value="<?php echo $_SESSION['SES_UNAME'] ?>">                      
    
                            <?php do { ?>
                                        <tr>
                                            <td colspan="2"><font face="times new roman" size="3"><center><?php echo $prorow['pname']; ?></td>
                                            <td colspan="1"><font face="times new roman" size="3"><center><?php echo $prorow['pdesc']; ?></td>
                                            <td colspan="1"><font face="times new roman" size="3"><center><?php echo $prorow['price']; ?></td>
                                            <td colspan="1"><center><img src="admin/<?php echo $prorow['image']; ?>" width="80" height="80" />
    
                                            <td colspan="1">
                                                <input type="submit" name="addtocart" value="Add to Cart">
                                            </td>
    
                                        </tr>
    
                                     <?php } while ($prorow = mysqli_fetch_assoc($result)); ?>
    
                        </table>
                    </form>
                    </div> <!-- end content-module-main -->         
        </div> <!-- end content-module -->
    

    谢谢你的建议,我会采纳的。

    【讨论】:

    • 请删除这个,然后用这个编辑你的问题。
    【解决方案3】:

    您的输入字段在您的 do 循环之外,因此该值将始终保持不变 - 即:始终是第一个产品。

    <?php do { ?>
        <tr>
            <td colspan="2"><font face="times new roman" size="3"><center><?php echo $prorow['pname']; ?></td>
        <td colspan="1"><font face="times new roman" size="3"><center><?php echo $prorow['pdesc']; ?></td>
            <td colspan="1"><font face="times new roman" size="3"><center><?php echo $prorow['price']; ?></td>
                <td colspan="1"><center><img src="admin/<?php echo $prorow['image']; ?>" width="80" height="80" />
    
                    <td colspan="1">
                        <input name="proID" type="hidden" value="<?php echo $prorow['pId'] ?>">
                        <input name="proName" type="hidden" value="<?php echo $prorow['pname'] ?>">
                        <input name="proPRICE" type="hidden" value="<?php echo $prorow['price'] ?>">
                        <input name="user" type="hidden" value="<?php echo $_SESSION['SES_UNAME'] ?>">  
                        <input type="submit" name="addtocart" value="Add to Cart">
                    </td>
    
                    </tr>
    
                <?php } while ($prorow = mysqli_fetch_assoc($result)); ?>
    
                </table>
    

    【讨论】:

    • 尝试了你的建议,但还是一样。
    【解决方案4】:

    已经修复。错误(逻辑)来自用于更新购物车页面的 javascript。

    <script language="javascript">
    function addtocart(pid){
        document.form1.productid.value=pid;
        document.form1.command.value='add';
        document.form1.submit();
    }
    </script>
    

    无论如何。谢谢你们的回答。将发布一个关于此的问题。

    【讨论】:

      猜你喜欢
      • 2015-01-08
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 2022-08-23
      • 2017-04-16
      • 2015-06-09
      • 1970-01-01
      相关资源
      最近更新 更多