0

フォーム フィールドをループして、フォーム フィールド データを動的に取得し、データベースに挿入したいと考えています。フォーム フィールドごとに値をバインドする必要はなく、配列内の値をループ処理します。私のやり方ではうまくいかないようです。助言がありますか?

ありがとう

<?php
    $FormFields = array();
    $Values = array();
    global $i;
    $i = 0;

    $conn= new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
    foreach($_POST as $key => $value) {
        $FormFields[++$i] = $key;
        $Values[$i] = $value;

        echo $FormFields[$i] . "<br />";
        echo $Values[$i] . "<br />";

        //loop through all form fields and bind value
        $sql = "INSERT INTO sectiona ($FormFields[$i]) VALUES (:$i)";
        $st = $conn->prepare($sql);
        $st->bindValue(":$i", $Values[$i]);
        $st->execute();

    }
    echo "Total Fields: " . $i;
    $conn = null;

?> 

編集:

データ エントリごとに新しい行を作成するのはなぜですか? 1列だけじゃないの?

私のイメージ

4

2 に答える 2

1

引用符ではできません++$i。クエリのその部分を移動します。

$field = $FormFields[++$i];
$sql = "INSERT INTO sectiona ($field) VALUES (:$i)";
于 2012-06-15T16:23:09.773 に答える
0

$i適切に設定されていると思います。私はやった

 echo $i . " - " . $FormFields[$i] . " - " . $Values[$i] . "<br />";

test.php?test=1&something=2&nothing=true行、URLに適切な出力を次のように提供しています

1 - test - 1 
2 - something - 2
3 - nothing - true

クエリで変数が正しくエクスポートされていない可能性があります。試す:

$sql = "INSERT INTO sectiona ('".$FormFields[$i]."') VALUES (:".$i.")";
$st = $conn->prepare($sql);
$st->bindValue(":".$i, $Values[$i]);

あなたの編集に答える編集:あなたはやってい$sql = "INSERT INTO sectiona ($FormFields[++$i]) VALUES (:$i)"; ますあなたはすでに最初の場所で $i をインクリメントしました$FormFields[++$i] = $key;。二度としないでください。だから私はそれを編集したのです

$sql = "INSERT INTO sectiona ('".$FormFields[$i]."') VALUES (:".$i.")"; 

最初の応答で。

于 2012-06-15T16:33:42.710 に答える