0

そのため、ページ 2 に動的テーブルがあり、ユーザーは必要な数のエントリを追加できます。3ページを送信した後、すべての情報がうまく取得されています。問題は、配列を介した for ループの繰り返しが機能していないことです。コードは次のとおりです。

for($i = 0; $i < sizeof($_POST["fname_new"]); $i++) {
    $fname_new = $_POST["fname_new"][i];
    $lname_new = $_POST["lname_new"][i];
    $phone_new = $_POST["phone_new"][i];
    $email_new = $_POST["email_new"][i];
    $ethnicity_new = $_POST["ethnicity_new"][i];
    $stmt = $link -> prepare("INSERT INTO Conference (`First Name`, `Last Name`, `Phone`, `Email`, `Ethnicity`) VALUES (:first_new, :last_new, :phone_new, :email_new, :ethnicity_new)");
    $stmt->bindParam(':first_new', $fname_new);
    $stmt->bindParam(':last_new', $lname_new);
    $stmt->bindParam(':phone_new', $phone_new);
    $stmt->bindParam(':email_new', $email_new);
    $stmt->bindParam(':ethnicity_new', $ethnicity_new);
    $stmt->execute();
}

だから私がするとき

echo sizeof($_POST["fname_new"]);

正しい数が表示されるので、ユーザーが 2 ページ目に追加した行が 3 行ある場合、エコーされる値は 3 になるはずです。私がする時:

echo $_POST["fname_new"][0];

次に、最初の行から最初の名前を適切に指定します。範囲内にある限り、0 を任意の数値に置き換えることができ、それは正しいものです。しかし、何らかの理由で私がそうするとき

echo $_POST["fname_new"][i];

何も印刷されません。この for ループが機能しない理由がわかりません。論理的には正しいです。何か案は?

4

4 に答える 4

3

与えられたすべての答えに加えて、あなたは準備されたクエリでポイントを逃しています。クエリを1回準備し、それを何度も使用します。

それで:

  $stmt = $link -> prepare(
     "INSERT INTO Conference (`First Name`, `Last Name`, `Phone`, `Email`, `Ethnicity`)
      VALUES (:first_new, :last_new, :phone_new, :email_new, :ethnicity_new)");

ループの外側にある必要があります!

于 2012-09-19T10:01:16.170 に答える
3

変数 i を指す $ を忘れました

これを試して:

echo $_POST["fname_new"][$i];
于 2012-09-19T09:58:49.037 に答える
2

がありません$:

$fname_new = $_POST["fname_new"][$i];
$lname_new = $_POST["lname_new"][$i];
$phone_new = $_POST["phone_new"][$i];
$email_new = $_POST["email_new"][$i];
于 2012-09-19T09:59:17.390 に答える
1

次のようにする必要があります。

$_POST["fname_new"][$i];

変数 $i ではなく、リテラル 'i' (ほとんどの場合、PHP のバージョンによって異なります) を渡します。そのため、設定されていない「i」のキーインデックスで値を返そうとします。

于 2012-09-19T09:59:24.463 に答える