很抱歉烦人。我有两个问题
为什么我会收到上述错误。
我正在向篮子中添加物品。 在一个会话中不能多次预订任何项目。购物车项目1和购物车项目4是相同的项目,但是当我将第一项添加到购物篮时。它没有显示应该是bookid的$ key $值:1但是你可以看到上面其他项目的信息。
如有任何问题请咨询,任何帮助将不胜感激。
PHP& HTML
<?php
include 'header.php';
$bookInBasket = "";
if(isset($_POST['bid'])){
$bid = $_POST['bid'];
$wasFound = FALSE;
$i = 0;
if(!isset($_SESSION["basket_array"]) || count($_SESSION["basket_array"]) < 1) {
$_SESSION["basket_array"] = array("bookid" => $bid);
} else {
foreach($_SESSION["basket_array"] as $each_item){
$i++;
while(list($key, $value) = each($each_item)){
if($key == "bookid" && $value == $bid){
$bookInBasket = "Sorry. You can only reserve one of each book at one time.";
$wasFound = true;
}
}
}
if($wasFound==FALSE){
array_push($_SESSION["basket_array"], array("bookid" => $bid));
}
}
}
if(isset($_GET['cmd']) && $_GET['cmd'] == "emptybasket"){
unset($_SESSION["basket_array"]);
}
$cartOutput ="";
if(!isset($_SESSION["basket_array"]) || count($_SESSION["basket_array"]) < 1){
$cartOutput = "<h2 align='center'>You need to add Books to view them here.</h2>";
} else {
$i = 0;
foreach($_SESSION["basket_array"] as $each_item){
$i++;
$cartOutput .= "<h2>Cart Item $i </h2>";
while (list($key, $value) = each($each_item)) {
$cartOutput .= "$key : $value <br />";
}
}
}
?>
<div id="azcontent">
<h1>Basket</h1>
<?php echo $cartOutput; ?>
<br /><br />
<a href="basket.php?cmd=emptybasket">Empty Basket</a>
<div> <?php echo $bookInBasket ?> </div>
</div>
</body>
</html>
会话输出(转储)
array(4) {
["bookid"]=> string(1) "1"
[0]=> array(1) { ["bookid"]=> string(1) "2" }
[1]=> array(1) { ["bookid"]=> string(1) "3" }
[2]=> array(1) { ["bookid"]=> string(1) "1" }
}
答案 0 :(得分:1)
初始化数组时使用array_push添加数组时会出现问题。每次使用array_push时,它都会添加一个索引数组的新元素。在这里初始化数组时:
if(!isset($_SESSION["basket_array"]) || count($_SESSION["basket_array"]) < 1) {
$_SESSION["basket_array"] = array("bookid" => $bid);
} else {
它只是添加一个键值对,而不是一个带索引的数组。您可以通过将该行更改为:
来解决此问题if(!isset($_SESSION["basket_array"]) || count($_SESSION["basket_array"]) < 1) {
$_SESSION["basket_array"] = array( array("bookid" => $bid));
} else {
构建其余代码是为了处理索引数组的数组(主要是通过使用foreach语句),而不是更平坦的键值对数组。