Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
550 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  mettre une requete dans une boucle qui fonctionne

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

mettre une requete dans une boucle qui fonctionne

n°1865203
alain1111
Posté le 24-03-2009 à 11:19:38  profilanswer
 

Voila j'ai une question un peu bizarre.
 
Voila le code PHP
 

Code :
  1. while ($cur_forum = $db->fetch_assoc($result))
  2. {
  3.     $moderators = '';
  4.  
  5.     if ($cur_forum['cid'] != $cur_category)    // A new category since last iteration?
  6.     {
  7.         if ($cur_category != 0)
  8.             echo "\t\t\t".'</tbody>'."\n\t\t\t".'</table>'."\n\t\t".'</div>'."\n\t".'</div>'."\n".'</div>'."\n\n";
  9.  
  10.         ++$cat_count;
  11.  
  12. ?>
  13. <div id="idx<?php echo $cat_count ?>" class="blocktable">
  14.     <h2><span><?php echo pun_htmlspecialchars($cur_forum['cat_name']) ?></span></h2>
  15.     <div class="box">
  16.         <div class="inbox">
  17.             <table cellspacing="0">
  18.             <thead>
  19.                 <tr>
  20.                     <th class="tcl" scope="col"><?php echo $lang_common['Forum'] ?></th>
  21.                     <th class="tc2" scope="col"><?php echo $lang_index['Topics'] ?></th>
  22.                     <th class="tc3" scope="col"><?php echo $lang_common['Posts'] ?></th>
  23.                     <th class="tcr" scope="col"><?php echo $lang_common['Last post'] ?></th>
  24.                 </tr>
  25.             </thead>
  26.             <tbody>
  27. <?php
  28.  
  29.         $cur_category = $cur_forum['cid'];
  30.     }
  31.  
  32.     $item_status = '';
  33.     $icon_text = $lang_common['Normal icon'];
  34.     $icon_type = 'icon';
  35.  
  36.     // Are there new posts?
  37.     if (!$pun_user['is_guest'] && $cur_forum['last_post'] > $pun_user['last_visit'])
  38.     {
  39.         $item_status = 'inew';
  40.         $icon_text = $lang_common['New icon'];
  41.         $icon_type = 'icon inew';
  42.     }
  43.  
  44.     // Is this a redirect forum?
  45.     if ($cur_forum['redirect_url'] != '')
  46.     {
  47.         $forum_field = '<h3><a href="'.pun_htmlspecialchars($cur_forum['redirect_url']).'" title="'.$lang_index['Link to'].' '.pun_htmlspecialchars($cur_forum['redirect_url']).'">'.pun_htmlspecialchars($cur_forum['forum_name']).'</a></h3>';
  48.         $num_topics = $num_posts = '&nbsp;';
  49.         $item_status = 'iredirect';
  50.         $icon_text = $lang_common['Redirect icon'];
  51.         $icon_type = 'icon';
  52.     }
  53.     else
  54.     {
  55.         $forum_field = '<h3><a href="viewforum.php?id='.$cur_forum['fid'].'">'.pun_htmlspecialchars($cur_forum['forum_name']).'</a></h3>';
  56.         $num_topics = $cur_forum['num_topics'];
  57.         $num_posts = $cur_forum['num_posts'];
  58.     }
  59.  
  60.     if ($cur_forum['forum_desc'] != '')
  61.         $forum_field .= "\n\t\t\t\t\t\t\t\t".$cur_forum['forum_desc'];
  62.  
  63.  
  64.     // If there is a last_post/last_poster.
  65.     if ($cur_forum['last_post'] != '')
  66.     {
  67.                
  68.                // modif alain
  69.  
  70.                $tout = $cur_forum['last_post_id'];
  71.  
  72.                $query_bibi= "SELECT *
  73.                              FROM Forum_topics
  74.                              WHERE last_post_id = ".$tout ;  
  75.                
  76. [#ff5500]// requete qui fait cesser la boucle while:[/#ff5500]
  77.                $result_bibi = mysql_query($query_bibi);
  78.                $val_bibi = mysql_fetch_array($result_bibi);
  79.  
  80.  
  81.                $last_post = '<a href="viewtopic.php?pid='.$cur_forum['last_post_id'].'#p'.$cur_forum['last_post_id'].'">'.format_time($cur_forum['last_post']).'</a> <span class="byuser">'.$lang_common['by'].' '.pun_htmlspecialchars($cur_forum['last_poster']).'</span>';
  82.  
  83.        }
  84.     else
  85.        {
  86.         $last_post = '&nbsp;';
  87.        }
  88.  
  89.     if ($cur_forum['moderators'] != '')
  90.     {
  91.         $mods_array = unserialize($cur_forum['moderators']);
  92.         $moderators = array();
  93.  
  94.         while (list($mod_username, $mod_id) = @each($mods_array))
  95.             $moderators[] = '<a href="profile.php?id='.$mod_id.'">'.pun_htmlspecialchars($mod_username).'</a>';
  96.  
  97.         $moderators = "\t\t\t\t\t\t\t\t".'<p><em>('.$lang_common['Moderated by'].'</em> '.implode(', ', $moderators).')</p>'."\n";
  98.     }
  99.  
  100. ?>
  101.                 <tr<?php if ($item_status != '') echo ' class="'.$item_status.'"'; ?>>
  102.                     <td class="tcl">
  103.                         <div class="intd">
  104.                             <div class="<?php echo $icon_type ?>"><div class="nosize"><?php echo $icon_text ?></div></div>
  105.                             <div class="tclcon">
  106.                                 <?php echo $forum_field."\n".$moderators ?>
  107.                             </div>
  108.                         </div>
  109.                     </td>
  110.                     <td class="tc2"><?php echo $num_topics ?></td>
  111.                     <td class="tc3"><?php echo $num_posts ?></td>
  112.                     <td class="tcr"><?php echo $last_post ?></td>
  113.                 </tr>
  114. <?php
  115.  
  116. }

 
 
Il s'agit d'un bout de code de punbb qui j'essaye d'améliorer...
Dans une boucle while existante, je veux ajouter une requete pour chercher des champs supplémentaires.
J'ai tout vérifier... à savoir que la requete est juste (elle fonctionne mise dans un script toute seule).
 
Hors il me semble que le problème vient de la facon dont la page est codée:
 
Elle est codé de cette manière:
 

Citation :


 
while
{
?> du html
<?php
des tests
?>
du html
<?php
 
ma requete
 
?>
du html
<?php
}
?>
 
 


 
alors qu'elle aurait du etre fait de la manière suivante:
 

Citation :


<?php
while
{
echo "code html";
des tests
echo "code html";
requete dans la base de donnée
echo "code html";
}


 
serait-ce la source du problème?
 
J'avais déjà eu ce problème il y a longtemps sur un de mes programmes... la seules facon pour enlever le problème avait été d'enlever les  
?>code html
<?php
 
intempestifs par des echo... et du coup, tout fonctionnait... mais ici, si il faut faire ca, je change de crèmerie, car je vais pas réecrire tout le code...
 
Merci pour vos idées
a+


Message édité par alain1111 le 25-03-2009 à 14:46:43
mood
Publicité
Posté le 24-03-2009 à 11:19:38  profilanswer
 

n°1865337
Tirkyth
Posté le 24-03-2009 à 15:12:17  profilanswer
 

Je ne pense pas que ça vienne de ça. Je le fais constamment et je n'ai jamais eu de problème.
Quand tu dis que tu as testé ta requête, c'est à l'aide de phpmyadmin ou d'un autre client MySQL ?
Tu dis que la boucle while cesse, est-ce dès la première itération ?
Est-ce que ce qu'il y a après est executé ?
Est-ce que tu as une erreur sur ta page ?


---------------
Mon Feedback !
n°1865562
alain1111
Posté le 25-03-2009 à 09:08:55  profilanswer
 

Bonjour Tirkyth
 
 
Je te remercie de ton aide.
J'ai pris la requete à part, avec phpmyadmin. J'ai aussi fait un essai sur la page... et le champ souhaité s'affiche (donc la requete a marché), sauf que la boucle s'arrete
 
La boucle while cesse dès la première itération.
Le suite de la page est executé normalement, donc la page s'affiche normalement, sauf qu'il n'y a qu'un seul forum (le premier) qui s'affiche (c'est la page index).
 
