J'ai besoin de votre aide. J'ai un formulaire d'inscription et j'ai cette erreur qui me casse pas mal les pieds:
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp64\www\rrr\site_V3 FIN\cible_inscription.php on line 114
Voilà mon code:
<?php
$bdd = new PDO('mysql:host=localhost;dbname=spaceexplora', 'root', '');
//Vérification de la validité des informations
$_POST['nom'] = htmlspecialchars($_POST['nom']); //Sécurité : rend les balises html innofensive
$login = $_POST['nom'];
$query = $bdd->query("SELECT nom FROM membres WHERE nom = '$login'");
$count = $query->rowCount();
if($count == 1)
{
// nom déjà utilisé
$verif_nom = 0;
}
else
{
// nom libre
$verif_nom = 1;
}
$_POST['email'] = htmlspecialchars($_POST['email']); //Sécurité : rend les balises html innofensive
if (preg_match("#[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['email']))
{
$verif_email = 1;
}
else
{
$verif_email = 0;
}
$_POST['MDP'] = htmlspecialchars($_POST['MDP']);
$_POST['MDP2'] = htmlspecialchars($_POST['MDP2']);
$verif_pass = 1;
if($_POST['MDP'] == $_POST['MDP2'])
{
$verif_pass = 1;
}
else
{
$verif_pass = 0;
}
//Insertion
$prénom = $_POST['prénom'];
$nom = $_POST['nom'];
$email = $_POST['email'];
$pass_hache = $_POST['MDP'];
$query2 = $bdd->query("SELECT email FROM membres WHERE email = '$email'");
$count2 = $query2->rowCount();
if($count2 == 1)
{
// nom déjà utilisé
$verif_email = 0;
}
else
{
// nom libre
$verif_email = 1;
}
if($verif_nom == 0)
{
echo 'Le pseudo est déjà pris. Veuillez recommencez l\'inscrition en choississant un nouveau pseudo';
}
else
{
if($verif_email == 0)
{
echo 'L\'adresse email est incorrecte ou dejà utilisée, veuillez recommencez l\'inscription';
}
else
{
if($verif_pass == 0)
{
echo 'Les mots de passe ne sont pas identique, veuillez recommencez l\'inscription';
}
else
{
$req = $bdd->prepare('INSERT INTO membres(prénom, nom, email, MDP) VALUES (:prénom, :nom, :email, :MDP)');
$req->execute(array(
'prénom' => $prénom,
'nom' => $nom,
'email' => $email,
'MDP' => $pass_hache));
echo'Inscription réussi, bienvenue sur notre site';
}
}
}
?>
La ligne 114 correspond au array, Le 'MDP' => $pass_hache));
Pas d'accent dans les noms des marqueurs ! En colonne aussi, surtout que tu ne précises même pas un jeu de caractère pour la connexion MySQL.
Pourquoi toutes tes requêtes ne sont pas préparées ? Tu as des injections SQL sur tes SELECT ...
Et puis c'est pareil, comme ton commentaire l'indique lui-même, ces htmlspecialchars n'ont rien à faire là : à quoi bon protéger du HTML quand tu utilises ta donnée pour du SQL ?!?
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli