Php 在表单中过帐时未获取数组值
我已经浏览了很多帖子,但找不到解决这个问题的方法: 我有一个表单,其中有几行字段,只需单击submit按钮就可以插入到数据库表中。这是HTML的代码:Php 在表单中过帐时未获取数组值,php,mysql,arrays,Php,Mysql,Arrays,我已经浏览了很多帖子,但找不到解决这个问题的方法: 我有一个表单,其中有几行字段,只需单击submit按钮就可以插入到数据库表中。这是HTML的代码: <form action="filename.php?cartID=<?php echo $_GET['cartID'];?>&customer_id=<?php echo $_GET['customer_id'];?>&total_count=<?php echo $_
<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" />
我相当肯定$HTTP\u POST\u VARS
已被弃用。。您应该改用$\u POST
其次,您的处理实际上不需要在for
循环上循环。您可以使用foreach
来循环所有已发布的值
示例(未测试):
如果保持循环的方式相同,则需要更改引用数组元素的方式。更改$title[$i]=tep_db_prepare_输入($HTTP_POST_VARS['title.$i]')代码>到
$title[$i] = tep_db_prepare_input($_POST['title'][$i]);
然后将剩下的作业改成同样的模式。tep\u db\u prepare\u input()
的输出当然是错误的,但除此之外,Marc B.说的是正确的:“学习基本的PHP语法规则”
$query=“在参与者中插入(标题、名字、姓氏、电子邮件、客户id、购物车id、产品id)值(“$title[$i]”、“$Firstname[$i]”、“$lasname[$i]”、“$Email[$i]”、$customers\u id[$i]、$cart\u id[$i]、$products[$i])”;
echo$query。“
”代码>
这将准确地输出双引号之间的内容。尝试使用:
$query=“在参与者中插入(标题、名字、姓氏、电子邮件、客户id、购物车id、产品id)值(“$title[$i]”、“$Firstname[$i]”、“$姓氏[$i]”、“$Email[$i]”、“$客户id[$i]”、“$购物车id[$i]”、“$products[$i]”);
echo$query。“
”代码>
在双引号内使用“{$array[$key]}”
也有效,但在双引号内使用“$array[$key]”
则无效
此外,$HTTP\u POST\u VARS
已被弃用。使用$\u POST
您的代码有多个错误,这些错误会导致意外值:
$title[$i]=tep\u db\u prepare\u输入($HTTP\u POST\u VARS['title.$i]'))
foreach
显然比for
循环更清晰
其他人说:$HTTP\u POST\u VARS必须是$\u POST(或$\u REQUEST)
假设神秘的tep_db_prepare_input()函数正确,$HTTP_POST_VARS['title.$i]']在语法上不正确。单引号表示未分析变量:函数被传递了$\u POST['title.$i]']的(无效)内容。我相信您的意思是写$POST[“title$I”](其中“.”是字段名的一部分。(就个人而言,下划线不会太令人困惑,因为“.”在PHP中有含义。)
所以…解决了所有这些问题,你应该准备好出发了。好吧,至少是2和3
tep\u db\u prepare\u input
的作用是什么?通常这类事情都是一种迹象,有些事情非常、非常错误并且被忽略。请尝试以下操作之一:$HTTP\u POST\u VARS[“title[$i]”]
或$HTTP\u POST\u VARS['title'][$i]
id=“customer\u id[]
真的吗?:D@chrislondon说真的吗?学习基本的PHP语法规则。“
字符串不会插入变量。$\u POST
也已经有十亿年的历史了。非常感谢您的帮助。
foreach($_POST['customer_id'] as $key => $customerID) {
$title = !empty($_POST['title'][$key]) ? $_POST['title'][$key] : "";
$firstName = !empty($_POST['firstname'][$key]) ? $_POST['firstname'][$key] : "";
// etc...
}
$title[$i] = tep_db_prepare_input($_POST['title'][$i]);