Source php

Bonjour,

<?php
 try {
  $connect= new PDO("mysql:host=localhost; dbname=donnees; charset=utf8", 'root', '');
  $connect->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
  if ($connect) {
   echo "reussie!";
  }
 $nom=htmlspecialchars($_POST['nom']);
 $prenom=htmlspecialchars($_POST['prenoms']);
 $email=htmlspecialchars($_POST['email']);
 $daten=htmlspecialchars($_POST['daten']);
 $fonction=htmlspecialchars($_POST['fonction']);
 $matricule=htmlspecialchars($_POST['matricule']);
 $mot_passe=sha1($_POST['password']);
 $confirmation=sha1($_POST['mdp']);

 $requete=$connect->prepare("INSERT INTO coordonnees(nom, prenoms, email, date_n, fonction, matricule, mot_passe, confirmation) VALUES (:nom, :prenoms, :email, :daten, :fonction, :matricule, :password, :mdp)");
 $requete->execute(array('nom' => $nom ,
       'prenom' => $prenom ,
       'email' => $email ,
       'daten' => $daten ,
       'fonction' => $fonction ,
       'matricule' => $matricule ,
       'password' => $mot_passe ,
       'mdp' => $confirmation ,));
  
 } catch (Exception $e) {
  die('ERROR :' .$e->getMessage());
  
 }


 ?>


ci-dessous le message d'erreur

ERROR :SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

EDIT : Ajout des balises de code

2 réponses

  1. Contributeur
    Bonjour.
    Seydou répond ici ;)
    https://www.commentcamarche.net/forum/affich-35962386-remerciment
    1. Modérateur
      Bonjour,

      Il y aurait beaucoup de choses à dire sur ton code....
      Comme le fait qu'on n'utilise PAS la fonction htmlspecialchar pour insérer des données ( on ne s'en sert que pour de l'affichage !! )

      mais déjà, concernant l'erreur.... c'est du au fait que tu n'as pas utilisé les même noms de variables dans la requete ET dans l'array de l'execute...

      Voici
      $sql = "INSERT INTO coordonnees(nom, prenoms, email, date_n, fonction, matricule, mot_passe, confirmation) 
      VALUES (:nom, :prenoms, :email, :daten, :fonction, :matricule, :password, :mdp)";
      $datas = array(
             ':nom' => $nom ,
             ':prenoms' => $prenom ,
             ':email' => $email ,
             ':daten' => $daten ,
             ':fonction' => $fonction ,
             ':matricule' => $matricule ,
             ':password' => $mot_passe ,
             ':mdp' => $confirmation
      	 );
      
      try{
         $requete=$connect->prepare($sqm);
         $requete->execute($datas);
      }catch (Exception $e) {
         die('ERROR :' .$e->getMessage()); 
      }
      


      et on n’utilise pas le sha1 pour les passwords !
      Désormais il faut passer par password_verify et password_hash.
      (pour que ça fonctionne correctement il faut une version php supérieur à 5.5 )
      https://www.php.net/manual/fr/function.password-hash.php

      Dans l'idéal, on travaille désormais en php 7 ( 7.3 ) qui est trois fois plus rapide que la version php 5