Undefined index

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. Modérateur
    Bonjour
    Le souci vient de la variable
    $_GET['possesseur']
    Cela signifie que tu ne passes pas cette variable via URL de la page...

    1. 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 )))
      1. Bonjour Jordane,
        j'ai trouvé une réponse apparemment:
        il a fallu ajouter@ à $_GET
        ça a marché @$_GET
        1. Modérateur
          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