Fatal Error

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

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    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                                                                 
    1. Merci Jordane, cela va beaucoup m'aider. je vais essayer et te faire un retour. Merci encore