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 :

Problème avec une boucle FOR ( Undefined )


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 2
    Points
    2
    Par défaut Problème avec une boucle FOR ( Undefined )
    Ciaossu !

    Je ne sais pas si je suis dans la bonne section ou pas car je n'ai pas trouvé de section erreur ou autre.

    alors depuis maintenant 2J j'ai un problème avec une boucle for et j'obtiens toujours une erreur, je sais d'où ça viens mais ça ne marche jamais.



    Homepage.php
    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
     
    <?php
       $NbrDeCat = $cWiki->getNbrCategorie();
       $tWiki    = $cWiki->getCategorie();
       $MaxTr    = 3;
     
     
       for($i = 1; $i <= $NbrDeCat; $i++)
       {
          $tWikiArticle = $cWiki->getArticles($tWiki["id"][$i]);
     
          echo '
                       <td id="tdpowerwiki">
                                <h3><img src="'.IMG.'ico/'.$tWiki["iu"][$i].'" /> &nbsp;  '.$tWiki["nom"][$i].'  </h3>
                                <ul>
                                  <li>'.$tWikiArticle["titre"][$i].'</li>
                                </ul>
                       </td>';
     
     
     
                if ($i % $MaxTr == 0 && $i != $NbrDeCat)
                {
                echo '</tr><tr id="tdpowerwiki">';
     
                }
     
       }
     
    ?>
    Wiki.class.php
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    #Récupère le nbr de catégorie
            public function getNbrCategorie()
            {
                $sQuery  = "SELECT id FROM wiki_cat";
     
     
                $rResult = $this->oSql
                                ->query($sQuery);
     
     
                $NbrDeCat = $this->oSql
                                 ->getNbrOfResult();
     
                return $NbrDeCat;
     
            }
     
     
     
    #Récupère les infos sur les catégories
     
            public function getCategorie()
            {
     
                $sQuery = "SELECT * FROM wiki_cat ORDER BY ordre ASC";
     
                $rResult = $this->oSql
                                ->query($sQuery);
     
                for($i = 1; $row = $this->oSql->Type($rResult); $i++)
                {
     
     
                    $tWiki["id"][$i]        = $row["id"];
                    $tWiki["ordre"][$i]     = $row["ordre"];
                    $tWiki["nom"][$i]       = $row["nom"];
                    $tWiki["iu"][$i]        = $row["icone_url"];
     
                }
                 return $tWiki;
     
     
            }
     
     
     
     
     
    public function getArticles($idCat)
    {
     
     $sQuery = "SELECT titre, auteur, contenu, type, tags, valide, vu, date FROM wiki_art WHERE cat_id = $idCat AND valide = 1 "; 
     
              $rResult = $this->oSql
                              ->query($sQuery);
     
     
     
                   for($i = 0; $row = $this->oSql->Type($rResult); $i++)
                   {
     
                    $tWikiArticle["titre"][$i]         = $row["titre"];
                    $tWikiArticle["auteur"][$i]        = $row["auteur"];
                    $tWikiArticle["contenu"][$i]       = $row["contenu"];
                    $tWikiArticle["type"][$i]          = $row["type"];
                    $tWikiArticle["tags"][$i]          = $row["tags"];
                    $tWikiArticle["valide"][$i]        = $row["valide"];
                    $tWikiArticle["view"][$i]          = $row["vu"];
                    $tWikiArticle["date"][$i]          = $row["date"];
     
                   }
     
                    return $tWikiArticle;
     
     
     
         }

    Voilà ce qui ce passe sur la page homepage.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT id FROM wiki_cat
     
    SELECT * FROM wiki_cat ORDER BY ordre ASC
     
    SELECT titre, auteur, contenu, type, tags, valide, vu, date FROM wiki_art WHERE cat_id = 1 AND valide = 1  
     
    SELECT titre, auteur, contenu, type, tags, valide, vu, date FROM wiki_art WHERE cat_id = 2 AND valide = 1
     
    Notice: Undefined variable: tWikiArticle in C:\wamp\www\Wiki\classes\wiki.class.php on line 367
     
    SELECT titre, auteur, contenu, type, tags, valide, vu, date FROM wiki_art WHERE cat_id = 3 AND valide = 1
     
    Notice: Undefined variable: tWikiArticle in C:\wamp\www\Wiki\classes\wiki.class.php on line 367
    La ligne 367 correspond donc au return $tWikiArticle;

    J'ai regarder beaucoup de forum, j'ai trouvé des personnes aillant le même problème que moi mais ce n'est pas pareil.

    Donc je vous remercie d'avance pour votre aide

    ps: si vous avez besoin de plus d'infos n'hésitez pas

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si $this->oSql->Type($rResult) vaut FALSE dés le début, ta boucle ne fait aucun tour et $tWiki n'est jamais défini.

    Il faut initialiser $tWiki avant la boucle.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Si $this->oSql->Type($rResult) vaut FALSE dés le début, ta boucle ne fait aucun tour et $tWiki n'est jamais défini.

    Il faut initialiser $tWiki avant la boucle.

    mysql.class.php
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
     
    <?php
     
     class MySQL 
     {
         private $host;
         private $db;
         private $user, $pwd;
         private $ConnectLink, $rConnectLink;
         private $rResult;
         private $TypeFetch;
         private $NbrOfResult, $iLastId, $sQuery;
     
     
         ##################################CONSTRUCTEUR############################################
     
         public function MySQL($host = '', $db = '', $user = '', $pwd = '')
         {
             $this->host        = $host;
             $this->db          = $db;
             $this->user        = $user;
             $this->pwd         = $pwd;
             $this->ConnectLink = array();
             $this->rResult     = 0;
             $this->TypeFetch   = 'assoc';
             $this->NbrOfResult = 0;
             $this->iLastId     = 0;
             $this->sQuery      = 0;
     
             $this->connexionDB($this->host, $this->user, $this->pwd, $this->db);
     
         }
     
            /**
        *  Connexion Serveur MYSQL
        *
        *   @author     Dearth
        *   @version    2.0
        *   @param      string  $ h,u,p,d as Serveur MYSQL
        *   @access     public
        */
     
     
     
     
         public function connexionDB($h, $u, $p, $d)
         {
             if( $h == null || $u == null || $p == null )
             {
                 throw new Error('Erreur : Host ou Utilisateur ou Password ne contient rien.');
                 exit();
             }
             else
             {
                try
                {
     
                   $connectId = mysql_pconnect($h, $u, $p);
                   array_push($this->ConnectLink, $connectId);
                   $this->selectDB($d);
     
                }
     
                catch(Error $e)
                {
                    echo $e.'<br>';
                    exit();
                }
     
             }
     
            }
     
       /**
        *   Select une db
        *
        *   @author     Dearth
        *   @version    2.0
        *   @param      string $db as database
        *   @access     public
        */
     
     
     
         public function selectDB($db)
         {
              if($db == null)
              {
                   throw new Error('Erreur : Aucune db selectionn�e.');
                   exit();
              }
              else
              {
                  try
                  {
                      $link = array_pop($this->ConnectLink);
                      $this->rConnectLink = $link;
                      mysql_select_db($db, $link);
                  }
                  catch(Error $e)
                  {
                      echo $e.'<br>';
                      exit();
                  }
              }
         }
     
     
       /**
        *  Execute une requete
        *
        *   @author     Dearth
        *   @version    2.0
        *   @param      string  $execute
        *   @access     public
        */
       public function query($execute, $connectId = null)
       {
     
          if($connectId == null)
              $connectId = $this->rConnectLink;
     
          $this->sQuery = trim($execute);
         echo $this->sQuery."<hr>";
          $this->rResult = mysql_query($this->sQuery, $connectId);
     
          if(false === $this->rResult)
          {
              exit( mysql_error() );
              return false;
          }
     
         $this->checkQuery();
     
         return $this->rResult;
     
       }
     
           /**
        *   Protege une variable
        *
        *   @author     Dearth
        *   @version    2.0
        *   @param      string  $String Type de parsage.
        *   @access     public
        */
       public function protect($String)
       {
           $String = htmlentities(trim($String, " \0"), ENT_NOQUOTES);
           $String = mysql_real_escape_string($String, $this->rConnectLink);
     
           return $String;
       }
     
           /**
        *   Retourne le type de champs
        *
        *   @author     Dearth
        *   @version    2.0
        *   @param      resultId as Resultat de la dernière execution query
        *   @access     public
        */
     
       public function Type($resultId = null)
       {
         if($resultId == null)
             $resultId = $this->rResult;
     
         switch($this->TypeFetch)
         {
                case 'assoc':
                    return mysql_fetch_assoc($resultId);
                    break;
     
                case 'array':
                    return mysql_fetch_array($resultId);
                    break;
     
                case 'row':
                    return mysql_fetch_row($resultId);
                    break;
     
                case 'object':
                    return mysql_fetch_object($resultId);
                    break;
     
                case 'field':
                    return mysql_fetch_object($resultId);
                    break;
     
                default:
                    return mysql_fetch_assoc($resultId);
                    break;
     
          }
     
     
       }
     
     
     
        /**
        *   Verifie le type de requete puis l'adapte
        *
        *   @author     Dearth
        *   @version    2.0
        *   @param      string  $type;
        *   @access     public
        */
     
        public function checkQuery()
        {
            $sTypeQuery = strtolower(substr(trim($this->sQuery), 0,6));
     
            switch($sTypeQuery)
            {
                case 'insert': $this->iLastId     = @mysql_insert_id($this->rConnectLink);
                case 'update':
                case 'delete': $this->NbOfResult = @mysql_affected_rows($this->rConnectLink); break;
                case 'select': $this->NbOfResult = @mysql_num_rows($this->rResult); break;
                default: throw new Error("La requete ne commence pas par SELECT ni INSERT, UPDATE ou DELETE"); break;
            }
     
        }
     
     
     
        /**
        *   Initialise le type de parsage des résultats.
        *
        *   @author     Dearth
        *   @version    2.0
        *   @param      string  $fetch Type de parsage.
        *   @access     public
        */
        public function setFetchType($fetch)
        {
            $this->TypeFetch = $fetch;
        }
     
        #Retourne le nbr de ligne
        public function getNbrOfResult()
        {
            return $this->NbOfResult;
        }
     
        #Retourne le dernier id inseré
        public function getLastId()
        {
            return $this->iLastId;
        }
     
     
     
     }
     
    ?>
    J'ai fais ce que tu m'as dis j'ai fais :

    $tWikiArticle = array();

    Mais ça ne change rien et pour $this->oSql->Type ne retourne pas False puisque j'ai essayer sans faire de boucle mais il m'affiche le dernier résultat.

    En aillant initialiser mon tableau j'ai un problème d'index.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT id FROM wiki_cat
     
    SELECT * FROM wiki_cat ORDER BY ordre ASC
     
    SELECT titre, auteur, contenu, type, tags, valide, vu, date FROM wiki_art WHERE cat_id = 1 AND valide = 1  
     
    SELECT titre, auteur, contenu, type, tags, valide, vu, date FROM wiki_art WHERE cat_id = 2 AND valide = 1
     
    Notice: Undefined index: titre in C:\wamp\www\Wiki\modules\homepage.php on line 24
     
    SELECT titre, auteur, contenu, type, tags, valide, vu, date FROM wiki_art WHERE cat_id = 3 AND valide = 1
     
    Notice: Undefined index: titre in C:\wamp\www\Wiki\modules\homepage.php on line 24
    Merci de ta réponse rapide.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si $tWikiArticle n'est pas défini, c'est forcement que tu n'es pas rentré dans la boucle.
    La seule facon de ne pas rentrer dans la boucle c'est que la condition soit fausse dés le premier passage et donc que $this->oSql->Type($rResult) vaille FALSE.

    Il suffit d'un var_dump pour savoir si c'est bien ça.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    J'obtiens ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    array(8) { ["titre"]=>  array(2) { [0]=>  string(21) "Une categorie de test" [1]=>  string(19) "Guide des familiers" } ["auteur"]=>  array(2) { [0]=>  string(6) "Dearth" [1]=>  string(6) "Dearth" } ["contenu"]=>  array(2) { [0]=>  string(1472) "Des Kobolds décérébrés, des savants fous MuMus, de sournois malfaiteurs et une pelle... Voici un petit aperçu de ce qui vous attend si vous osez braver les dangers d’Haramel ! Des Kobolds décérébrés, des savants fous MuMus, de sournois malfaiteurs et une pelle... Voici un petit aperçu de ce qui vous attend si vous osez braver les dangers d’Haramel ! Des Kobolds décérébrés, des savants fous MuMus, de sournois malfaiteurs et une pelle... Voici un petit aperçu de ce qui vous attend si vous osez braver les dangers d’Haramel ! AD remarche http://static.fr.aiononline.com/powerbook/aion/87/82/d8b5f9abbf2d5a5c087c99a8.jpg TEST Test 1 Test 2 TypesFonctions CompagnonsAime marcher static.fr.aiononline.com/powerbook/aion/87/82/d8b5f9abbf2d5a5c087c99a8.jpg " [1]=>  string(26) "Un guide sur les familiers" } ["type"]=>  array(2) { [0]=>  string(1) "1" [1]=>  string(1) "2" } ["tags"]=>  array(2) { [0]=>  string(0) "" [1]=>  string(0) "" } ["valide"]=>  array(2) { [0]=>  string(1) "1" [1]=>  string(1) "1" } ["view"]=>  array(2) { [0]=>  string(1) "0" [1]=>  string(1) "0" } ["date"]=>  array(2) { [0]=>  string(19) "2010-09-23 17:58:02" [1]=>  string(19) "2010-09-23 17:57:24" } } array(0) { } array(0) { }
    C'est assez dure à lire

    si ça peux aider.


  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faudrait faire des retours à la ligne après chaque var_dump() et indiquer de laquelle des boucles on parle.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Il faudrait faire des retours à la ligne après chaque var_dump() et indiquer de laquelle des boucles on parle.

    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
     
    /*De la*/
    Array ( [titre] => Array ( [0] => Une categorie de test [1] => Guide des familiers ) [auteur] => Array ( [0] => Dearth [1] => Dearth ) [contenu] => Array ( [0] => Des Kobolds décérébrés, des savants fous MuMus, de sournois malfaiteurs et une pelle... Voici un petit aperçu de ce qui vous attend si vous osez braver les dangers d’Haramel ! Des Kobolds décérébrés, des savants fous MuMus, de sournois malfaiteurs et une pelle... Voici un petit aperçu de ce qui vous attend si vous osez braver les dangers d’Haramel ! Des Kobolds décérébrés, des savants fous MuMus, de sournois malfaiteurs et une pelle... Voici un petit aperçu de ce qui vous attend si vous osez braver les dangers d’Haramel ! AD remarche http://static.fr.aiononline.com/powerbook/aion/87/82/d8b5f9abbf2d5a5c087c99a8.jpg TEST Test 1 Test 2 TypesFonctions CompagnonsAime marcher static.fr.aiononline.com/powerbook/aion/87/82/d8b5f9abbf2d5a5c087c99a8.jpg [1] => Un guide sur les familiers ) [type] => Array ( [0] => 1 [1] => 2 ) [tags] => Array ( [0] => [1] => ) [valide] => Array ( [0] => 1 [1] => 1 ) [view] => Array ( [0] => 0 [1] => 0 ) [date] => Array ( [0] => 2010-09-23 17:58:02 [1] => 2010-09-23 17:57:24 ) )
     
    1
    /*à ici ce sont la liste des mes articles */
     
    /*La je ne sais pas*/
    Array ( )
     
    1
     
    Array ( )
     
    1

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Au fait de quel variable fais tu le dump ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Au fait de quel variable fais tu le dump ?
    je fais le dump de la variable $tWikiArticle celle qui contient les infos de la table wiki_art sous forme de tableau ( mysql_fetch_assoc() )

    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
     
     
         public function getArticles($idCat)
         {
     
              $sQuery = "SELECT titre, auteur, contenu, type, tags, valide, vu, date FROM wiki_art WHERE cat_id = $idCat AND valide = 1 "; // WHERE cat_id = '.$idCat.'
     
              $rResult = $this->oSql
                              ->query($sQuery);
     
              $tWikiArticle = array();
     
                   for($i = 0; $row = $this->oSql->Type($rResult); $i++)
                   {
     
                    $tWikiArticle["titre"][$i]         = $row["titre"];
                    $tWikiArticle["auteur"][$i]        = $row["auteur"];
                    $tWikiArticle["contenu"][$i]       = $row["contenu"];
                    $tWikiArticle["type"][$i]          = $row["type"];
                    $tWikiArticle["tags"][$i]          = $row["tags"];
                    $tWikiArticle["valide"][$i]        = $row["valide"];
                    $tWikiArticle["view"][$i]          = $row["vu"];
                    $tWikiArticle["date"][$i]          = $row["date"];
     
                   }
                   return var_dump($tWikiArticle); // <----Celle-ci 
     
         }

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ajoute celui de oSql->Type($rResult) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $tWikiArticle = array();
    $row = $this->oSql->Type($rResult);
    echo '$row : '; var_dump($row) . '<br/>';
    for($i = 0; $row == TRUE ; $i++) {
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $row : array(8) { 
    ["titre"]=>  string(21) "Une categorie de test"
    ["auteur"]=>  string(6) "Dearth" 
    ["contenu"]=>  string(1472) "Des Kobolds décérébrés, des savants fous MuMus, de sournois malfaiteurs et une pelle... Voici un petit aperçu de ce qui vous attend si vous osez braver les dangers d’Haramel ! Des Kobolds décérébrés, des savants fous MuMus, de sournois malfaiteurs et une pelle... Voici un petit aperçu de ce qui vous attend si vous osez braver les dangers d’Haramel ! Des Kobolds décérébrés, des savants fous MuMus, de sournois malfaiteurs et une pelle... Voici un petit aperçu de ce qui vous attend si vous osez braver les dangers d’Haramel ! AD remarche http://static.fr.aiononline.com/powerbook/aion/87/82/d8b5f9abbf2d5a5c087c99a8.jpg TEST Test 1 Test 2 TypesFonctions CompagnonsAime marcher static.fr.aiononline.com/powerbook/aion/87/82/d8b5f9abbf2d5a5c087c99a8.jpg " 
    ["type"]=>  string(1) "1"
    ["tags"]=>  string(0) "" 
    ["valide"]=>  string(1) "1" 
    ["vu"]=>  string(1) "0" 
    ["date"]=>  string(19) "2010-09-23 17:58:02" }
     
     
    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 35 bytes) in C:\wamp\www\Wiki\classes\wiki.class.php on line 361

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton script depasse 128Mo d'utilisation mémoire, je ne sais pas ce que tu as fais mais ca ne va pas.

    Dans un de tes scripts j'ai vu passer un return var_dump(), j'espere que tu n'as pas laissé ça quelque part.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Vu d'ici, j'imagine que le script ressemble à ça
    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
     
    //Code de Sabotage
    $tWikiArticle = array();
    $row = $this->oSql->Type($rResult);
    echo '$row : '; var_dump($row) . '<br/>';
    for($i = 0; $row == TRUE ; $i++) {
    //suivi du code de Dearth
                    $tWikiArticle["titre"][$i]         = $row["titre"];
                    $tWikiArticle["auteur"][$i]        = $row["auteur"];
                    $tWikiArticle["contenu"][$i]       = $row["contenu"];
                    $tWikiArticle["type"][$i]          = $row["type"];
                    $tWikiArticle["tags"][$i]          = $row["tags"];
                    $tWikiArticle["valide"][$i]        = $row["valide"];
                    $tWikiArticle["view"][$i]          = $row["vu"];
                    $tWikiArticle["date"][$i]          = $row["date"];
     
                   }
    Si c'est cela, logique que ça plante à un moment

    Sinon pour le problème de base, tu te le crées en montant ton tableau de résultats à l'envers.
    Avec le code précédemment cité, tu crées une structure de données contenant des listes pour chaque champ.
    En passant par un code comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while( $row = $this->oSql->Type($rResult) ){
        $tWikiArticle[] = $row;
    }
    Tu crées une liste dont chaque élément est une structure de données.
    C'est beaucoup plus simple à traiter derrière (un simple foreach).
    Pourfendeur de singletons en croisade

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si c'est cela, logique que ça plante à un moment
    ah oui tiens, je ne suis pas fier.

    Testons le retour de la requête, ca sera plus simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $tWikiArticle = array();
    echo 'Retour de query : '; var_dump($rResult) . '<br/>';
    while( $row = $this->oSql->Type($rResult) ){
        $tWikiArticle[] = $row;
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Déjà merci de vos réponse rapide

    Ensuite j'ai fais donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $tWikiArticle = array();
     
     
    echo 'Retour de query : '; var_dump($rResult) . '<br/>';
     
    while( $row = $this->oSql->Type($rResult) ){
        $tWikiArticle[] = $row;
    }
    J'ai obtenu ceci :

    Retour de query : resource(14) of type (mysql result)
    Notice: Undefined index: titre in C:\wamp\www\Wiki\modules\homepage.php on line 24
    Retour de query : resource(15) of type (mysql result)
    Notice: Undefined index: titre in C:\wamp\www\Wiki\modules\homepage.php on line 24
    Retour de query : resource(16) of type (mysql result)
    Notice: Undefined index: titre in C:\wamp\www\Wiki\modules\homepage.php on line 24

    Ensuite on m'a dit 2 fois d'essayer en faisant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $tWikiArticle = array ('titre' => array () , 'auteur' => array () , 'contenu' => array () , 'type' => array () , 'tags' => array () , 'valide' => array () , 'view' => array () , 'date' => array ());
    mais j'obtiens ceci :


    Notice: Undefined offset: 2 in C:\wamp\www\Wiki\modules\homepage.php on line 24

    Notice: Undefined offset: 3 in C:\wamp\www\Wiki\modules\homepage.php on line 24

  16. #16
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Bon déjà tes requêtes ne provoquent pas d'erreur.
    ajoute un debug dans ta fonction de requête :

    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
    public function query($execute, $connectId = null)
       {
     
          if($connectId == null)
              $connectId = $this->rConnectLink;
     
          $this->sQuery = trim($execute);
         echo $this->sQuery."<hr>";
          $this->rResult = mysql_query($this->sQuery, $connectId);
     
          if(false === $this->rResult)
          {
              exit( mysql_error() );
              return false;
          }
     
         $this->checkQuery();
         // debug
         echo "nbre de lignes : " . mysql_num_rows($this->rResult) . "<br/>";
         return $this->rResult;
     
       }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Bon déjà tes requêtes ne provoquent pas d'erreur.
    ajoute un debug dans ta fonction de requête :

    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
    public function query($execute, $connectId = null)
       {
     
          if($connectId == null)
              $connectId = $this->rConnectLink;
     
          $this->sQuery = trim($execute);
         echo $this->sQuery."<hr>";
          $this->rResult = mysql_query($this->sQuery, $connectId);
     
          if(false === $this->rResult)
          {
              exit( mysql_error() );
              return false;
          }
     
         $this->checkQuery();
         // debug
         echo "nbre de lignes : " . mysql_num_rows($this->rResult) . "<br/>";
         return $this->rResult;
     
       }

    alors j'ai déjà un attribut pour afficher le nbr de resultat en fonction de la requete :

    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
     
        /**
        *   Verifie le type de requete puis l'adapte
        *
        *   @author     Dearth
        *   @version    2.0
        *   @param      string  $type;
        *   @access     public
        */
     
        public function checkQuery()
        {
            $sTypeQuery = strtolower(substr(trim($this->sQuery), 0,6));
     
            switch($sTypeQuery)
            {
                case 'insert': $this->iLastId     = @mysql_insert_id($this->rConnectLink);
                case 'update':
                case 'delete': $this->NbOfResult = @mysql_affected_rows($this->rConnectLink); break;
                case 'select': $this->NbOfResult = @mysql_num_rows($this->rResult); break;
                default: throw new Error("La requete ne commence pas par SELECT ni INSERT, UPDATE ou DELETE"); break;
            }
     
        }
    J'ai donc à faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
     $this->oSql->getNbrOfResult();
    ?>
    En gros avec ceci j'obtiens :
    - 3 - 0 - 0 quand je le fais dans la fonction getArticles
    - 3 - 3 - 3 - 0 -0 quand je le fais dans la fonction query sachant qu'il y a environ 2 execution query avant celle de getArticles.

    si ça peut aider j'ai 3 entrées dans ma table wiki_art ( celle qui contient les articles ) .

  18. #18
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Voila donc comme je le dis depuis le début tu as 4 requêtes qui ne renvoient pas de résultat donc $this->oSql->Type($rResult) vaut FALSE et donc tu ne rentres pas dans la boucle.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  19. #19
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    d'accord j'ai essayé en faisant ceci :
    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
     
          public function getArticles($idCat)
         {
              $tWikiArticle = array();
              $sQuery = "SELECT titre, auteur, contenu, type, tags, valide, vu, date FROM wiki_art WHERE cat_id = $idCat AND valide = 1 "; // WHERE cat_id = '.$idCat.'
     
              $rResult = $this->oSql
                              ->query($sQuery);
     
                   for($i = 1; $row = $this->oSql->Type($rResult); $i++)
                   {
                    if(false !== $row)
                    {
                    $tWikiArticle["titre"][$i]         = $row["titre"];
                    $tWikiArticle["auteur"][$i]        = $row["auteur"];
                    $tWikiArticle["contenu"][$i]       = $row["contenu"];
                    $tWikiArticle["type"][$i]          = $row["type"];
                    $tWikiArticle["tags"][$i]          = $row["tags"];
                    $tWikiArticle["valide"][$i]        = $row["valide"];
                    $tWikiArticle["view"][$i]          = $row["vu"];
                    $tWikiArticle["date"][$i]          = $row["date"];
                    }
                   }
     
                  return $tWikiArticle;
     
         }
    Mais j'ai toujours :
    Notice: Undefined offset: 2 in C:\wamp\www\Wiki\modules\homepage.php on line 24

    Notice: Undefined index: titre in C:\wamp\www\Wiki\modules\homepage.php on line 24

  20. #20
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    tu pourrais faire juste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while($row = $this->oSql->Type($rResult))
    { 
        foreach($row as $key => $value)
        {
            $tWikiArticle[$key][] = $value;
        }
    }

Discussions similaires

  1. Problème avec une boucle for
    Par Zaza91280 dans le forum MATLAB
    Réponses: 12
    Dernier message: 13/05/2010, 17h56
  2. Problème avec une boucle for
    Par nostalamigo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/03/2009, 23h26
  3. Réponses: 6
    Dernier message: 26/11/2007, 15h25
  4. problème avec une boucle For
    Par mademoizel dans le forum ASP
    Réponses: 3
    Dernier message: 24/03/2007, 13h20
  5. Problème avec une boucle for
    Par cisse18 dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 29/03/2006, 16h50

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