0

私はあなたのアドバイスを必要とします。データベースからテーブルにデータをフェッチします: ID、名前。表にはアクションがあります: 削除、有効化、ブロック。アクション「削除」を選択すると、そのレコードがそれぞれ削除されます。ただし、別のレコードを選択しても、スクリプトが機能せず、常に最後のレコードが削除されます。問題は、選択名と非表示の入力名がすべてのレコードで似ていることだと思います。しかし、別の名前でそれらを作成する方法が見つかりません。どんなアドバイスでも大歓迎です。

HTML:

  <form method='post'> 
  <table border='1'>
  <tr>
  <th> ID </th>
<th> Name </th>
<th> Action </th>
</tr>

コード:

$db = new PDO('mysql:host=localhost;dbname=****;charset=utf8', '**', '**');
$query = $db->query("SELECT ID,statusas,login,vardas,email FROM users");

while($row = $query->fetch(PDO::FETCH_BOTH)) { 
 echo "<tr><input type='hidden' name='id' value='".$row[0]."'>";
 echo "<td>".$row[0]."</td>";
 //echo "<td>".$row[1]."</td>";
 echo "<td>".$row[2]."</td>";
 //echo "<td>".$row[3]."</td>";
// echo "<td>".$row[4]."</td>";
 echo "<td><select name='action'>
             <option value='choose'>Choose..</option>
             <option value='delete'> Delete </option>
             <option value='enable'> Enable </option>
             <option value='block'> Block</option>
        </select></td>";
   echo "</tr>";
 }
 echo "<br><input type='submit' name='submit'></table></form>";

 if($_POST['submit']) {
   if ($_POST['action']== 'delete') {
   echo $_POST['id']; // delete query, but now I am just checking if I get a proper ID.
  }
}
else {
echo "bad";
}

テーブル

4

2 に答える 2

2

フォームのすべての行で同じname属性を使用しているため、それらはオーバーライドされており、最後の属性を使用しています。

あなたができることは、すべての行を独自のフォームでラップするか、次のようにして、すべての行でアクションを実行するための送信ボタンを 1 つだけ持つことです。

// remove hidden id element

...

echo "<td><select name='action[" . $row[0] . "]'>"

...
// remove submit button in the loop, but add it after the while loop
...

if (isset($_POST['action']))
{
    foreach ($_POST['action'] as $id => $action)
    {
        if ($action !== 'choose')
        {
            // do action on the id;
            echo $id . " -> " . $action . "<br>";
        }
    }
}
于 2013-01-03T23:19:23.380 に答える
0

すべての ID をフォームに入力すると、CGI は次のように送信します: id=1、id=2、id=3 など。PHP は最後の ID のみを読み取り、それを削除します。

これを修正するには、各行に独自のフォームを指定します。

while($row = $query->fetch(PDO::FETCH_BOTH)) { 
 echo "<form method='post'>";
 echo "<tr><input type='hidden' name='id' value='".$row[0]."'>";
 echo "<td>".$row[0]."</td>";
 //echo "<td>".$row[1]."</td>";
 echo "<td>".$row[2]."</td>";
 //echo "<td>".$row[3]."</td>";
// echo "<td>".$row[4]."</td>";
 echo "<td><select name='action'>
             <option value='choose'>Choose..</option>
             <option value='delete'> Delete </option>
             <option value='enable'> Enable </option>
             <option value='block'> Block</option>
        </select></td>";
   echo "</tr>";
   echo "</form>";
 }
 echo "<br><input type='submit' name='submit'></table>";
于 2013-01-03T23:15:55.850 に答える