我已经浏览过各种帖子,但无法找到解决此问题的方法:
我有一个包含多行字段的表单,只需单击一次提交按钮即可插入数据库表中。这是HTML的代码:
<form action="filename.php?cartID=<?php echo $_GET['cartID'];?>&customer_id=<?php echo $_GET['customer_id'];?>&total_count=<?php echo $_GET['total_count'];?>&action=add" method="post" id="add_participants" >
<table>
<?php for ($i=0, $n=$_GET['total_count']; $i<$n; $i++) { ?>
<input type="hidden" name="customer_id[]" id="customer_id[]" value="<?php echo $_GET['customer_id'];?>" />
<input type="hidden" name="cartID[]" id="cartID[]" value="<?php echo $_GET['cartID'];?>" />
<input type="hidden" name="products_id[]" id="products_id[]" value="<?php echo $_GET['products_id'];?>" />
<tr><td><label for="title[]">Title</label></td><td><select id="title[]" name="title[]">
<option value="Dr">Dr</option>
<option value="Miss">Miss</option>
<option value="Mr">Mr</option>
<option value="Mrs">Mrs</option>
<option value="Ms">Ms</option>
<option value="Prof">Prof</option>
</select>
</td>
<td><label for="firstname[]">First Name</label></td><td><input type="text" id="firstname[]" name="firstname[]"/></td>
<td><label for="surname[]">Surname</label></td><td><input type="text" id="surnam[]e" name="surname[]"/></td>
<td><label for="email[]">E-mail</label></td><td><input type="text" id="email[]" name="email[]"/></td></tr>
</table>
<?php } ?>
<input value="Add participant" type="submit" />
在操作页面上,代码如下:
for ($i=0, $n=$_GET['total_count']; $i<$n; $i++) {
$title[$i] = tep_db_prepare_input($HTTP_POST_VARS['title.$i]']);
$firstname =tep_db_prepare_input($HTTP_POST_VARS['firstname.$i']);
$surname =tep_db_prepare_input($HTTP_POST_VARS['surname.$i']);
$email = tep_db_prepare_input($HTTP_POST_VARS['email.$i']);
$customer_id = tep_db_prepare_input($HTTP_POST_VARS['customer_id.$i']);
$cart_id = tep_db_prepare_input($HTTP_POST_VARS['cartID.$i']);
$products_id = tep_db_prepare_input($HTTP_POST_VARS['products_id.$i']);
$query = "INSERT INTO participants (title,Firstname,Surname,Email,customers_id,cart_id,products_id) VALUES ('$title[$i]', '$firstname[$i]', '$surname[$i]', '$email[$i]', $customers_id[$i], $cart_id[$i], $products[$i])";
echo $query . "<br />";
mysql_query($query) or die(mysql_error());
}
但是,我无法将$ _POST变量的值放入要在insert语句中使用的变量数组中。
有人可以帮我吗?我尝试了不同的代码排列,但我仍然没有得到任何结果。
非常感谢。
答案 0 :(得分:0)
我非常确定$HTTP_POST_VARS
已被弃用..您应该使用$_POST
代替。
其次,您的处理实际上不需要遍历for
循环。您可以使用foreach
来循环遍历所有发布的值。
示例(未经测试):
foreach($_POST['customer_id'] as $key => $customerID) {
$title = !empty($_POST['title'][$key]) ? $_POST['title'][$key] : "";
$firstName = !empty($_POST['firstname'][$key]) ? $_POST['firstname'][$key] : "";
// etc...
}
答案 1 :(得分:0)
如果以相同的方式保持循环,则需要更改引用数组元素的方式。将$title[$i] = tep_db_prepare_input($HTTP_POST_VARS['title.$i]']);
更改为
$title[$i] = tep_db_prepare_input($_POST['title'][$i]);
并更改其余的作业以遵循相同的模式。
答案 2 :(得分:0)
tep_db_prepare_input()
的输出当然是一个谜,但除此之外,Marc B.说:“学习基本的PHP语法规则”
$query = "INSERT INTO participants (title,Firstname,Surname,Email,customers_id,cart_id,products_id) VALUES ('$title[$i]', '$firstname[$i]', '$surname[$i]', '$email[$i]', $customers_id[$i], $cart_id[$i], $products[$i])";
echo $query . "
这将完全输出双引号之间的内容。尝试使用:
";
$query = "INSERT INTO participants (title,Firstname,Surname,Email,customers_id,cart_id,products_id) VALUES ('".$title[$i]."', '".$firstname[$i]."', '".$surname[$i]."', '".$email[$i]."', ".$customers_id[$i].", ".$cart_id[$i].", ".$products[$i].")";
echo $query . "
";
在双引号内使用"{$array[$key]}"
也有效,但在双引号内使用"$array[$key]"
不起作用。
此外,不推荐使用$HTTP_POST_VARS
。使用$_POST
答案 3 :(得分:0)
您的代码有多个导致意外值的错误:
$ title [$ i] = tep_db_prepare_input($ HTTP_POST_VARS ['title。$ i]'])
foreach
肯定比for
循环