Fatal Error

Camarasama Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   -  
Camarasama Messages postés 31 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Etant debutant, je sollicite votre aide a la resolution de mon probleme en PHP

j'ai l'erreur suivante:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in C:\xampp\htdocs\gnfs\Action.php:21 Stack trace: #0 C:\xampp\htdocs\gnfs\Action.php(21): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\gnfs\Action.php on line 21

mon html est le suivant:
<form name="All" method="post" action="Action.php">          
            <label>Username:
              <input type="text" name="u_name" id="u_name">
            </label>          
          
            <label>Staff ID
              <input type="password" name="st_id" id="st_id">
            </label>
            Login
            <input type="submit" name="sub" id="sub" value="Login">
</form>

et mon php est le suivant:
<?php
// Connexion to BDD
try
{
$bdd = new PDO('mysql:host=localhost;dbname=newfire', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
// End of connexion

// Vérification des identifiants

$u_name = htmlspecialchars($_POST['u_name']);
$st_id = htmlspecialchars($_POST['st_id']);

$req = $bdd->prepare('SELECT ID FROM personnel_info WHERE username = :u_name AND staff_id = :st_id');

$req->execute(array( 
'username' => $u_name, 
'staff_id' => $st_id));


$resultat = $req->fetch(); 


if (!$resultat)
{ 
echo 'Mauvais identifiant ou mot de passe !';}

else{ 
echo 'OK';}

?> 

j'ai aussi joint une capture d'ecran de mon code

php





EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.




Merci pour votre aide

1 réponse

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

1 - Pour poster du code sur le forum.. merci d'utiliser la coloration syntaxique (les balises de code).
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code


2 -
$req = $bdd->prepare('SELECT ID FROM personnel_info WHERE username = :u_name AND staff_id = :st_id');

$req->execute(array( 
'username' => $u_name, 
'staff_id' => $st_id));

A remplacer par :

//preparation de la requete et des variables
$sql = 'SELECT ID 
           FROM personnel_info 
           WHERE username = :username 
               AND staff_id = :st_id' ;

$a_datas = array( ':username' => $u_name, ':st_id' => $st_id);

//execution de la requete
try{
   $req = $bdd->prepare($sql);
   $req->execute($a_datas);
}catch(Exception $e){
    echo "Erreur ! ".$e->getMessage();
}


Avec cette syntaxe .. seuls les variables $sql et $a_datas sont à changer lorsque tu en as besoin.. le bloc TRY/CATCH qui exécute la requête reste toujours identique et permet d'avoir les messages d'erreurs en cas de souci.


PS: Ton souci venait du fait que le nom des variables contenues dans l'array étaient différents de ceux utilisés dans la requête !!!


Cordialement, 
Jordane                                                                 
0
Camarasama Messages postés 31 Date d'inscription   Statut Membre Dernière intervention  
 
Merci Jordane, cela va beaucoup m'aider. je vais essayer et te faire un retour. Merci encore
0