0

複数行のデータを取得するフォームがあり、各アイテムには、ユーザーが特定のアイテムにコメントするためのテキストエリアがあります。返されるアイテムの数は可変であり、いずれかまたはすべてのボックスにコメントを残す必要はありません。

    <textarea name="comment[]" cols="25" rows="2"><?php echo $f2; ?></textarea>
    <input name="tableid[]" type="hidden" value="<?php echo $f1; ?>">

echo ステートメントは、ユーザーが他の誰かが入力した内容を変更できるため、現在データベースに保存されている内容をテキスト領域に取り込みます。

これがフォーム処理ページに渡されると、これが返されます..

    Submit: Submit
    comment: Test Comment 1,Test Comment 2
    tableid: 590,591

そのため、配列を正しく渡しているようです。このコードを使用してデータベースを更新しています

$conn = new PDO("mysql:host=xxxx;dbname=xxxxx",$username,$password);

$i = 0;
if(isset($_POST['submit'])) {
    foreach($_POST['comment'] as $comment) {
                        $comment = $_POST['comment'][$i];

            $id = $_POST['tableid'][$i];
            $stmt = $conn->prepare("UPDATE reservations SET comment=:comment WHERE     tableid=:id");

            $stmt->bindValue(':comment', $comment, PDO::PARAM_INT);
            $stmt->bindValue(':id', $id, PDO::PARAM_INT);

            $stmt->execute();

            $i++;
    }
}

しかし、これはまったく更新されていないようです。どこが間違っているのでしょうか?

どうもありがとう

4

3 に答える 3

2
<textarea name="comment[<?=$f1?>]" cols="25" rows="2"><?=$f2?></textarea>

<?php
$dsn = "mysql:host=xxxx;dbname=xxxxx";
$opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$conn = new PDO($dsn, $username, $password, $opt);

$sql  = "UPDATE reservations SET comment=? WHERE tableid= ?";
$stmt = $conn->prepare($sql);

foreach ($_POST["comment"] as $id => $comment) {
    if ($comment) {
        $stmt->execute([$comment, $id]);
    }
}
于 2013-07-26T16:31:09.583 に答える