0

我浏览了各种帖子,但找不到解决此问题的方法:

我有一个包含几行字段的表单,只需单击提交按钮即可将其插入数据库表中。这是 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 变量的值放入要在插入语句中使用的变量数组中。

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

非常感谢。

4

4 回答 4

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...
}
于 2013-07-03T16:18:19.203 回答
0

如果您以相同的方式保持循环,则需要更改引用数组元素的方式。更改$title[$i] = tep_db_prepare_input($HTTP_POST_VARS['title.$i]']);

$title[$i] = tep_db_prepare_input($_POST['title'][$i]);

并更改其余的作业以遵循相同的模式。

于 2013-07-03T16:22:40.053 回答
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

于 2013-07-03T16:52:55.363 回答
0

您的代码有多个导致意外值的错误:

$title[$i] = tep_db_prepare_input($HTTP_POST_VARS['title.$i]'])

  1. foreach绝对比循环更清晰for
  2. 其他人说的:$HTTP_POST_VARS 必须是 $_POST(或 $_REQUEST)
  3. 假设您神秘的 tep_db_prepare_input() 功能正确, $HTTP_POST_VARS['title.$i]'] 在语法上不正确。单引号表示不解析变量:您的函数传递了 $_POST[ 'title.$i]' ] 的(无效)内容。我相信您的意思是写 $ POST["title $i"] (其中“。”是字段名称的一部分。(个人而言,下划线不会令人困惑,因为“。”在 PHP 中具有含义。)
    1. 所以...解决所有这些问题,您应该一切顺利。好吧,至少 #2 和 3。
于 2013-07-03T16:55:19.063 回答