Invalid parameter number : parameter was not defined...

Résolu/Fermé
Zeptron - Modifié par jordane45 le 23/12/2014 à 18:08
 Zeptron - 23 déc. 2014 à 20:09
Bonsoir, j'ai un problème, c'est cette erreur.

L'erreur complète est :

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp\www\senek\verification.php on line 42.


Le code ( sur 2 pages ) :

Première page :

<!DOCTYPE html>
<html>
 <head>
    <meta charset = "utf-8" />
 <title> Inscription pour notre jeu </title>
 </head>
 
 <body>
  <p> Remplissez les informations qui vous sont demandées ci-dessous pour créer votre compte. </p>
  <form method="post" action="verification.php" >
  <p> Pseudo :
      <input type="text" name ="pseudo" /> <br />
   Mot de passe :
   <input type="password" name="password" /> <br />
   Retapez votre mot de passe :
   <input type="password" name="verifier" /> <br />
   Votre age :
   <input type="number" name="age" /> <br />
   Votre email :
   <input type="text" name="email" /> <br />
   Votre pays :
   <input type="text" name="lieu" /> <br />
   <input type="submit" value="valider" />
   </p>
   </form>
   
</body>

</html>    



Deuxième page ( où il y a le problème ) :

<!DOCTYPE html>
<html>
 <head>
    <meta charset = "utf-8" />
 <title> Vérification pour le nouveau compte </title>
 </head>
 
 <body>
 <?php 
 if ($_POST['password'] != $_POST['verifier'])
         { 
    ?>
    <p>
    Vous avez surement mal écrit votre mot de passe <br />
    Désolé, mais vous devez revenir sur le lien d'inscription : <a href="pageinscription.php"> Crée un compte </a>
    </p>
    <?php
    exit(0);
          }    
   else
        {   
    if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#",$_POST['email']))
            {
              ?>  
     <p> Votre compte a bien été crée <br />
       Merci d'avoir de l'attention pour notre jeu <br />
    Je vous prie d'aller vers la page d'accueil : <a href="accueil.php" > Commencez à jouer </a>
    </p>
    <?php
    $pseudo = $_POST['pseudo'];
    $password = $_POST['password'];
    $age = $_POST['age'];
    $email = $_POST['email'];
    $lieu = $_POST['lieu'];
    $bdd = new PDO('mysql:host=localhost;dbname=membres' , 'root', '');
     $req = $bdd->prepare('INSERT INTO membres(pseudo,password,age,email,lieu) VALUES(:pseudo,:password,:age,:email,:lieu)');
      $req->execute(array(
            $_POST['pseudo'] => $pseudo,
            $_POST['password'] => $password,
   $_POST['age'] => $age,
            $_POST['email'] => $email,
     $_POST['lieu'] => $lieu)); 
    exit(0);
    
            }
          else
           {
            ?>
   <p> Votre adresse mail n'est pas valide ! <br />
   Désolé, mais vous devez revenir sur le lien d'inscription : <a href="pageinscription.php"> Crée un compte </a>
   </p>
   <?php
   exit(0);
            }
  }
   ?>

    
    
  </body>
</html>





L'erreur est là où il a le gras, cependant je ne vois pas l'erreur que j'ai fait.

Ps : ma table a exactement les mêmes valeurs.

EDIT : Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

1 réponse

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié par jordane45 le 23/12/2014 à 18:19
Bonjour,

1 - J'ai édité ton message pour y ajouter les balises de code.
merci d'y penser la prochaine fois.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

2 - Ton message d'erreur.. indique la LIGNE 42 de ton fichier...C:\wamp\www\senek\verification.php
DOnc..
Le souci se trouve à ces lignes là :
  $req = $bdd->prepare('INSERT INTO membres(pseudo,password,age,email,lieu) VALUES(:pseudo,:password,:age,:email,:lieu)');
      $req->execute(array(
            $_POST['pseudo'] => $pseudo,
            $_POST['password'] => $password,
   $_POST['age'] => $age,
            $_POST['email'] => $email,
     $_POST['lieu'] => $lieu)); 


C'est on ExecuteArray qui n'est pas bon...
Que viennent faire les $_POST dans ce tableau ??

La bonne Syntaxe serait :

   $req->execute(array(
            ':pseudo' => $pseudo,
            ':password' => $password,
            ':age'=> $age,
            ':email'=> $email,
            ':lieu' => $lieu)
           ); 


Bien entendu... l'idéal étant d'alimenter tes variables : $pseudo $password.. à partir des POST.. (AVANT DE FAIRE LE EXECUTE )
donc comme ceci
$pseudo    = isset( $_POST['pseudo'])? $_POST['pseudo']:'';
$password =isset($_POST['password'])?$_POST['password']:'';
// etc....



Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
1
Merci beaucoup
0