我正在尝试将表单中的某些项目插入到我的表格中,称为products
。表格如下:
正如您所看到的,我已经提到了一个添加更多供应商的链接:+ ,它只是在表单中添加了一个新行。这背后的脚本是这样的:
<script>
$("#addbtn").click(function(){
var next = parseInt($('#counter').val()) + 1;
$("#group").append("<table class='table table-hover'><tr><th style='padding-left:10px'>Name of supplier ("+next+")</th><th>Terms of sending</th><th>Guarantee</th><th>Price</th><th>Colors (use , for separation)</th></tr><tr><td style='padding-left:10px'><input name='supplier_name_("+next+")' type='text'></input></td><td><input name='supplier_sending_("+next+")' type='text'></input></td><td><input name='supplier_guarantee_("+next+")' type='text'></input></td><td><input name='supplier_price_("+next+")' type='text'></input></td><td><input name='supplier_colors_("+next+")' type='text'></input></td></tr></table>");
$('#counter').val(next);
});
</script>
现在我要做的是将用户在表单中输入的所有值插入到 array 中的表中。所以为了那个,我编写了这个:
// supplier info
$supplier_name_1 = $_POST['supplier_name_1'];
$supplier_sending_1 = $_POST['supplier_sending_1'];
$supplier_guarantee_1 = $_POST['supplier_guarantee_1'];
$supplier_price_1 = $_POST['supplier_price_1'];
$supplier_colors_1 = $_POST['supplier_colors_1'];
$supplier_info_1 = array($supplier_name_1, $supplier_sending_1, $supplier_guarantee_1, $supplier_price_1, $supplier_colors_1);
$proSupply_1 = json_encode($supplier_info_1);
for($p=2;$p<=5;$p++){
$supplier_name_ . $p = isset($_POST['supplier_name_'.$p.'']);
$supplier_sending_ . $p = isset($_POST['supplier_sending_'.$p.'']);
$supplier_guarantee_ . $p = isset($_POST['supplier_guarantee_'.$p.'']);
$supplier_price_ . $p = isset($_POST['supplier_price_'.$p.'']);
$supplier_colors_ . $p = isset($_POST['supplier_colors_'.$p.'']);
$supplier_info_ . $p = array($supplier_name_ . $p, $supplier_sending_ . $p, $supplier_guarantee_ . $p, $supplier_price_ . $p, $supplier_colors_ . $p);
$proSupply_ . $p = json_encode($supplier_info_ . $p);
$supplier_info_ . $p = array($supplier_name_ . $p, $supplier_sending_ . $p, $supplier_guarantee_ . $p, $supplier_price_ . $p, $supplier_colors_ . $p);
$proSupply_ . $p = json_encode($supplier_info_ . $p);
if(!empty($supplier_name_ . $p)&&(!empty($supplier_sending_ . $p))&&(!empty($supplier_guarantee_ . $p))&&(!empty($supplier_price_ . $p))&&(!empty($supplier_colors_ . $p))){
if($p == 2){
$sql = "ALTER TABLE products ADD '.$supplier_name_ . $p.' varchar(500) AFTER supplier_info_1";
}else if($p > 2){
$i = $p-1;
$sql = "ALTER TABLE products ADD '.$supplier_name_ . $p.' varchar(500) AFTER supplier_info_".$i;
}
if ($con->query($sql) === TRUE){
$insert_suppliers = "
INSERT INTO `products` (`supplier_info_" . $p . "`)
VALUES ('$proSupply_" . $p . "')
";
$run_suppliers = mysqli_query($con,$insert_suppliers);
if(!$run_product){
error_reporting(E_ALL);
die(mysqli_error($con));
}
}else{
error_reporting(E_ALL);
die(mysqli_error($con));
}
}
}
这段代码的作用是它基本上获取了有关第一个供应商的所有信息,然后如果用户点击了 + 符号,则FOR LOOP启动并获取所有必需的信息
然后,如果定义的变量不为空,则向该表添加新的FIELD。之后,它开始将数组插入该自定义字段。
所以它看起来很干净但是它会返回很多错误!第一个错误是:
未定义的索引:第11行的supplier_name_2
第11行到了这里:
$supplier_name_ . $p = $_POST['supplier_name_'.$p.''];
所有其他错误都是这样的(我在For循环中指定的每个输入名称的未定义索引和未定义变量)。
所以,如果你对此有任何想法,请告诉我,因为我真的很感激。谢谢:))
更新
当我把var_dump($ _ POST)时,我得到了这个:
["supplier_name_1"]=>
string(10) "supplier 1"
["supplier_sending_1"]=>
string(7) "terms 1"
["supplier_guarantee_1"]=>
string(11) "guarantee 1"
["supplier_price_1"]=>
string(7) "price 1"
["supplier_colors_1"]=>
string(8) "colors 1"
["supplier_name_2"]=>
string(10) "supplier 2"
["supplier_sending_2"]=>
string(7) "terms 2"
["supplier_guarantee_2"]=>
string(11) "guarantee 2"
["supplier_price_2"]=>
string(7) "price 2"
["supplier_colors_2"]=>
string(8) "colors 2"
["supplier_name_3"]=>
string(10) "supplier 3"
["supplier_sending_3"]=>
string(7) "terms 3"
["supplier_guarantee_3"]=>
string(11) "guarantee 3"
["supplier_price_3"]=>
string(7) "price 3"
["supplier_colors_3"]=>
string(8) "colors 3"
["counter"]=>
string(1) "3"
我现在得到的错误是:
未定义的变量:supplier_name _
未定义的变量:supplier_sending _
未定义的变量:supplier_guarantee _
未定义的变量:supplier_price _
未定义的变量:supplier_colors _
等
答案 0 :(得分:1)
html中有supplier_name_("+next+")
,但php中有$_POST['supplier_name_'.$p.'']
。它与()不同。 var_dump ($_POST)
;在php中检查你的html输入名称是否与错误生命线上的POST键名相匹配。
更新
看来你正在使用变量变量。 而不是
$supplier_name_ . $p = isset($_POST['supplier_name_'.$p.'']);
试
${'supplier_name_' . $p} = isset($_POST['supplier_name_'.$p.'']);
或
${"supplier_name_$p"} = isset($_POST['supplier_name_'.$p.'']);
请参阅http://php.net/manual/en/language.variables.variable.php
如果有效,请申请'supplier_name_'和其他人。
答案 1 :(得分:0)
根据您更新的问题,我认为循环正在运行,直到$ p = 3但是您已经使用静态数字5作为条件。
因为$ p的值是空的,或者你可以说那些迭代不存在。 4和5就是你遇到问题的原因。
你应该得到确切的长度并使用它而不是直接使用$ p&lt; = 5,只需在循环中修改这个条件,用动态数字替换5。
应该用长度变量替换5。