0

以前、ループから単一の定数値を取得し、それをループ外で使用することに関する質問を投稿しました (参照: Question )。今、私は別の while ループで別の問題に直面しています。次のようになります: クエリがあります:

$sql = "
        SELECT alarms.id, alarms.date, clients.name, clients.number, alarms.controller, 
        alarmstype.type, alarms.alarmstatus, alarms.starttime, alarms.endtime
        FROM alarms
        INNER JOIN clients ON alarms.clientid = clients.id 
        INNER JOIN alarmstype ON alarms.typeid = alarmstype.id
        WHERE alarms.alarmstatus = 'ON' ORDER BY alarms.date ASC";
$result = mysql_query($sql);

行ごとに、whileループでボタンを割り当てました:

      while ($row = mysql_fetch_array($result)) {
      print "<tr>
      <td>" . $row['date'] . "</td>
      <td>" . $row['number'] . " | " . $row['name'] . "</td>
<td>" . $row['controller'] . "</td>
    <td>" . $row['type'] . "</td>
    <td style='color: red'>
        <select name = 'statusupdate' style='font-size:10px;'>
          <option> " . $row['alarmstatus'] . " </option>
            <option> OFF </option>
        </select>
      </td>
            <td>" . $row['starttime'] . "</td>
            <td>" . $row['endtime'] . "</td>
            <td><input type='submit' name='delete' value='delete' /></td>

ここまでは順調ですね。行は正常に表示され、ボタンはそこにあります。(すべての while ループはフォーム タグ内にあるため、入力はクールです。とにかく。次のようなものを作成したい:

 }
    if (isset($_POST['delete'])) {
      delete_alarm_from_database($alarmid)
    }

関数は次のようになります。

function delete_alarm_from_database($id) {
  //find alarm by id and delete:
  $sql = "SELECT * FROM alarms WHERE id = " . $id;
  $result = mysql_result($sql);
  if (!$result) {
    print "couldn't find record.";
  }
  //delete record from database:
  else {
    $sql = "DELETE FROM alarms WHERE id = " . $id;
    $result = mysql_result($sql);
  }
}

私の問題は次のようになります。各行にはIDがありますが、変数として設定すると、ループが到達した最後のIDを変数に入れるまで常に上書きされます。(つまり、各行のすべての削除ボタンは、ページの読み込みごとに最後の ID を削除するだけです)

質問はこのようなものです。各削除ボタンに行IDを認識させるにはどうすればよいですか?

前もって感謝します-乾杯。

4

3 に答える 3

1

レコードごとに個別のフォームを使用する必要があります。

 While ($row=mysql_fetch_array($result)){

  <form method="post" .....>
   .....
   <select>
         <option value="'.$value.'">title</option>
   </select>
   .....

  </form>
 }
于 2012-05-25T18:00:31.400 に答える
1

各ボタンに ID を追加します。そして、その ID で呼び出します。おそらく、jQuery を使用するのが最も効果的です。このようにして、ボタンの正確な番号を知ることができます:)

これを見てください - それは一種の同じ問題です - PHP - フォーム入力からIDを使用してswitchステートメントを作成する

于 2012-05-25T18:00:50.213 に答える
1

プロセスを少し変更することをお勧めします。削除ボタンをチェック ボックスに変更し、ユーザーが一度に複数を削除できるようにします。

変化する

<td><input type='submit' name='delete' value='delete' /></td>

<td><input type='checkbox' name='ids_to_delete[]' value='<?php echo $row['id']; ?>' /></td>

Delete次に、テーブルの最後に新しいボタンを追加します

<input type='submit' name='delete' value='Delete selected rows' />

今すぐ値の配列を処理するように PHP を変更してください

if (isset($_POST['ids_to_delete']) && count($_POST['ids_to_delete']) > 0) {
    foreach($_POST['ids_to_delete'] as $alarmid) {
        delete_alarm_from_database($alarmid)
    }
}

またはさらに良い-delete_alarm_from_database配列を処理するように関数を変更し、それらを一度に削除します。

于 2012-05-25T18:05:57.890 に答える