注意:未定义的索引:尝试使用空数组提交表单时

时间:2017-03-30 02:50:58

标签: php undefined

美好的一天,每当我提交表格时,是否有人愿意解释此通知。这是我的代码:

<?php

if($_POST['submit']) {


    $dbC = new imsFunction();

    if ($_POST['item'] == null) {
        echo 'No Data';
    } else {
        foreach ($_POST['item'] as $key => $value) { 

            $item = $_POST["item"][$key];
            $price = $_POST["price"][$key];
            $qty = $_POST["qty"][$key];

                $sql = $dbC->qryExec('Insert Into tbl_test (item,price,quant) Values (?, ?, ?)', [$item, $price, $qty]);
                //$sql = mysql_query("insert into your_table_name values ('','$item', '$price', '$qty')");  
            }  
        } 
    }
}   

function addRow(tableID) {

    var enteredItem = $("#item").val();
    var enteredPrice = $("#price").val();
    var enteredQty= $("#qty").val();

    if (!enteredItem) {
        alert("Please entere item name!");
    } else {
        var table = document.getElementById(tableID);

        var rowCount = table.rows.length;
        var row = table.insertRow(rowCount);

        var cell1 = row.insertCell(0);
        var element1 = document.createElement("input");
        element1.type = "checkbox";
        element1.name="chkbox[]";
        cell1.appendChild(element1);

        var cell2 = row.insertCell(1);
        cell2.innerHTML = "<input type='text' name='item[]' value='"+enteredItem+"' readonly />";

        var cell3 = row.insertCell(2);
        cell3.innerHTML = "<input type='text'  name='price[]' value='"+enteredPrice+"' readonly />";

        var cell4 = row.insertCell(3);
        cell4.innerHTML = "<input type='text'  name='qty[]' value='"+enteredQty+"' readonly />";

        document.getElementById('item').value='';
    }
}

&GT;

这是将数据添加到表行的javascript代码。

NOCAPTCHA = True

输入的名称类似于'item []'。我想要做的是在用户提交按钮而不先添加数据时捕获错误。但是会发生什么,它会在foreach循环中发出一条注意未定义的索引:项目。

2 个答案:

答案 0 :(得分:0)

在测试传入数据时,总是假设最差。在这种情况下,如果测试$_POST['item']==null尚未设置,则测试if(isset($_POST['item']) && is_array($_POST['item'])) { } 可能会失败。

更安全的方法是:

null

测试的第二部分是以防万一。

顺便说一句,如果您专门针对===值进行测试,则应使用<select name="tickets" multiple> <option value="__ticket_id__">Ticket #</option> <option value="__ticket_id__">Ticket #</option> <option value="__ticket_id__">Ticket #</option> <option value="__ticket_id__">Ticket #</option> ... </select> 将其与其他虚假值区分开来。

答案 1 :(得分:0)

输入字段名称

存在一些错误
<input type="text" name="ProductNme" id="item" >
<input type="text" name="ProductNme" id="price" >
<input type="text" name="ProductNme" id="qty" >

它们都被命名为:ProductNme这就是为什么这些行不起作用

$item = $_POST["item"][$key];
        $price = $_POST["price"][$key];
        $qty = $_POST["qty"][$key];

这些索引(itempriceqty)在发送到服务器的$ _POST数组中不存在。 因此未定义的索引消息。 祝你好运