Il codice seguente dichiara semplicemente una variabile stringa che contiene una query MySQL:
$sql = "INSERT INTO users (username, password, email)
VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
Non esegue la query. Per farlo devi usare alcune funzioni, ma lascia che prima ti spieghi qualcos'altro.
NON FIDARTI MAI DELL'INPUT DELL'UTENTE :Non dovresti mai aggiungere l'input dell'utente (come l'input del modulo da $_GET
o $_POST
) direttamente alla tua domanda. Qualcuno può manipolare con cura l'input in modo tale che possa causare gravi danni al database. Si chiama SQL injection. Puoi leggere di più a riguardo qui
Per proteggere il tuo script da un simile attacco devi utilizzare le dichiarazioni preparate. Maggiori informazioni sulle dichiarazioni preparate qui
Includi istruzioni preparate nel tuo codice in questo modo:
$sql = "INSERT INTO users (username, password, email)
VALUES (?,?,?)";
Nota come il ?
vengono utilizzati come segnaposto per i valori. Quindi dovresti preparare la dichiarazione usando mysqli_prepare
:
$stmt = $mysqli->prepare($sql);
Quindi inizia ad associare le variabili di input all'istruzione preparata:
$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);
E infine eseguire le istruzioni preparate. (Qui è dove avviene l'inserimento vero e proprio)
$stmt->execute();
NOTA Sebbene non faccia parte della domanda, ti consiglio vivamente di non memorizzare mai le password in chiaro. Invece dovresti usare password_hash
per memorizzare un hash della password