在表单中发布数组时不获取数组值

时间:2013-07-03 16:06:05

标签: php mysql arrays

我已经浏览过各种帖子,但无法找到解决此问题的方法:

我有一个包含多行字段的表单,只需单击一次提交按钮即可插入数据库表中。这是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" />

在操作页面上,代码如下:

    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语句中使用的变量数组中。

有人可以帮我吗?我尝试了不同的代码排列,但我仍然没有得到任何结果。

非常感谢。

4 个答案:

答案 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]'])

  1. foreach 肯定for循环
  2. 更清晰
  3. 其他人说:$ HTTP_POST_VARS必须是$ _POST(或$ _REQUEST)
  4. 假设您的神秘tep_db_prepare_input()正常运行,$ HTTP_POST_VARS ['title。$ i]']在语法上是不正确的。单引号意味着变量未被解析:您的函数被传递$ _POST [ 'title。$ i]' ]的(无效)内容。我相信你的意思是写$ POST [“title $ i”](其中“。”是字段名称的一部分。(就个人而言,下划线不会像“。”那样混淆。) PHP)。
    1. 所以...解决所有问题,你应该好好去。好吧,#2&amp; 3,至少。