Undefined index

Résolu
Bonjour, en débutent avec php je suis bloqué avec les requêtes préparés

voici le code :

*


<?php 


try 
{ 

$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; 
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', 
$pdo_options); 

$req = $bdd->prepare('SELECT nom, prix FROM jeux_video WHERE possesseur = ? AND prix <= ? ORDER BY prix'); 
$req->execute(array($_GET['possesseur'], $_GET['prix_max'])); 
echo '<ul>'; 
while ($donnees = $req->fetch()) 
{ 
echo '<li>' . $donnees['nom'] . ' (' . $donnees['prix'] . 'EUR)</li>'; 
} 
echo '</ul>'; 
$req->closeCursor(); 

} 
catch(Exception $e) 
{ 
die('Erreur : '.$e->getMessage()); 
} 
?> 


*

et l'erreur c'set la suiv:

( ! ) Notice: Undefined index: possesseur in C:\wamp\www\test\req_prepare.php on line 12
Call Stack
# Time Memory Function Location
1 0.0010 135672 {main}( ) ..\req_prepare.php:0

( ! ) Notice: Undefined index: prix_max in C:\wamp\www\test\req_prepare.php on line 12
Call Stack
# Time Memory Function Location
1 0.0010 135672 {main}( ) ..\req_prepare.php:0

*

Merci.

2 réponses

  1. Contributeur
    'lut, c'est juste que les dits paramètres GET ne sont pas présents... Penses bien a vérifier tes entrées avec des
    if
    et la fonction
    isset
    avant de faire tes requêtes.
    1. merci beaucoup.
  2. Modérateur
    <Bonjour,

    Voici le code "amélioré" :
    <?php 
    //-----------------------------------------------------------------------//
    //connexion à la BDD
    //-----------------------------------------------------------------------//
    try { 
      $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; 
      $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options); 
    } catch(Exception $e) { 
      die('Erreur : '.$e->getMessage()); 
    } 
    
    //-----------------------------------------------------------------------//
    // Traitement
    //-----------------------------------------------------------------------//
    //Récupération des variables AVANT de les utiliser
    $possesseur = !empty($_GET['possesseur']) ? $_GET['possesseur'] : NULL;
    $prix_max = !empty($_GET['prix_max']) ? $_GET['prix_max'] : NULL;
    
    if($possesseur && $prix_max ){ 
    // si les variables existents et ne sont pas vides 
     try{
       $sql = "SELECT nom, prix FROM jeux_video 
           WHERE possesseur = :possesseur 
           AND prix <= :prix 
           ORDER BY prix";
           
      $params=array(":possesseur"=>$possesseur , ":prix"=> $prix_max);     
      
      $req = $bdd->prepare($sql); 
      $req->execute($params); 
      
      //on stocke le résultat de la requête dans un array
      $arr_result = $req->fetchAll();
      $req->closeCursor();  
     } catch(Exception $e) { 
      die('Erreur : '.$e->getMessage()); 
     } 
    
     // Si la requête a retourné qqchose :
     if(count($arr_result)>0){
      echo '<ul>'; 
      foreach($arr_result as $R){
       echo '<li>' . $R['nom'] . ' (' . $R['prix'] . 'EUR)</li>'; 
       } 
      echo '</ul>'; 
     }
    }else{
     echo "<br>Erreur ; Une ou plusieurs variables sont manquantes !";
     echo " <br> - possesseur : $possesseur ";
     echo " <br> - prix_max : $prix_max "; 
    }
    
    


    .. si tu reçois un message d'erreur "Une ou plusieurs variables sont manquantes" .. c'est que tu ne passes rien dans ton $_GET ... ou que tes variables n'ont pas le "bon" nom ...
    Dans ce cas .. fais un
    print_r($_GET);
    au début de ton script pour voir ce que cette variable contient......
    (et si elle est vide... c'est que le souci vient de la page qui appelle ce code....)

    Cordialement,
    Jordane
    1. Merci beaucoup Mr Jordan pour ce code bien améliorer ,le problème a été regelé.