Le code suivant déclare simplement une variable de chaîne contenant une requête MySQL :
$sql = "INSERT INTO users (username, password, email)
VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
Il n'exécute pas la requête. Pour ce faire, vous devez utiliser certaines fonctions, mais laissez-moi d'abord vous expliquer autre chose.
NE JAMAIS FAIRE CONFIANCE AUX ENTRÉES UTILISATEUR :Vous ne devez jamais ajouter une entrée utilisateur (telle qu'une entrée de formulaire à partir de $_GET
ou $_POST
) directement à votre requête. Quelqu'un peut manipuler soigneusement l'entrée de telle manière qu'elle puisse causer de gros dommages à votre base de données. C'est ce qu'on appelle l'injection SQL. Vous pouvez en savoir plus à ce sujet ici
Pour protéger votre script d'une telle attaque, vous devez utiliser des déclarations préparées. Plus d'informations sur les déclarations préparées ici
Incluez des instructions préparées dans votre code comme ceci :
$sql = "INSERT INTO users (username, password, email)
VALUES (?,?,?)";
Remarquez comment le ?
sont utilisés comme espaces réservés pour les valeurs. Ensuite, vous devez préparer la déclaration en utilisant mysqli_prepare
:
$stmt = $mysqli->prepare($sql);
Commencez ensuite à lier les variables d'entrée à l'instruction préparée :
$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);
Et enfin exécuter les instructions préparées. (C'est là que l'insertion proprement dite a lieu)
$stmt->execute();
REMARQUE Bien que cela ne fasse pas partie de la question, je vous conseille fortement de ne jamais stocker les mots de passe en texte clair. Au lieu de cela, vous devez utiliser password_hash
pour stocker un hachage du mot de passe