Я пытаюсь удалить строки, выбранные с флажками с кодом PHP - PullRequest
0 голосов
/ 06 июля 2011

Я пытаюсь удалить строки, отмеченные флажками с кодом php. html part

<form action="maincontrol.php" name="control" method="post">
<?php
require('dbconnect.php');

$result = mysql_query("SELECT * FROM soru");

echo "<table border='1' id='tumveriler'>
<tr>
<th></th>
<th>Index</th>
<th>Soru</th>
<th>Sorma Tarih</th>
<th>Cevap</th>
<th>Cevaplama Tarih</th>
</tr>";

while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . "<input name='checkbox' type='checkbox' value='" . $row['index'] . "'" . " />";
  echo "<td>" . $row['index'] . "</td>";
  echo "<td>" . $row['soru'] . "</td>";
  echo "<td>" . $row['sormadate'] . "</td>";
  echo "<td>" . $row['cevap'] . "</td>";
  echo "<td>" . $row['cevapdate'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

mysql_close($con);

?>
<input type= "submit" name ="update" value="Update">
</form>

php part

<?php
  require('dbconnect.php');

  if (isset($_POST['control']) && !empty($_POST['checkbox'])) {

    foreach($_POST['checkbox'] as $id) 

    {
        $query = "DELETE FROM soru WHERE `index` = '$id'";
        $link = mysql_query($query);

    if(!$link)
        {
        die('not worked: ' . mysql_error());
        }
        else
        {
        mysql_close($con);  
        echo 'worked';
        }


    }
  }

?>

Когда я нажимаю кнопку обновления, я вижу красивый белый экран. Ничего не происходит, никаких диалогов об ошибках ... Помогите!

Ответы [ 4 ]

2 голосов
/ 06 июля 2011

Две вещи:

  • Ваш код проверяет наличие $_POST['control'], которого нет в форме (по крайней мере, в той части, которую вы разместили)
  • Если вы хотите, чтобы данные флажка были представлены в виде массива, вам необходимо использовать обозначение массива для формы:

    <input type="checkbox" name="checkbox[]" ...etc

в противном случае будет отправлен только последний проверенный элемент.

1 голос
/ 06 июля 2011

Как уже упоминали другие, когда ваши значения флажков являются массивом:

<input type="checkbox" name="checkbox[]" ...

Вы также можете упростить запрос к базе данных, чтобы удалить все записи одним запросом, используя предложение WHERE IN:

//  Input filtering - retrieve only int values from $_POST['checkbox']
$array = array_filter($_POST['checkbox'],'is_int');

//  Format array for SQL WHERE IN clause
$array = implode(',',$array);

$query = "DELETE FROM `soru` WHERE `index` IN ($array)";
1 голос
/ 06 июля 2011

Если вы хотите убедиться, что форма была отправлена, вместо использования isset($_POST['control']) (что не отправлено),

использовать

isset($_POST['update']), потому что кнопка отправки отправлена.

0 голосов
/ 06 июля 2011

Вот решение, согласно комментариям выше:

Ваша форма не содержит ввода с именем «control», но PHP, который обрабатывает удаление, имеет isset($_POST['control']). Оператор if, скорее всего, не выполняется. Кроме того, входные данные для флажков должны включать квадратные скобки, чтобы сообщить PHP, что это массив: <input name="checkbox[]" ... />.

В вашей форме измените строку, отражающую флажок, на echo "<td>" . "<input name='checkbox[]' type='checkbox' value='" . $row['index'] . "'" . " />";, и, если ваша форма не содержит поля с именем «control», удалите isset($_POST['control']) из оператора if, который содержится в удаляемом скрипте.

...