probleme d'imbrication de if et while ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : probleme d'imbrication de if et while ?

par guilt92 » 04 juil. 2005, 10:19

As tu essayé juste avec une ligne pour tester ?? De plus je ne comprend pas pourquoi tu dois faire un while : il peut y avoir plusieurs titres et plusieurs texte pour un seul article ?
Enfin, as tu essayé avec un for en récupérant le nombre d'éléments après le
$query_texte = mysql_query($sql_texte); 
?
A priori le code ne comporte pas d'erreur mais c'est donc en faisant des test sur des valeurs comme les tailles des données récupérées que tu pourras trouver je pense...

Bonne chance tiens moi au courant...
while ($result_first = mysql_fetch_array($query_first)) 
{ 

  $exp_date_first = explode("-",$result_first['date']); 
  $exp_annee_first = $exp_date_first[0]; 
  $exp_mois_first = $exp_date_first[1]; 
  $exp_sql_first = "SELECT mois FROM mois WHERE id_mois='$exp_mois_first'"; 
  $exp_query_first = mysql_query($exp_sql_first); 
  $exp_result_first = mysql_fetch_array($exp_query_first); 
                 
  $id_article = $result_first['id_article']; 
  ?> 
  <a name="#<?php echo $result_first['id_article']; ?>"></a> 
  <div class="contenu-titre"> - <?php echo $result_first['nom']; ?>, <?php echo $exp_result_first['mois']." ".$exp_annee_first; ?> - </div> 
  <div class="contenu-texte"> 
  <?php 
  $sql_texte = "SELECT * FROM textes WHERE id_article='$id_article' ORDER BY id_article"; 
  $query_texte = mysql_query($sql_texte); 

  $result_texte = mysql_fetch_array($query_texte)
  ?> 
  <img src="img/fleche.gif" /> <font class="contenu-subtitre"><?php   echo $result_texte['titre']; ?></font> <br /> 
  <?php echo $result_texte['texte']; ?> <br /> 
  <? 
?> 
</div> 
<br /> 
<?
}

par VaN » 04 juil. 2005, 10:07

Voila la partie complete, peut etre cela t'aidera à mieux comprendre ce que je souhaite afficher. Je n'ai pas bien compris ton systeme de booleen.
Mais j'aimerais bien trouver une autre methode que ces while imbriqués
<?php
if (isset($_GET['date'])) 
{ 
  if ($date=="no") 
  {
  $sql_first = "SELECT * FROM articles WHERE id_categorie='$cat' AND first='1' ORDER BY id_article";
  $sql = "SELECT * FROM articles WHERE id_categorie='$cat' AND first='0' ORDER BY id_article";
  $query_first = mysql_query($sql_first);
  $query = mysql_query($sql); 
  } 
  else 
  { 
  $sql_first = "SELECT * FROM articles WHERE id_categorie='$cat' AND date='$date' AND first='1' ORDER BY id_article";
  $sql = "SELECT * FROM articles WHERE id_categorie='$cat' AND date='$date' AND first='0' ORDER BY id_article";
  $query_first = mysql_query($sql_first);
  $query = mysql_query($sql);
  } 
} 
else 
{ 
$sql_first = "SELECT * FROM articles WHERE id_categorie='$cat' AND first='1' ORDER BY id_article";
$sql = "SELECT * FROM articles WHERE id_categorie='$cat' AND first='0' ORDER BY id_article";

$query_first = mysql_query($sql_first);
$query = mysql_query($sql) OR die("Erreur : ".mysql_error());
} 

$rows = mysql_num_rows($query)+mysql_num_rows($query_first);

if ($rows==0) 
{ 
echo "<font class=\"texte-bienvenue\">No article found.</font>";
} 
                 
