1

私は、単純なはずだと思うことを理解するのに最も苦労しています。1つの送信ボタンでデータベースの複数の行を更新する必要があります。現在、各行の送信で機能していますが、組み合わせる必要があります。これが私が試していることです。どこが間違っているのですか?(私はオンラインで見つけた複数のチュートリアルをやめてきましたが、すべてが混乱していると思います)。

フォームは次のとおりです。

<?php foreach ($teams as $team): 
$id[]=$team['id'];?>


<form action="?update" method="post">
    <div class="team-box">
        <h2><?php echo $team['name'] ?></h2>

        <label for="name">Name:</label>
        <input type="text" name="name" value="<?php echo $team['name'] ?>" />

        <label for="name">Match Wins:</label>
        <input type="text" name="mwins" value="<?php echo $team['mwins'] ?>" />

        <label for="name">Match Losses:</label>
        <input type="text" name="mlosses" value="<?php echo $team['mlosses'] ?>" />

        <label for="name">Match Ties:</label>
        <input type="text" name="mties" value="<?php echo $team['mties'] ?>" />

        <label for="name">Game Wins:</label>
        <input type="text" name="gwins" value="<?php echo $team['gwins'] ?>" />

        <label for="name">Game Losses:</label>
        <input type="text" name="glosses" value="<?php echo $team['glosses'] ?>" />

        <input type="hidden" name="id" value="<?php echo $team['id'] ?>" />
    </div>

UPDATEを処理するPHPは次のとおりです。

try
{
foreach($_POST['id'] as $id) {
$sql = 'UPDATE teams SET
    name = "' . $_POST['name'.$id] . '",
    mwins = "' . $_POST['mwins'.$id] . '",
    mlosses = "' . $_POST['mlosses'.$id] . '",
    mties = "' . $_POST['mties'.$id] . '",
    gwins = "' . $_POST['gwins'.$id] . '",
    glosses = "' . $_POST['glosses'.$id] . '"
    WHERE id = "' . $_POST['id'.$id] . '"';
$pdo->exec($sql);
}

}
catch (PDOException $e)
{
    $error = 'Error adding submitted team: ' . $e->getMessage();
    include 'error.html.php';
    exit();
}

header('Location: .');
exit();

前もって感謝します!

4

2 に答える 2

0

修正が必要なことがいくつかあります。

  1. FORMはforeachの外側にある必要があります。

  2. '... name = "name" value = "...'は、_POSTコードに同意するために、代わりに次のように読み取る必要があります。... name = "name" value = ".. ..

このように、単一のPOSTは、たとえば、

  name123="Rangers"
  mwins174="123"

次に、すべてのIDが必要です。これを行うには、foreachで次のように発行します。

 <input type="hidden" name="id[]" value="<?php print $team['id']; ?>" />

これにより、HTMLが作成されます。

 <input type="hidden" name="id[]" value="123" />
 ...
 <input type="hidden" name="id[]" value="456" />

$ _POST ['id']は、123、456などを含む配列です。

HTMLで入力することもできます。

 <input type="text" name="name[<?php print $team['id']; ?>]" value="...

そのため、$ _ POST ['name']は、idの値と同じキーを持つベクトルになります。したがって、次のようになります。

foreach($id as $team_id)
{
    // Pseudocode
    UPDATE... SET name=$name[$team_id]... WHERE id = $team_id;
}

このようにして、1つのSUBMITと複数のUPDATEがあります。

于 2012-07-03T21:04:50.677 に答える
0

UPDATE クエリごとにすべてのフィールド名が変わるため、既に行っているように個別のクエリを実行する必要があります。単一の UPDATE クエリを実行できるとは思いません。

わかりません。複数の更新クエリを実行することの何が問題になっていますか?

于 2012-07-03T20:34:40.453 に答える