Mysql
 sql >> Base de données >  >> RDS >> Mysql

PHP :insérer des valeurs du formulaire dans MySQL

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