while ($result_first2 = mysql_fetch_array($query_first)) 
{ 
echo ("<a href=\"#".$result_first2['id_article']."\">".$result_first2['nom']."</a><br />");
} 
while ($result2 = mysql_fetch_array($query)) 
{ 
echo ("<a href=\"#".$result2['id_article']."\">".$result2['nom']."</a><br />");
} 
while ($result_first = mysql_fetch_array($query_first)) 
{ 

  $exp_date_first = explode("-",$result_first['date']);
  $exp_annee_first = $exp_date_first[0];
  $exp_mois_first = $exp_date_first[1];
  $exp_sql_first = "SELECT mois FROM mois WHERE id_mois='$exp_mois_first'";
  $exp_query_first = mysql_query($exp_sql_first);
  $exp_result_first = mysql_fetch_array($exp_query_first);
				
  $id_article = $result_first['id_article'];
  ?>
  <a name="#<?php echo $result_first['id_article']; ?>"></a>
  <div class="contenu-titre"> - <?php echo $result_first['nom']; ?>, <?php echo $exp_result_first['mois']." ".$exp_annee_first; ?> - </div>
  <div class="contenu-texte">
  <?php
  $sql_texte = "SELECT * FROM textes WHERE id_article='$id_article' ORDER BY id_article";
  $query_texte = mysql_query($sql_texte);

  while ($result_texte = mysql_fetch_array($query_texte)) 
  { 
  ?>
  <img src="img/fleche.gif" /> <font class="contenu-subtitre"><?php echo $result_texte['titre']; ?></font> <br />
  <?php echo $result_texte['texte']; ?> <br />
  <?
  } 
?>
</div>
<br />
<?
} 
while ($result = mysql_fetch_array($query)) 
{ 

  $exp_date = explode("-",$result['date']);
  $exp_annee = $exp_date[0];
  $exp_mois = $exp_date[1];
  $exp_sql = "SELECT mois FROM mois WHERE id_mois='$exp_mois'";
  $exp_query = mysql_query($exp_sql);
  $exp_result = mysql_fetch_array($exp_query);
  $id_article = $result['id_article'];
  ?>
  <a name="#<?php echo $result['id_article']; ?>"></a>
  <div class="contenu-titre"> - <?php echo $result['nom']; ?>, <?php echo $exp_result['mois']." ".$exp_annee; ?> - </div>
  <div class="contenu-texte">
  <?php
  $sql_texte = "SELECT * FROM textes WHERE id_article='$id_article' ORDER BY id_article";
  $query_texte = mysql_query($sql_texte);

  while ($result_texte = mysql_fetch_array($query_texte)) 
  { 
  ?>
  <img src="img/fleche.gif" /> <font class="contenu-subtitre"><?php echo $result_texte['titre']; ?></font> <br />
  <?php echo $result_texte['texte']; ?> <br />
  <?
  } 
?>
</div>
<br />
<?
} 
?>

par guilt92 » 04 juil. 2005, 09:35

Est ce que tu ne peux pas faire cela avec un booleen ?
Je ne suis pas sur d avoir compris ton probleme mais si tu as une variable booleenne a false tant que la premiere boucle n'est pas finie et qui passe a true ensuite tu pourrais afficher les données de ta base de données 2 fois en choisissant quelles infos tu mets en fonction du booleen...

J espere que ca pourra t aider mais sinon je veux bien un peu plus de précisions sur ton probleme, normalement il existe une solution autre que les deux while imbriqués

par VaN » 04 juil. 2005, 09:28

Je ne penses pas car ce que je souhaite faire, c'est ça :

D'abord afficher une boucle de mes entrées de ma bdd, sur lesquelles je vais créer des liens, pour faire des ancres.
Puis afficher une boucle de mes entrées bdd, avec toutes les infos, titre, texte, etc..

Et dans chacun de ces 2 boucles, il faut que la premiere entrée affichée soit celle ou le champ $first est egal a 1 dans la bdd. donc il me faut 2 requete a chaque fois, une pour selectionner la ligne first=1 et une autre pour toutes les autre lignes.

mais en ce moment, il ne m'affiche que les ancres, pas la deuxieme boucle pour les info completes : /

par Cyrano » 01 juil. 2005, 15:40

deux while imbriqués, c'est assez innattendu comme construction, d'autant que ça veut dire qu'à chaque tour de boucle du premier while, tu répètes la même seconde boucle... :-k

À moins que tu n'exécutes une requête dans le premier while avant d'exécuter la boucle secondaire ?

Je dirais en voyant ça que tu peux probablement régler le problème en SQL avec une seule requête appropriée.

probleme d'imbrication de if et while ?

par VaN » 01 juil. 2005, 14:56

if (isset($_GET['date'])) 
{
  if ($date=="no") 
  {
  }
  else 
  {
  }
}
else 
{
}

if ($rows==0) 
{
}
				
while ($result_first2 = mysql_fetch_array($query_first)) 
{
}
while ($result2 = mysql_fetch_array($query)) 
{
}
while ($result_first = mysql_fetch_array($query_first))
{
  while ($result_texte = mysql_fetch_array($query_texte)) 
  {
  }
}
while ($result = mysql_fetch_array($query)) 
{
  while ($result_texte = mysql_fetch_array($query_texte)) 
  {
  }
}
Quelqu'un voit il un probleme d'imbrication, ou une erreur quelconque ?

Est ce que
while ($result_first = mysql_fetch_array($query_first))
{
  while ($result_texte = mysql_fetch_array($query_texte)) 
  {
  }
}
pose probleme ? On dirait car mes 2 while ($result_texte = mysql_fetch_array($query_texte)) {} n'affichent rien : /