2014-01-29 5 views
-1

Этот код теперь обновляет каждую строку данных отдельно, если нажата кнопка отправки.ANSWERED: Форма обновляет базу данных правильно

Первоначальная проблема заключалась в том, что я не мог получить каждую запись, обновленную индивидуально, и она обновляла ВСЕ строки, а не только те, которые соответствуют ID, который я хотел.

СОЕДИНЕНИЯ STUFF

<form method='post'>"; 

$query="SELECT * FROM table WHERE approved='no'"; 
$result = mysql_query($query) or die(mysql_error()); 

$count = mysql_num_rows($result); 
echo "<p>$count pending approval.</p>"; 

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 

$id=$row['id']; 
$name = $row['name']; 
$extra = $row['extra']; 

echo " 
<table> 
<tr> 
    <td>ID:</td> 
    <td>$id <input type='hidden' name='id[]' value='$id'></td> 
</tr> 
<tr> 
    <td>Name:</td> 
    <td>$name <input type='hidden' name='name[]' value='$name'></td> 
</tr> 
<tr> 
    <td>Extra:</td> 
    <td>$extra <input type='hidden' name='extra[]' value='$extra'></td> 
</tr> 
<tr colspan='2'> 
    <td> 
    <center><input name='submit' type='submit' value='Approve'></form></center> 
    </td> 
</tr> 
</table><br> 
";} 

if($_POST['submit']) { 
$update = "UPDATE table SET approved='yes' WHERE id='$id' LIMIT 1"; 
if(mysql_query($update)) $count++; 
else die("Error in query:<br>$sql<br>"); 

echo "<p><b>$name has been approved</b></p>"; 
} 
?> 
+0

попытаться изменить переменную $ ID в запросе на $ _POST [ «ID»] – kraysak

+0

@ ld04 пожалуйста, отметьте ответ, как принято, если вы считаете, ваш вопрос ответил (как это следует из названия edit) – RyanS

ответ

0

Вы должны переместить оператор обновления вне while (($i < $num)) {...}. В настоящее время это находится внутри цикла ...

0

Вы перебираете каждую строку, а затем проверяете, была ли нажата кнопка отправки, и если это обновление строки.

Проблема в том, что вы не определяете, какая кнопка была нажата, и поэтому каждая строка обновляется при нажатии любой кнопки. Попробуйте это:

if (isset($_POST['accepted']) && isset($_POST['id']) && $_POST['id'] == $id) 

Это будет проверять, если занесена форма соответствует текущей строке

0

Виноваты здесь:

... 
<?php 
if (isset($_POST['accepted'])) { 
    $query_update = "UPDATE mytable SET accepted='yes' WHERE id ='$id'"; 
    $result_update=mysql_query($query_update);} 
    $i++; 
} 
mysql_close(); 

?> 
.... 

$i является запуск vairable перебрать ВСЕ строк. он увеличивается только тогда, когда установлен $_POST['accepted']. И в этом конкретном случае он генерирует обновление для каждого и вырабатывает одну строку с $id, которая поступает из базы данных вместо текущей POST.

Таким образом: все записи будут обновлены.

Modfify:

... 
<?php 
if (isset($_POST['accepted']) && isset($_POST['id'])) { 
    $updateId = $_POST['id']; 
    $query_update = "UPDATE mytable SET accepted='yes' WHERE id ='$updateId '"; 
    $result_update=mysql_query($query_update); 
    mysql_close(); 
} 

$i++; 
?> 
.... 
+0

Я ДУМАЮ. Что вы неправильно поняли это, есть закрывающая скобка в той же строке, что и запрос на обновление, это должно закрыть оператор if. Тогда i ++ находится в цикле, и следующая скобка закрывает цикл while – RyanS

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