0

さまざまな投稿を行ってきましたが、この問題の解決策が見つかりません:

送信ボタンを 1 回クリックするだけで、データベース テーブルに挿入する複数行のフィールドを含むフォームがあります。これは 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

4 に答える 4

0

私はそれが非推奨であることをかなり確信しています..代わり$HTTP_POST_VARSに使用する必要があります。$_POST

第二に、あなたの処理は実際にはループをループする必要はありませんforforeach代わりに、投稿されたすべての値をループするために使用できます。

例 (未テスト):

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

あなたのコードには、意図しない値をもたらす複数のエラーがあります:

$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 に答える
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 に答える