Voila...
a+

n°1865573
macgawel
Posté le 25-03-2009 à 09:51:21  profilanswer
 

1. Pour rendre ton code plus lisible, plus facile à maintenir et la mise en page plus facilement modifiable, je te conseille d'éviter de trop mélanger la partie récupération de données et la partie affichage...
donc, oui, si tu peux séparer le php du html c'est toujours mieux...
 
Sinon, question bête :
Si la boucle s'arrête, c'est peut-être que la condition n'est plus vérifiée.

Code :
  1. while ($cur_forum = $db->fetch_assoc($result))


Tu es sensé récupérer quoi ?
Un coup de var_dump sur les différents éléments de ton test pourrait te donner quelques indications...

n°1865650
Profil sup​primé
Posté le 25-03-2009 à 13:03:45  answer
 

à part çà, pour tout le monde, merci d'utiliser les bonnes balises de code :
[code=php][/code] pour PHP par exemple.

n°1865670
macgawel
Posté le 25-03-2009 à 13:52:48  profilanswer
 


Il y a un bouton pour [cpp][/cpp], pas pour les autres... :o  
 
...
 
Pour rester dans le HS : on peut trouver la liste des balises "cachées" quelque part ?

n°1865671
Profil sup​primé
Posté le 25-03-2009 à 13:56:37  answer
 

