0

だから私はこの基本的なhtmlフォームを持っています。私の目標は、このフォームに送信された値をmysqlテーブルに渡すことです。

 <form action="?action=settings" method="post">
      <ul>
        <li>
           <label for="settingValue[1]">Setting 1:</label>
           <input type="text" name="settingValue[1]" id="setting1" required />
        </li>
        <li>
            <label for="settingValue[2]">Setting 2:</label><br>
            <input checked type="radio" name="settingValue[2]" value="1" />On<br>
            <input type="radio" name="settingValue[2]" value="0" />Off
         </li>
         <li>
             <input type="submit" name="saveChanges" value="Save Changes" />
         </li>
       </ul>
   </form>

私のmysqlテーブルには3つの列(id、settingName、settingValue)しかないので、値を「settingValue」列に格納することにより、このフォーム(この場合は行1と2)を使用してテーブル内の複数のレコードを更新したいと思います。

いくつかの調査の結果、これを行うための最良の方法は、配列を投稿することであることがわかりました(これは、上記で試みたものです)。次に、foreachループを使用して配列を実行し、テーブルを更新します。

私の主な問題は、配列の使い方を理解することだと思います。レコードを更新する必要があるため、新しいレコードを作成するのではありません。対応するレコードを更新できるように、IDも保持する必要があります。

何時間もグーグルした後、私の最善の推測はこれを行うことでした:

if ( isset( $_POST['saveChanges'])) {
    foreach($_POST['settingValue'] as $key => $settingValue )  {
        $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
        $conn->exec("UPDATE settings SET settingValue=$settingValue WHERE id=$key");
        $conn = null;
    }

しかし、それは結果を生み出していません。

4

2 に答える 2

0

$settingValue引用符で囲んでください$key

$conn->exec("UPDATE settings SET settingValue='$settingValue' WHERE id='$key'");

ヒント:ループ$conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );の外側に置いてください。foreach各ループで接続を繰り返す必要はありません

于 2012-07-30T07:39:15.160 に答える
0

私が追加するすべての提案されたソリューションを要約します。

複数のレコードのパラメータに関する情報を保持するために、そのまま配列keysします。recordID

ループは、次の方法で整理する方が適切です(既存の接続を再利用しますが、反復ごとに再開しないでください)。

$conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD ); // opened connection
if ( isset( $_POST['saveChanges'])) // if smth. POSTed
    foreach($_POST['settingValue'] as $key => $settingValue ) // LOOPing thorugh each item
        $conn->exec("UPDATE settings SET settingValue='".$settingValue."' WHERE id='".$key."'"); // executing query using the previously opened connection

そして、値SETの値を引用符(')または(")で囲んでみてくださいUPDATE settings SET settingValue='$settingValue' WHERE id='$key'

于 2012-07-30T07:50:23.830 に答える