Mysql
 sql >> Database >  >> RDS >> Mysql

PHP/MySQL:come generare automaticamente il collegamento di eliminazione per una riga in una tabella già generata automaticamente?

Cambia questo

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

a

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

quindi su "deletepage.php", qualunque cosa chiamerai quella pagina, fai qualcosa del tipo

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

Non so quale driver stai usando qui, ma la soluzione preferita sarebbe l'utilizzo di un'istruzione preparata con una query parametrizzata.

Quindi praticamente invii l'id tramite un GET parametro alla tua "cancella pagina". Quella pagina prende quel valore, lo lancia su un int per evitare iniezioni SQL (leggi più avanti), quindi elimina i dati. Potresti anche usare un header invece di fare eco a un successo per reindirizzarli alla pagina precedente. Puoi aggiungere un GET parametro a quell'URL visualizza un messaggio di successo. (oppure potresti sempre fare tutto questo sulla stessa pagina e controllare semplicemente se il id viene inviato).

Inoltre dovresti avere questa pagina dietro il sistema di accesso sicuro di qualcuno. Non vuoi che nessun utente/bot sia in grado di eseguire quel deletepage.php .

Come posso prevenire l'SQL injection in 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

Immagino tu stia usando mysqli quindi dai un'occhiata a questo documento per le istruzioni preparate con quel driver, http ://php.net/manual/en/mysqli.quickstart.prepared-statements.php .