Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP/MySQL - Wie generiert man automatisch einen Löschlink für eine Zeile in einer bereits automatisch generierten Tabelle?

Ändern Sie dies

<a href='#'><span class='delete'>

zu

<a href='deletepage.php?id=" . $row["ID"] . "'><span class='delete'>

dann auf "deletepage.php", wie auch immer Sie diese Seite nennen werden, tun Sie so etwas wie

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

Ich weiß nicht, welchen Treiber Sie hier verwenden, aber die bevorzugte Lösung wäre die Verwendung einer vorbereiteten Anweisung mit einer parametrisierten Abfrage.

Sie senden also so ziemlich die id über ein GET Parameter zu Ihrer "Löschseite". Diese Seite nimmt diesen Wert und wandelt ihn in einen int um um SQL-Injections zu vermeiden (lesen Sie weiter unten) und löscht dann die Daten. Anstatt einen Erfolg zurückzugeben, könnten Sie auch einen header verwenden um sie auf die vorherige Seite umzuleiten. Sie könnten ein GET anhängen Parameter zu dieser URL zeigt eine Erfolgsmeldung an. (oder Sie könnten all dies immer auf derselben Seite tun und einfach prüfen, ob die id wird gesendet).

Außerdem sollten Sie diese Seite hinter einem sicheren Anmeldesystem haben. Sie möchten nicht, dass ein Benutzer/Bot diese deletepage.php ausführen kann .

Wie kann ich die SQL-Injection in PHP verhindern?
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

Ich vermute, Sie verwenden mysqli Schauen Sie sich also dieses Dokument für vorbereitete Anweisungen mit diesem Treiber an, http ://php.net/manual/en/mysqli.quickstart.prepared-statements.php .