【发布时间】:2021-10-27 13:06:35
【问题描述】:
现在我知道该怎么做了,但我不断收到错误消息,提示索引未定义。关于我正在尝试做的一些事情:我有一个购物车,我想更新购物车中的物品数量。目前我的数量会在单击添加项目按钮时更新。但是,一旦我尝试通过表单手动更新数量,我就会收到一条错误消息,指出我尝试传递的索引未定义。由于我对 php 很陌生,所以我真的不知道它是如何或为什么没有与我设置的值一起传递的。
现在是代码:
这是我的购物车(不能正常工作的部分):
<?php
if (isset($_SESSION["cart"])) {
$total = 0;
foreach(BazaKnjig::seznamVsehKnjig() as $knjiga):
if (isset($_SESSION["cart"][$knjiga->id])) {
$number = $_SESSION["cart"][$knjiga->id];
?>
<form action="<?= $url ?>" method="post">
<input type="hidden" name="do" value="update_cart" />
<input type="hidden" name="id" value="<?= $knjiga->id ?>" />
<p>
<input type="number" name="numBooks" value="<?= $number ?>" size="1"> <?= $knjiga->avtor ?>: <?= substr($knjiga->naslov, 0, 20) ?> ...
<button type="submit">Posodobi</button>
</p>
</form>
<?php
$total = $total + ($knjiga->cena) * $number;
}
endforeach;
?>
<p> Skupaj: <b> <?= number_format($total, 2) ?> EUR </b></p>
我有一个表格来展示购物车中的所有商品。当使用 POST 传递变量时,我收到错误 Notice: Undefined index: numBooks。我做了一些谷歌搜索,发现当变量的值为空时这很常见。我不确定这是否与我使用变量 $number 设置数量这一事实有关,或者我是否遗漏了一些重要的东西。
这是我检查方法和过滤的代码。
if ($method == "POST") {
$validationRules = [
'do' => [
'filter' => FILTER_VALIDATE_REGEXP,
'options' => [
"regexp" => "/^(add_into_cart|purge_cart|update_cart)$/"
]
],
'id' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 0]
]
];
$post = filter_input_array(INPUT_POST, $validationRules);
然后按照其他功能的 switch 语句,所以我将跳过这些,因为它们没有问题,最后是更新 switch 案例:
switch($post["do"]):
case "update_cart":
$id = $post["id"];
$knjiga = BazaKnjig::vrniKnjigo($id);
$quan = $post["numBooks"];
if($quan > 0) {
$_SESSION["cart"][$id] = $quan;
} else {
unset($_SESSION["cart"][$id]);
}
break;
错误出现在$quan = $post["numBooks"];。任何帮助表示赞赏。
【问题讨论】:
-
您在此处编写的代码中没有
$quan = $post["numBooks"],而是$quan = $post["quantity"]。你能把那部分代码也放上去吗? -
抱歉,我将立即编辑代码。看来我有一个旧版本的部分。
-
var_dump($_POST);exit();使用它来查看 $post 请求返回的内容。
-
啊,谢谢,终于有一些信息了。看来 numBooks 是字符串类型,而不是实际整数。谢谢你好心的陌生人。
-
该错误很可能来自
filter_input_array函数调用。根据您拥有的 PHP 版本,如果不存在相应的验证规则,此函数可能会删除 post 键。要调试此解决方案,您可以简单地尝试将第三个参数add_empty: true添加到函数中,或者添加新的验证规则:'numBooks' => FILTER_VALIDATE_INT