Я пытаюсь удалить определенные строки из базы данных, используя несколько флажков. До сих пор мне удалось отобразить содержимое таблицы MySQL, но удаление строк с помощью флажков не работает.
<table class="ts"> <tr> <th class="tg-031e" style='width:1px'>ID</th> <th class="tg-031e">IP address</th> <th class="tg-031e">Date added</th> <th class="tg-031e">Reason</th> </tr> <?php include 'connect.php'; $SQL = "SELECT `ID`, `IPaddress`, `DateAdded`, `Reason` FROM `banned`"; $exec = mysql_query($SQL, $connection); while ($row = mysql_fetch_array($exec)){ echo "<tr class='tg-031h'>"; echo "<td class='tg-031e'><form method='post'><input type='checkbox' name='checkbox' value=" . $row['ID'] . "></form></td>"; echo "<td class='tg-031e'>" . $row['IPaddress'] . "</td>"; echo "<td class='tg-031e'>" . $row['DateAdded'] . "</td>"; echo "<td class='tg-031e'>" . $row['Reason'] . "</td>"; echo "</tr>"; } echo "</table><form method='post'><input name='delete' type='submit' value='Delete'></form>"; if (isset($_POST['delete']) && isset($_POST['checkbox'])) { foreach($_POST['checkbox'] as $id){ $id = (int)$id; $delete = "DELETE FROM banned WHERE ID = $id"; mysql_query($delete); } } ?>
Я не получаю никакого результата, поскольку чек не проходит, но я не знаю, что с ним не так. Запрос правильный, поэтому проблема должна заключаться в выборе флажков и получении их идентификатора.
Здесь он протестирован и работает при использовании mysqli_
вместо mysql_
Замените ваши собственные учетные данные.
Несколько вещей, ваш флажок действительно нуждался в квадратных скобках вокруг именованного элемента, как я упоминал в своих комментариях, то есть name='checkbox[]'
иначе вы получили бы неверную ошибку аргумента foreach
.
Sidenote: Здесь нужно немного форматировать, но это работает.
<table class="ts"> <tr> <th class="tg-031e" style='width:1px'>ID</th> <th class="tg-031e">IP address</th> <th class="tg-031e">Date added</th> <th class="tg-031e">Reason</th> </tr> <?php $DB_HOST = "xxx"; $DB_NAME = "xxx"; $DB_USER = "xxx"; $DB_PASS = "xxx"; $con = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); if($con->connect_errno > 0) { die('Connection failed [' . $con->connect_error . ']'); } $SQL = "SELECT `ID`, `IPaddress`, `DateAdded`, `Reason` FROM `banned`"; $exec = mysqli_query($con,$SQL); echo "<form method='post'>"; while ($row = mysqli_fetch_array($exec)){ echo "<tr class='tg-031h'>"; echo "<td class='tg-031e'><input type='checkbox' name='checkbox[]' value='" . $row[ID] . "'></td>"; echo "<td class='tg-031e'>" . $row['IPaddress'] . "</td>"; echo "<td class='tg-031e'>" . $row['DateAdded'] . "</td>"; echo "<td class='tg-031e'>" . $row['Reason'] . "</td>"; } echo "</tr></table>"; echo "<input name='delete' type='submit' value='Delete'></form>"; if (isset($_POST['delete']) && isset($_POST['checkbox'])) { foreach($_POST['checkbox'] as $id){ $id = (int)$id; $delete = "DELETE FROM banned WHERE ID = $id"; mysqli_query($con,$delete); } } ?>
Используйте mysqli_*
с подготовленными инструкциями или PDO с подготовленными инструкциями для этого.
Изменить: версия mysql_
<table class="ts"> <tr> <th class="tg-031e" style='width:1px'>ID</th> <th class="tg-031e">IP address</th> <th class="tg-031e">Date added</th> <th class="tg-031e">Reason</th> </tr> <?php include 'connect.php'; $SQL = "SELECT `ID`, `IPaddress`, `DateAdded`, `Reason` FROM `banned`"; $exec = mysql_query($SQL, $connection); echo "<form method='post'>"; while ($row = mysql_fetch_array($exec)){ echo "<tr class='tg-031h'>"; echo "<td class='tg-031e'><input type='checkbox' name='checkbox[]' value='" . $row[ID] . "'></td>"; echo "<td class='tg-031e'>" . $row['IPaddress'] . "</td>"; echo "<td class='tg-031e'>" . $row['DateAdded'] . "</td>"; echo "<td class='tg-031e'>" . $row['Reason'] . "</td>"; } echo "</tr></table>"; echo "<input name='delete' type='submit' value='Delete'></form>"; if (isset($_POST['delete']) && isset($_POST['checkbox'])) { foreach($_POST['checkbox'] as $id){ $id = (int)$id; $delete = "DELETE FROM banned WHERE ID = $id"; mysql_query($delete); } } ?>
Вы должны сделать что-то похожее на это (полу псевдо):
<form method="post"> /begin loop/ echo '<input type="checkbox" name="row[' . $row['ID'] . ']" />'; /end loop/ <input type="submit" /> </form>
Затем попробуйте поместить это на страницу процессора, поверх нее:
if ( !empty( $_POST ) ) { echo '<pre>' . print_r( $_POST, true ) . '</pre>'; die( 'see? :-)' ); }
, , , ,
Хорошо, вот ваш код, отредактированный:
<?php if ( !empty( $_POST ) ) { echo '<pre>'.print_r( $_POST, true ).'</pre>'; die( 'See?' ); ?> <form method="post"> <table class="ts"> <tr> <th class="tg-031e" style='width:1px'>ID</th> <th class="tg-031e">IP address</th> <th class="tg-031e">Date added</th> <th class="tg-031e">Reason</th> </tr> <?php include 'connect.php'; $SQL = "SELECT `ID`, `IPaddress`, `DateAdded`, `Reason` FROM `banned`"; $exec = mysql_query($SQL, $connection); while ($row = mysql_fetch_array($exec)){ echo "<tr class='tg-031h'>"; echo "<td class='tg-031e'><input type='checkbox' name='row[$row['ID']]'></td>"; echo "<td class='tg-031e'>" . $row['IPaddress'] . "</td>"; echo "<td class='tg-031e'>" . $row['DateAdded'] . "</td>"; echo "<td class='tg-031e'>" . $row['Reason'] . "</td>"; echo "</tr>"; } echo "</table><input name='delete' type='submit' value='Delete'>"; if (isset($_POST['delete']) && isset($_POST['checkbox'])) { foreach($_POST['checkbox'] as $id){ $id = (int)$id; $delete = "DELETE FROM banned WHERE ID = $id"; mysql_query($delete); } } ?> </form>
Запрос удаления еще не исправлен. Попытайтесь исправить это самостоятельно 🙂