【问题标题】:How can I pass a variable from a form through POST?如何通过 POST 从表单中传递变量?
【发布时间】: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' =&gt; FILTER_VALIDATE_INT

标签: php session


【解决方案1】:

根据 Mihai 的建议,我为“numBooks”添加了一个额外的过滤器,从而解决了问题。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

没有

$quan = $post["numBooks"]

在您的代码中,添加它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2014-11-07
    • 2023-03-22
    • 2011-11-03
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多