【问题标题】:PHP shopping cart showing unselected itemsPHP 购物车显示未选择的项目
【发布时间】:2014-07-30 15:07:40
【问题描述】:

我正在尝试做一个购物车项目。我认为根据我为产品列表中的项目设置表单的方式,只有已选择的项目才会显示在购物车中,但无论我点击哪一个,它都会显示所有三个项目。谁能告诉我我需要改变什么。

列出产品的主页:

<?php
session_start();
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>PHP Final Project</title>
</head>

<body>
<?php
$_SESSION['maxItems'] = 2;
?>
<form id="item01" method="post" action="cart.php">
<?php  $_SESSION['cart'][0] = array('name'=>'item01','price'=>'$11');  ?>
<label>Item 01 for sale</label>
<input type="submit" value="Add to cart"  name="item01">
</form>

<br>

<form id="item02" method="post" action="cart.php">
<?php  $_SESSION['cart'][1] = array('name'=>'item02','price'=>'$22');  ?>
<label>Item 02 for sale</label>
<input type="submit" value="Add to cart" name="item02">
</form>

<br>

<form id="item03" method="post" action="cart.php">
<?php  $_SESSION['cart'][2] = array('name'=>'item03','price'=>'$33');  ?>
<label>Item 03 for sale</label>
<input type="submit" value="Add to cart" name="item03">
</form>

</body>
</html>

我的购物车页面的 php 代码:

<?php
session_start();
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>

<body>
<?php
$max_items = $_SESSION['maxItems'];
for($i=0; $i <= $max_items; $i++){
    $current_name = $_SESSION['cart'][$i]['name'];
    $current_price = $_SESSION['cart'][$i]['price'];
echo "item is " . $current_name . " " . $current_price . "<br>";
}
?>
</body>
</html>

【问题讨论】:

  • 您在 html 中创建会话,因此即使用户没有提交表单也会在页面加载时!!

标签: php forms session shopping-cart


【解决方案1】:

首先,实际上,您并没有得到您单击的按钮的值,您只是简单地按原样设置它们。您需要处理表单,然后在会话中设置它们。其次,你真的不需要多个表单标签,你只需要一个。第三,进行一些初始化,(项目列表、会话本身等)。只需创建一个项目数组。粗略的例子:(同页表单处理)

<?php
// initializations
session_start();
$_SESSION['maxItems'] = 2;
if(!isset($_SESSION['cart'])) {
    $_SESSION['cart'] = array();
}
$item_list = array('item01' => 11, 'item02' => 22, 'item03' => 33);

// add
if(isset($_POST['add'])) {
    $item = $_POST['add'];
    $value = $item_list[$item];
    if(count($_SESSION['cart']) >= $_SESSION['maxItems']) {
        echo 'Your cart is full, sorry.';
    } else {
        $_SESSION['cart'][] = array('name' => $item, 'price' => $item_list[$item]);
    }
}

// clear all
if(isset($_POST['remove_all'])) { $_SESSION['cart'] = array(); header('Location: '.$_SERVER['PHP_SELF']); }

?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>PHP Final Project</title>
</head>
    <body>
    <form method="POST" action="">
        <label>Item 01 for sale</label>
        <button type="submit" name="add" value="item01">Add To Cart</button>
        <br/>
        <label>Item 02 for sale</label>
        <button type="submit" name="add"value="item02">Add To Cart</button>
        <br/>
        <label>Item 03 for sale</label>
        <button type="submit" name="add" value="item03">Add To Cart</button>

        <br/><br/>
        <input type="submit" name="remove_all" value="Clear Cart" />
    </form>

    <?php if(isset($_SESSION['cart']) && count($_SESSION['cart']) > 0): ?>
    <div class="chosen_items">
    <h3>Current Items</h3>
    <?php foreach($_SESSION['cart'] as $key => $value): ?>
        <p><?php echo "Item: <strong>". $value['name']. "</strong> Price: $".$value['price']; ?></p>
    <?php endforeach; ?>
    </div>
    <?php endif; ?>
</body>
</html>

Sample Output

【讨论】:

  • 谢谢。一个问题。我注意到表单中没有设置操作,表单如何知道使用页面中的 php 进行提交操作?那是我有点不清楚的部分。如何获取表单中的选择项并将该信息放入会话并将其传递给 php 代码进行处理。谢谢。我打算接受你的回答,但想先问这个后续问题,以防它以后不让我问。谢谢。
  • @user3064141 是的,这是真的,如果将action=""属性留空,则理解为将在同一页面上进行处理。对于选中的项目,当你点击提交时,变量不会立即转到$_SESSION,因为表单使用method="POST",提交的值首先在$_POST内。所以逻辑是,将项目放入$_POST 并将它们放入$_SESSION。从那时起,只要设置了会话,它将继续到其他页面。
  • 感谢您提醒我 $_POST 全局变量。我太专注于使用 $_SESSION 了,以至于我忘记了。谢谢。
猜你喜欢
  • 2020-01-04
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 2019-09-18
  • 2015-02-21
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多