For循环和未定义的索引

时间:2015-01-28 14:16:44

标签: php

这是我第一次使用“for”循环,我真的不明白它是如何工作的。当我尝试运行它时,我收到一个错误,上面写着“未定义的索引....”注意:未定义的索引:SupplierName1。请帮助我如何定义它。感谢。

if(isset($_POST['submit'])) {
$amt = $_POST['total'];
echo "<pre>"; print_r($_POST); echo "</pre>";
if($amt > 0) {
    $qry = "INSERT INTO supplier(SupplierName, SupplierCompanyAddress, SupplierContactNo) VALUES "; // Split the mysql_query
    for($i=1; $i<=$amt; $i++) {
        $qry .= "('".$_POST["SupplierName$i"]."', '".$_POST["SupplierCompanyAddress$i"]."', '".$_POST["SupplierContactNo$i"]."', NOW()), "; // loop the mysql_query values to avoid more server loding time
    }
    $qry    = substr($qry, 0, strlen($qry)-2);
    $insert = mysql_query($qry); // Execute the mysql_query
}
// Redirect for each cases
if($insert) {
    $msg = '<script type="text/javascript">window.location.href = "?view&result=added";</script>';
}
else {
    $msg = '<script type="text/javascript">alert("Server Error, Kindly Try Again");</script>';
}
}

以下是结果

Array
(
[SupplierName1] => lloooo
[SupplierCompanyAddress1] => oo
[SupplierContactNo1] => ooo
[SupplierName2] => mm
[SupplierCompanyAddress2] => mm
[SupplierContactNo2] => mm
[total] => 2
[submit] => Add
)

忘记提及此表单可以一次添加多个数据/记录。

以下是固定版本(已解决)

if(isset($_POST['submit'])) {
$amt = $_POST['total'];
//echo "<pre>"; print_r($_POST); echo "</pre>";
if($amt > 0) {
    for($i=1; $i<=$amt; $i++) {
    $qry = "INSERT INTO supplier(SupplierName, SupplierCompanyAddress, SupplierContactNo) VALUES "; // Split the mysql_query
        $qry .= " ( '".$_POST["SupplierName$i"]."' , '".$_POST["SupplierCompanyAddress$i"]."', '".$_POST["SupplierContactNo$i"]."') "; // loop the mysql_query values to avoid more server loding time
        //$qry  = substr($qry, 0, strlen($qry)-2);
        //echo $qry;//
        mysql_query($qry) or die(mysql_error());
        header('location:view_supplier_for_manager.php');
        //echo "ok";
        }else {
        echo "fail";
        }// Execute the mysql_query
    }

}
// Redirect for each cases
//if($insert) {
    //$msg = '<script type="text/javascript">window.location.href = "?view&result=added";</script>';
}*/
}
}
}
?>

1 个答案:

答案 0 :(得分:0)

for-loop期望&#39;指数&#39;符合$amt值。换句话说,如果您提交的表单有一个输入字段:

<input type="text" name="amt" value="4"/>

那么它应该有4组这样的字段:

<input type="text" name="SupplierName1"/>
<input type="text" name="SupplierCompanyAddress1"/>
<input type="text" name="SupplierContactNo1"/>

...

<input type="text" name="SupplierName4"/>
<input type="text" name="SupplierCompanyAddress4"/>
<input type="text" name="SupplierContactNo4"/>

您看到的错误显然是因为缺少第一组。在循环中:

$qry .= "('".$_POST["SupplierName$i"]."',
     '".$_POST["SupplierCompanyAddress$i"]."',
     '".$_POST["SupplierContactNo$i"]."', NOW()), ";

params扩展到:

$qry .= "('".$_POST["SupplierName1"]."',
     '".$_POST["SupplierCompanyAddress1"]."',
     '".$_POST["SupplierContactNo1"]."', NOW()), ";

然后2,3 ......直到$amt。如果$amt等于1,则需要第一组。尝试打开浏览器开发工具(usu。F12),看看究竟提交了哪些参数。