簡體   English   中英

如何通過 POST 從表單傳遞變量?

[英]How can I pass a variable from a form through POST?

現在我知道該怎么做了,但我一直收到一個錯誤,說索引未定義。 關於我正在嘗試做的一些事情:我有一個購物車,我想更新購物車中商品的數量。 目前,我的數量在單擊添加項目按鈕時更新。 但是,一旦我嘗試通過表單手動更新數量,我就會收到一條錯誤消息,指出我嘗試傳遞的索引未定義。 由於我對 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 case:

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"]; . 任何幫助表示贊賞。

根據 Mihai 的建議,我為“numBooks”添加了一個額外的過濾器,從而解決了問題。

沒有

$quan = $post["numBooks"]

在您的代碼中,添加它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM