Fatal Error

Camarasama Messages postés 33 Statut Membre -  
Camarasama Messages postés 33 Statut Membre -
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

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    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
    1. Camarasama Messages postés 33 Statut Membre
       
      Merci Jordane, cela va beaucoup m'aider. je vais essayer et te faire un retour. Merci encore
      0