0

你好我是第一次海报。我试图寻找答案,但从已经发布的材料中没有发现任何明显的问题。我需要另一双眼睛,因为我无法弄清楚为什么我的表单数据没有发布。

我正在制作一个使用会话变量来短期存储数据的购物车。最终,在结帐期间,此订单数据将最终确定到数据库中。当我呈现我的购物车内容以供审查时,我需要为我的客户提供更新数量(或删除)的自由。尽可能保持整洁,这里是购物车内容的 html 渲染(没有标题、总数等):

<form action="mas_cart.php" method="post">
    <table id="shCart" border="1" width="800px" cellspacing="0">
        <tr>
            <td align="left">DSC0679</td>
            <td align="left">7.2H x 11W Glossy Paper </td>
            <td align="center">No</td><td align="center">$55</td>
            <td align="center">
                <input id="inp_qty" type="text" name="DSC0679_unsigned_7.2H x 11W Glossy Paper $55" value="1" size="3">
            </td>
            <td align="right">55.00</td>
        </tr>

        <tr>
            <td align="left">MRS5293</td>
            <td align="left">7.3H x 11W Glossy Paper </td>
            <td align="center">Yes</td>
            <td align="center">$55</td>
            <td align="center">
                <input id="inp_qty" type="text" name="MRS5293_signed_7.3H x 11W Glossy Paper $55" value="1" size="3">
            </td>
            <td align="right">55.00</td>
        </tr>

        <tr>
            <td align="left">MRS5293</td>
            <td align="left">7.3H x 11W Glossy Paper </td>
            <td align="center">No</td>
            <td align="center">$55</td>
            <td align="center">
                <input id="inp_qty" type="text" name="MRS5293_unsigned_7.3H x 11W Glossy Paper $55" value="2" size="3">
            </td>
            <td align="right">110.00</td>
        </tr>
    </table>

    <input type="hidden" name="save" value="true"/>
    <input type="image" src="images/save-changes.png" style="border:1px solid rgb(50,50,50)" alt="Save Changes"/>
</form>

这是应该处理更新的PHP代码:

//update section
if(isset($_POST['save'])) {
   foreach ($_SESSION['cart'] as $item => $qty) {
     if($_POST[$item]==0 || $_POST[$item]=="") {
         unset($_SESSION['cart'][$item]); } 
     else {
         $_SESSION['cart'][$item] = $_POST[$item];} }

在执行中,$_POST['save']正确设置,但$_POST[$item]返回未定义的索引:

注意:未定义索引:DSC0679_unsigned_7.2H x 11W Glossy Paper $55 in C:\xampp\htdocs\aaa\mas_cart.php 第 57 行

注意:未定义索引:MRS5293_signed_7.3H x 11W Glossy Paper $55 in C:\xampp\htdocs\aaa\mas_cart.php 第 57 行

注意:未定义索引:MRS5293_unsigned_7.3H x 11W Glossy Paper $55 in C:\xampp\htdocs\aaa\mas_cart.php 第 57 行

基本上,后处理中的条件总是呈现为真,因为索引是未定义的,所以更新会吐出错误并清除购物车。我知道让别人看我的代码是可恨的,但我最糟糕的是弄清楚这一点。任何建议将不胜感激!帮助?

4

1 回答 1

0

以下是我建议您更改 HTML 结构的方法:

<form action="mas_cart.php" method="post">
    <table id="shCart" border="1" width="800px" cellspacing="0">
        <tr>
            <td align="left">
                <input readonly type="text" name="id[]" value="DSC0679"/>
            </td>
            <td align="left">
                <input readonly type="text" name="desc[]" value="7.2H x 11W Glossy Paper"/>
            </td>
            <td align="center">
                <input readonly type="text" name="something[]" value="No"/>
            </td>
            <td align="center">
                <input readonly type="text" id="price0" name="price[]" value="55.00"/>
            </td>
            <td align="center">
                <input type="number" id="quantity0" name="quantity[]" min="0" size="3"/>
            </td>
            <td align="right">
                <input readonly type="text" id="text0" name="ext[]"/>
            </td>
        </tr>

        ...

    <input type="hidden" id="count" name="count" value="3"/>
    <input type="hidden" name="save" value="true"/>
    <input type="image" src="images/save-changes.png" style="border:1px solid rgb(50,50,50)" alt="Save Changes"/>
</form>

如果以 a 结尾name[]它将将该值视为一个数组,而不仅仅是一个值。此外,我还为您提供了价格、数量和 ext 字段的 ID 以及产品数量,因此您可以根据需要在 Javascript 中进行即时计算。然后你可以在你的 PHP 中做什么(我还没有测试过):

$products = array();

if(isset($_POST['save']) && is_array($_POST['id'])) {
    for($i=0,$l=count($_POST['id']);$i<$l;$i++) {
        $products[$i] = array();

        $fields = array('id','desc','something','price','quantity','ext');

        foreach($fields as $field)
            { $products[$i][$field] = $_POST[$field][$i]; }
    }
}

然后,例如,您可以获得第一个产品数量:$products[0]['quantity']

在使用类似这样的实际应用程序中,您只需要每个产品的 ID 和数量。计算将在后端完成(永远不要相信用户),并且实际上不需要产品信息。

于 2013-10-17T20:08:11.220 回答