Undefined index

VitalyLG Messages postés 3 Statut Membre -  
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'ai eu un problème suivant sous MAMP:

code:

<?php
try
{
$bdd = new PDO('mysql:host=localhost;port=8889;dbname=test;charset=utf8', 'root', 'root', array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
}
catch (Exception $e)
{
die('Erreur: ' . $e->getMessage());
}

$req = $bdd->prepare('SELECT nom FROM jeux_video WHERE possesseur = ?');
$req->execute(array($_GET['possesseur']));

$req->closeCursor();

?>

Message que je reçois: Notice: Undefined index: possesseur in D:\MAMP\htdocs\prepare.php on line 12

C'est un cours pour les débutants, j'essaye de suivre les codes donnés pour exemple. Le code ci-dessus est copié à la lettre de la leçon. Hélas, ça ne fonctionne pas.

Même message ressort pour $req = $bdd->prepare('SELECT nom FROM jeux_video WHERE possesseur = :possesseur');

3 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour
    Le souci vient de la variable
    $_GET['possesseur']
    Cela signifie que tu ne passes pas cette variable via URL de la page...

    0
  2. VitalyLG Messages postés 3 Statut Membre
     
    Bonjour Jordane,
    Merci beaucoup pour la réponse.

    La même variable a fonctionné avec query

    <?php
    $bdd = new PDO('mysql:host=localhost;port=8889;dbname=test;charset=utf8', 'root', 'root', array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));

    $reponse = $bdd->query('SELECT * FROM jeux_video');
    while ($data = $reponse->fetch())
    {
    echo '<p>' . $data['console']. ' - ' . $data['nom'] . ' - ' . $data['possesseur'] . '</p>';
    }
    ?>

    Je crois, je dois lire un peu plus sur le sujet )))
    0
  3. VitalyLG Messages postés 3 Statut Membre
     
    Bonjour Jordane,
    j'ai trouvé une réponse apparemment:
    il a fallu ajouter@ à $_GET
    ça a marché @$_GET
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      L'utilisation du arobase sert à "masquer" les erreurs ....
      Pour correctement gérer ce genre de souci ... il faut récupérer "proprement" les variables AVANT de les utiliser.
      Pour ça, tu peux utiliser les fonctions prévues à cet effet comme la fonction filter_input ou sinon, à minima l'écriture ternaire.

      Par exemple, dans ton cas, j'aurais fait :
      
      $poss = !empty($_GET['possesseur']) ? trim($_GET['possesseur']) : NULL;
      
      $sql = 'SELECT nom FROM jeux_video WHERE possesseur = ?';
      $datas = array($poss);
      
      try{
         $req = $bdd->prepare($sql);
         $req->execute($datas);
      }catch(Exception $e){
        //en cas d'erreur dans la requête SQL
        echo "Erreur " . $e->getMessage();
      }
      



      Au passage, je t'invite à lire et à appliquer les conseils donnés ici https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

      et là https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

      ainsi qu'une explication sur l'utilisation des balises de code pour poster ton code correctement sur ce forum :https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
      0