IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Undefined variable quand pas de isset


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 3
    Par défaut Undefined variable quand pas de isset
    Bonjour,

    Voici le script qui me retourne une erreur sur EasyPHP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    <?php
    //query the database
    $myResult = mysql_query('SELECT ref_links.*, ref_categories.category_name FROM ref_links, ref_categories WHERE ref_links.ref_categories_id=ref_categories.id', $connectID)
      or die ("Unable to select from database");
    //loop through the returned records
     
    print '<table border="1">'."\n";
    while ($row = mysql_fetch_array($myResult, MYSQL_ASSOC)) {
    	//category heading only written out if a listing is in diff cat from previous listing
    //$thisCat is used to test if a new heading needs to be written out
       $thisCat= $row['category_name'];
       if ($lastCat<>$thisCat) { // true first time($lastCat not set), and each time a new category is found
     //then write out a table heading with the category name
     			print '<th colspan="6" align="left">'; //heading spans all columns of table
    			print "<h3>".$row['category_name']."</h3>";  // print the next category heading
    			print "</th>\n";
    	 }
    	 print '<tr>';
     
       print '<tr>'."\n";
    	 print '<td>'.$row['topic_name'].'</td>'."\n";
    	 print '<td class="description">'.$row['topic_desc'].'</td>'."\n";
    	 print '<td><a href="'.$row['topic_url'].'" target="_blank">'.$row['topic_url'];
    	 print'</a></td>';
    	 print '</tr>'."\n";
    	 // finally, we store the current category so next time the loop repeats,
    	// we can tell if the next item is in a new category or not
    	// if so, we write out a new heading	- see if ($lastCat<>$thisCat) above
    	$lastCat = $row['category_name'];
    }
     
    print '</table>'."\n";
    ?>
    La deuxième partie du code semble fonctionner, mais je reçois l'erreur suivante en haut:

    « Notice: Undefined variable: lastCat in C:\Program Files\EasyPHP 2.0b1\www....php on line 23 »

    Je crois que le problème vient que je n'ai pas utilisé isset, mais je ne sais pas comment l'utiliser dans ce cas précis...

    Au premier passage de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($lastCat<>$thisCat)
    ça devrait donner true, mais ça fait juste une erreur parce que $lastCat n'a pas encore été initialisé.

    Quelqu'un peut m'aider? Merci!

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mai 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 257
    Par défaut Il faut initialiser la variable
    Bonjour,
    c'est normal que ça te donne une erreur puisque la variable n'existe pas. Essai de l'initialiser avec une valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $lastCat='';
    while ($row = mysql_fetch_array($myResult, MYSQL_ASSOC)) {
    	//category heading only written out if a listing is in diff cat from previous listing
    //$thisCat is used to test if a new heading needs to be written out
       $thisCat= $row['category_name'];
    if ($lastCat<>$thisCat) { 
    ...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 3
    Par défaut
    Merci beaucoup; ça semble fonctionner.

    Mais je trouve ça étrange. Je suis en train d'apprendre le PHP et dans le livre en question on disait que pour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($lastCat<>$thisCat)  {
    la première fois ça donnerait "true" puisque $lastCat n'était pas encore initialisée.

    Mais dans EasyPHP ça ne fonctionne pas puisqu'il faut impérativement l'initialiser.

    Ceci dit, est-ce que ça devrait affecter le code plus loin quand
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $lastCat = $row['category_name'];
    ?

    Merci

  4. #4
    Membre expérimenté
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 185
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($lastCat<>$thisCat)  {
    Bonsoir,

    Pour moi, cette ligne, ça veux juste dire si $lastCat est différent de $thisCat ...
    Sinon, tu initialise à $lastCat à une valeur qui en théorie n'a rien à faire là, ensuite, tu la redéfinit, ta première initialisation n'a aucune incidence sur le code suivant, et mieux, si est tu est sur que tu n'aura jamais $thisCat à une valeur vide, alors c'est surement la solution la plus rapide et la plus propre !

    Ceci dit, je doute de l'utilité de ce bout de code ... Le but du jeu ne serais-il pas de vérifier que la catégorie n'a encore jamais été écrite ?
    Il vaudrait mieux un tableau qui conserve toutes les catégories écrites, et on vérifie dans ce tableau si jamais elle existe déjà :o

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 3
    Par défaut
    Merci pour les précisions. Je suis en train d'apprendre à coder, et cet extrait vient de « Coder pour le web » de Charles Wyke-Smith.

    Si vous connaissez des livres qui sont bons pour apprendre le PHP, je suis partant!

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Citation Envoyé par belz666 Voir le message
    Merci beaucoup; ça semble fonctionner.

    Mais je trouve ça étrange. Je suis en train d'apprendre le PHP et dans le livre en question on disait que pour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($lastCat<>$thisCat)  {
    la première fois ça donnerait "true" puisque $lastCat n'était pas encore initialisée.

    Mais dans EasyPHP ça ne fonctionne pas puisqu'il faut impérativement l'initialiser.
    Stricto senso, si la première variable vaut null (variable non initialisée), soit elle est automatiquement convertie en chaine vide ("") si la deuxième variable est une chaine caractère, soit les deux parties sont converties en booléens (la première variable devenant false)
    Donc à partir du moment où $thisCat n'est pas une variable vide (chaine "", tableau vide...) ta condition sera effectivement validée.

    En revanche, comme tu utilises une variable non définie dans cette condition, php te le signale en t'envoyant une notice. Les Notices sont le niveau le plus faible des erreurs : en règle générale, elles n'empêchent pas le fonctionnement du script et le plus souvent, on les désactive sur un site en production. Elles sont toutefois très utiles en phase de développement (par exemple, pour répérer les fautes de frappes entre deux noms de variable...)
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/10/2008, 18h40
  2. Réponses: 2
    Dernier message: 13/06/2008, 21h01
  3. Notice: Undefined variable
    Par kayn dans le forum Langage
    Réponses: 2
    Dernier message: 03/10/2005, 21h44
  4. Réponses: 3
    Dernier message: 22/09/2005, 12h24
  5. Retourner un count = 0 quand pas de résultat
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 21/12/2004, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo