Php 在表单中过帐时未获取数组值

Php 在表单中过帐时未获取数组值,php,mysql,arrays,Php,Mysql,Arrays,我已经浏览了很多帖子,但找不到解决这个问题的方法: 我有一个表单,其中有几行字段,只需单击submit按钮就可以插入到数据库表中。这是HTML的代码: <form action="filename.php?cartID=<?php echo $_GET['cartID'];?>&amp;customer_id=<?php echo $_GET['customer_id'];?>&amp;total_count=<?php echo $_

我已经浏览了很多帖子,但找不到解决这个问题的方法:

我有一个表单,其中有几行字段,只需单击submit按钮就可以插入到数据库表中。这是HTML的代码:

    <form action="filename.php?cartID=<?php echo $_GET['cartID'];?>&amp;customer_id=<?php echo $_GET['customer_id'];?>&amp;total_count=<?php echo $_GET['total_count'];?>&amp;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]);