2012-05-25 3 views
0

ранее я поставил вопрос о получении одного постоянного значения из цикла и использовать его вне цикла (ссылка: Question). теперь я столкнулся с другой проблемой с другим циклом while. это выглядит следующим образом: у меня есть запрос:PHP, получающий переменные вне цикла 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); 

и для каждой строки я assinged кнопку в то время цикла:

 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> 

до сих пор так хорошо. Строки отображаются в порядке и кнопка там. (все время цикла находится в виде тега так входы круто любым способом я хочу сделать что-то вроде этого:..

} 
    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); 
    } 
} 

моя проблема заключается в следующем: Каждая строка имеет идентификатор, но, устанавливая его как переменную, всегда будет переписываться до тех пор, пока он не поместит в переменную последний идентификатор, полученный циклом. (Что означает, что каждая кнопка удаления каждой строки просто удаляет последний идентификатор каждый page load)

вопрос такой. как я могу заставить каждую кнопку удаления распознать идентификатор строки?

спасибо заранее - приветствия.

ответ

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, чтобы обрабатывать массив и удалять их все сразу.

+0

Благодарим вас за ответ, вы подходите к моему решению. подумал, что у него есть небольшая проблема. если вы нажмете кнопку «Удалить», не проверив ничего, что вызывает ошибку, он даже не установил $ _POST ['ids ...'], поэтому он выдал неопознанный индекс.поэтому я немного изменил вашу идею php, чтобы она работала: вместо того, чтобы считать, что я обрабатываю ее с isset для сообщения ids внутри isset для submit. приветствует спасибо. – FedeSc

1

Вам необходимо использовать отдельную форму для каждой записи.

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

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

    </form> 
} 
1

Добавить идентификатор для каждой кнопки. И назовите его этим id, вероятно, лучшим криком, использующим jQuery. Таким образом, вы будете знать точно No. кнопки :)

Взгляните на это - это вид те же проблемы - PHP - making a switch statement using id from form input

Смежные вопросы