Undefined index

Signaler
Messages postés
3
Date d'inscription
mercredi 23 juin 2021
Statut
Membre
Dernière intervention
27 juin 2021
-
Messages postés
33487
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 septembre 2021
-
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

Messages postés
33487
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 septembre 2021
3 721
Bonjour
Le souci vient de la variable
$_GET['possesseur']
Cela signifie que tu ne passes pas cette variable via URL de la page...

Messages postés
3
Date d'inscription
mercredi 23 juin 2021
Statut
Membre
Dernière intervention
27 juin 2021

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 )))
Messages postés
3
Date d'inscription
mercredi 23 juin 2021
Statut
Membre
Dernière intervention
27 juin 2021

Bonjour Jordane,
j'ai trouvé une réponse apparemment:
il a fallu ajouter@ à $_GET
ça a marché @$_GET
Messages postés
33487
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 septembre 2021
3 721
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://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

et là https://www.commentcamarche.net/faq/48399-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-les-balises-de-code