Comment supprimer les Undefined offset

Eléphant du PHP | 372 Messages

05 déc. 2016, 22:47

Salut, salut
Comment supprimer les undefined offset.

Dans mes requetes le resultat retourné est parfois le numéro 60 par exemple ou 0 ou autre encore et biensur il n'existe pas en bdd.
Pour diverseraison je ne peut les supprimer de la bdd, mais lors de l'appel de ma requete j'aimerais éviter que ces fameux :
Notice: Undefined offset: 75 apparaissent.
Voici une de mes requetes:
<?php
    $loisir_localisation = "SELECT DISTINCT id_region FROM loisirs WHERE genre_loisir = '".$_GET['loisir']."'";
    $req = $bdd->query($loisir_localisation);           
    while($ligne = $req->fetch(PDO::FETCH_ASSOC)){                                 
    echo '<li><a href="/idclick/sortie/region-'.simplification($aRegion[$ligne['id_region']]).'/activie-'.simplification($_GET['loisir']).'.html">'.ucfirst(strtolower($aRegion[$ligne['id_region']])).'</li>';    	
    }
	?>
Merci à vous

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 déc. 2016, 09:15

salut,

undefined offset => l'index n'existe pas dans le tabeau => du coup faut pas l'utiliser :-)

les fonctions isset ou empty t'aideront à tester l’existence de l'index dans ton tableau.
Si celui ci n'existe pas il ne faut pas l'utiliser, d'ailleurs si la donnée n'existe pas il faut traiter la chose correctement avec un message par défaut ou quelque chose du genre.

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 1967 Messages

06 déc. 2016, 09:18

Pour éviter ce type d'erreur, tu dois tester l’existence de l'index dans ton tableau avant de l'utiliser avec isset() ou empty()

je suppose un truc de ce genre
<?php
    $loisir_localisation = "SELECT DISTINCT id_region FROM loisirs WHERE genre_loisir = '".$_GET['loisir']."'";
    $req = $bdd->query($loisir_localisation);           
    while($ligne = $req->fetch(PDO::FETCH_ASSOC)){                                 
    if (isset($ligne['id_region']) && $aRegion[$ligne['id_region']] ) {
echo '<li><a href="/idclick/sortie/region-'.simplification($aRegion[$ligne['id_region']]).'/activie-'.simplification($_GET['loisir']).'.html">'.ucfirst(strtolower($aRegion[$ligne['id_region']])).'</li>';    
}	
    }
  ?>
Modifié en dernier par Spols le 06 déc. 2016, 09:52, modifié 1 fois.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 déc. 2016, 09:30

@Spols : a vu de nez c'est le second qui pose problème le premier venant de la requête sql il y a peu de chance qu'il ne soit pas fournit (même cela est le comportement par défaut des fonction oracle je ne crois que cela soit le cas pour PDO, en tout cas cela ne m'est jamais arrivé :) )

@+
Il en faut peu pour être heureux ......