sql >> Base de Datos >  >> RDS >> Mysql

PHP/MySQL:¿cómo generar automáticamente un enlace de eliminación para una fila en una tabla ya generada automáticamente?

Cambiar esto

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

a

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

luego en "deletepage.php", como sea que vayas a llamar a esa página, haz algo como

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

No sé qué controlador está usando aquí, pero la solución preferida sería usar una declaración preparada con una consulta parametrizada.

Así que básicamente envías el id a través de un GET parámetro a su "página de eliminación". Esa página toma ese valor, lo convierte en un int para evitar inyecciones de SQL (lea más abajo) y luego elimina los datos. También podría, en lugar de hacer eco de un éxito allí, usar un header para redirigirlos a la página anterior. Podría agregar un GET parámetro a esa URL muestra un mensaje de éxito. (o siempre puede hacer todo esto en la misma página y simplemente verificar si el id se está enviando).

También debe tener esta página detrás de un sistema de inicio de sesión seguro. No desea que ningún usuario/bot pueda ejecutar ese deletepage.php .

¿Cómo puedo evitar la inyección de SQL en 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

Supongo que estás usando mysqli así que eche un vistazo a este documento para obtener declaraciones preparadas con ese controlador, http ://php.net/manual/en/mysqli.quickstart.prepared-statements.php .