У меня есть PHP-скрипт, который читает таблицу базы данных и вставляет все строки в таблицу HTML, пока не отобразит все доступные строки, как показано здесь:
require_once('dbconnect.php'); $sql = "SELECT ID, Site, Type, Requested, Quote, PO, CADs, MCS, DFP, SIM, Prereqs, Design, Report, Delivered FROM Predictions"; $result = $conn->query($sql); if ($result->num_rows > 0) { echo '<table class="table table-hover table-condensed">'; while($row = $result->fetch_assoc()) { echo '<tbody>'. '<tr>'. '<td>'.$row['ID'].'</td>'. '<td>'.$row['Site'].'</td>'. '<td>'.$row['Type'].'</td>'. '<td>'.$row['Requested'].'</td>'. '<td>'.$row['Quote'].'</td>'. '<td>'.$row['PO'].'</td>'. '<td>'.$row['CADs'].'</td>'. '<td>'.$row['MCS'].'</td>'. '<td>'.$row['DFP'].'</td>'. '<td>'.$row['SIM'].'</td>'. '<td>'.$row['Prereqs'].'</td>'. '<td>'.$row['Design'].'</td>'. '<td>'.$row['Report'].'</td>'. '<td>'.$row['Delivered'].'</td>'. '<td>'. '<a href="#">'. '<span class="edit"><i class="fa fa-pencil"></i></span>'. '</a> | <a href="#">'. '<span class="delete"><i class="fa fa-times"></i></span>'. '</a>'. '</td>'. '</tr>'. '</tbody>'; } echo "</table>"; } else echo "0 results"; $conn->close();
Все работает нормально, но теперь я хочу иметь, по сути, кнопку удаления (вы можете увидеть разметку выше, которая создает значок / ссылку), которая будет автоматически заполняться, чтобы соответствовать соответствующему ID для таблицы базы данных mysql. Изображение таблицы для визуального представления о том, что я собираюсь сделать.
Мой сценарий удаления пока ниже, но я понятия не имею, что помещать в «WHERE id =», или как включить его в свой первый скрипт после его правильной настройки.
<?php require_once('dbconnect.php'); $sql = "DELETE FROM Predictions WHERE id="; if($conn->query($sql) === TRUE) echo "Item deleted successfully"; else echo "Error deleting record; ". $conn->error; $conn->close();
Поэтому в основном мне нужен совет, чтобы изменить оба этих сценария, чтобы в первом скрипте была создана ссылка удаления (или форма, мне все равно), а затем применяет второй скрипт и знает соответствующий идентификатор для использования. В моем поиске для решения этой проблемы я видел некоторые потенциальные решения, использующие _GET, но в том же потоке другие говорили, что на самом деле это очень плохое и небезопасное решение. Поэтому я очень смущен!
Я изучаю PHP, когда я ухожу, и я только собираюсь на него около двух дней, поэтому, пожалуйста, помилуй 🙂
Изменить это
<a href='#'><span class='delete'>
в
<a href='deletepage.php?id=" . $row["ID"] . "'><span class='delete'>
затем на «deleteepage.php», что бы вы ни назвали этой страницей,
require_once('dbconnect.php'); $id = (int)$_GET['id']; $sql = "DELETE FROM Predictions WHERE id=" . $id; if($conn->query($sql) === TRUE) { echo "Item deleted successfully"; } else { echo "Error deleting record; ". $conn->error; } $conn->close();
Я не знаю, какой драйвер вы используете здесь, но предпочтительным решением будет использование подготовленного оператора с параметризованным запросом.
Поэтому в значительной степени вы отправляете id
через параметр GET
на свою страницу удаления. Эта страница принимает это значение, передает его в int
чтобы избежать инъекций SQL (см. Далее ниже), а затем удаляет данные. Вы также можете вместо эха успеха использовать header
чтобы перенаправить их на предыдущую страницу. Вы можете добавить параметр GET
чтобы этот URL отображал сообщение об успешном завершении. (или вы всегда можете сделать все это на одной странице и просто проверить, отправляется ли id
).
Также вы должны иметь эту страницу за защищенной системой входа в систему. Вы не хотите, чтобы какой-либо пользователь / бот мог выполнить это deletepage.php
.
Как я могу предотвратить SQL-инъекцию в PHP?
http://php.net/manual/en/security.database.sql-injection.php
https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet#Defense_Option_1:_Prepared_Statements_.28Parameterized_Queries.29
Я предполагаю, что вы используете mysqli
поэтому mysqli
с этим документом для подготовленных операторов с этим драйвером, http://php.net/manual/en/mysqli.quickstart.prepared-statements.php .