elle a déjà été donnée plusieurs fois mais tous les langages n'y sont pas.
Et [cpp] ne sert à rien en plus, il ne colorise pas comme il faut il faut utiliser [code=cpp] [:sadnoir]

n°1865690
alain1111
Posté le 25-03-2009 à 14:50:35  profilanswer
 

Bonjour  :ouch:  
 
 
C'est mieux maintenant?
 
Par contre je suis assez décu...
Voila les résultats de mes essais:
 
juste avant la fin de boucle (ligne 115 sur mon 1er post) j'ai mis un  
 

Code :
  1. echo "fin de boucle";


 
 
 
Sans ma requete perso...  ca boucle normalement...
Avec ma requete perso, "fin de boucle" s'affiche, et la ca boucle plus, la fin de la page s'execute.
 
J'ai fait un var_dump avant et après ma requete sur $cur_forum.
J'ai constater que le fait de faire ma requete ne change pas ma variable (tabelau?) $cur_forum.  
 
En fait je suis quasi-certain que le fait de faire ma requete perso fait descendre le pointeur utilisé dans la requete du while après la dernière ligne du résultat de cette requete... donc forcément... on sort de la boucle... Pourquoi... je sais pas...
 
enfin voila ou j'en suis... sachant que le je suis à la limite de mes connaissances...
 
Sinon , je voulais faire ma requete, pour faire un système d'url cohérents... perso je connais pas un forum libre qui en natif soit satisfaisant à ce niveau...
 
Bref, ici je sais plus trop quoi faire...
a+


Message édité par alain1111 le 25-03-2009 à 15:00:56
n°1865691
Profil sup​primé
Posté le 25-03-2009 à 14:54:36  answer
 

tu peux pas écrire ton post d'un coup, comme tout le monde ?

n°1865697
alain1111
Posté le 25-03-2009 à 15:01:21  profilanswer
 

:(  j'essaye...

mood
Publicité
Posté le 25-03-2009 à 15:01:21  profilanswer
 

n°1865701
Profil sup​primé
Posté le 25-03-2009 à 15:07:53  answer
 

autre question : pourquoi utilises-tu un objet pour gérer les requêtes SQL (voir ton while) et puis les fonctions du module mysql après :??:

n°1865704
alain1111
Posté le 25-03-2009 à 15:15:44  profilanswer
 

J'en sais rien...
C'est le programme qui est comme ca...
D'ailleurs , pour moi les objets c'est pas ma tasse de thé...

n°1865708
Profil sup​primé
Posté le 25-03-2009 à 15:23:54  answer
 

d'après les commentaires çà vient de tes modifications...

n°1865710
macgawel
Posté le 25-03-2009 à 15:34:21  profilanswer
 

Lignes 77 et 78 (celles que tu as rajoutées) :
Rajoute or die (mysql_error()); et donne-nous le résultat...

n°1865799
alain1111
Posté le 25-03-2009 à 17:07:32  profilanswer
 

Hello,  
 
j'ai trouvé une alternative en modifiant la 1ère requete et en incluant dès le départ les champs que je cherche par le suite...
En tout cas merci beaucoup....


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  mettre une requete dans une boucle qui fonctionne

 

Sujets relatifs
[Débutant] Arret d'une boucle en C++boucle sur les checkbox
Utilisations de variables SQL dans une requêteAméliorer une requête MySQL
[SQL] requete recursive automatiqueCreation d'un requete Register vers un serveur sip avec jain-sip
Header ne fonctionne pluscreation interface requete pour utilisateur
[resolu]Tenir une requete?Requête mysql
Plus de sujets relatifs à : mettre une requete dans une boucle qui fonctionne


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR