8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,
j'ai un pb avec une boucle while et l'entrées ou non de données dans un tableau.

Voilà, j'ai une base donnée qui contient 3 champs (id, titre et texte)
Ce que je souhaite réaliser, c'est un bloc qui n'existe que s'il y a des entrée dans ces tables.
Jusque là ça va. Mais où cela se complique, c'est que je voudrais utiliser une div avec un titre.

Ce que je veux obtenir :
<div id"conteneur">
<h3>Titre du bloc</h3>
<h4>Titre de la première entrée</h4>
<p>Texte de la première entrée</p>
<h4>Titre de la deuxième entrée</h4>
<p>Texte de la deuxième entrée</p>
...
</div>


or pour l'instant, j'obtiens ceci :
<div id"conteneur">
<h3>Titre du bloc</h3>
<h4>Titre de la première entrée</h4>
<p>Texte de la première entrée</p>
</div>
<div id"conteneur">
<h3>Titre du bloc</h3>
<h4>Titre de la deuxième entrée</h4>
<p>Texte de la deuxième entrée</p>
</div>


Si quelqu'un peut me donner un coup de pouce.
Voilà mon code

<?php
{
require_once('config.php');
$requetebd = mysql_query("SELECT * from promo") or die ($errormessage);
while($data = mysql_fetch_array($requetebd))

      if (($requetebd != '') && (strtolower($requetebd) != 'null') && (strlen(trim($requetebd)) > 0))
      {
		echo"<div id=\"conteneur\">"; 
		echo"<h3>Titre du bloc</h3>";
			
			if (($requetebd != '') && (strtolower($requetebd) != 'null') && (strlen(trim($requetebd)) > 0))
		      {
				echo"<h4>$data[titre]</h4>"; 
				echo"<p>$data[texte]</p></br>"; 
		      }
		      else
		      {
		      }
			echo"</div>"; 		      
      }
      else
      {
      }
} 
?>


Si quelqu'un peux me donner un coup de pouce Smiley ohwell
Modifié par Gwendall (10 Feb 2009 - 14:28)
Tout ce qui est dans la boucle while sera répété à chaque occurence.

Enlève les codes qui ne doivent apparaitre qu'une seule fois de la boucle.

Pour tester s'il y a des résulté à ta requète, le plus simple c'est de compter les lignes retournées par celle-ci (voire la doc de PHP pour mysql_numrows() (ou une ortographe similaire)).
Merci Laurie-Anne,

C'est bon j'ai trouvé la soluce :

<?php
{
require_once('config.php');
$Resultat = mysql_query("SELECT * from table");
for ($Compteur=0 ; $Compteur<mysql_numrows($Resultat) ; $Compteur++)
    {
			echo"<div id=\"conteneur\">"; 
			echo"<h3>Titre du bloc</h3>"; 
	}
} 
?>

<?php
{
$requetebd = mysql_query("SELECT * from table") or die ($errormessage);
while($data = mysql_fetch_array($requetebd))

      if (($requetebd != '') && (strtolower($requetebd) != 'null') && (strlen(trim($requetebd)) > 0))
      {
			echo"<h4>$data[titre]</h4>"; 
			echo"<p>$data[texte]</p></br>"; 
      }
      else
      {
      }
} 
?>
<?php
{
$Resultat = mysql_query("SELECT * from table");
for ($Compteur=0 ; $Compteur<mysql_numrows($Resultat) ; $Compteur++)
    {
			echo"</div>"; 
	}
} 
?>

Modifié par Gwendall (10 Feb 2009 - 12:24)
Bon en fait, ça ne marche pas mieux.

J'ai toujours le pb de recopie de la div"conteneur" et du titre et de la div du bas.
suivant le nombre d'entrées.
En fait, je souhaiterai contraindre à 1 seul affichage la prmière et dernière partie du script.
J'ai essayé avec $Compteur=1, mais cela ne change rien.
Lorsque je n'ai qu'une entrée, ce n'est pas affiché.
Lorsque j'ai deux entrées, ça m'affiche bien q'une div
lorsque j'ai 3 entrées, j'ai 2 div...

Si quelqu'un a une idée.

Merci
Cette fois-ci ça semble bon !!!

<?php
{
require_once('config.php');
$Resultat = mysql_query("SELECT * from table");
$num_rows = mysql_num_rows($Resultat);

if ($num_rows > 0) {
			echo"<div id=\"conteneur\">"; 
			echo"<h3><span>Titre du bloc</span></h3>"; 
	}
else {}
} 
?>

<?php
{
$requetebd = mysql_query("SELECT * from table") or die ($errormessage);
while($data = mysql_fetch_array($requetebd))

      if (($requetebd != '') && (strtolower($requetebd) != 'null') && (strlen(trim($requetebd)) > 0))
      {
			echo"<h4>$data[titre]</h4>"; 
			echo"<p>$data[texte]</p></br>"; 
      }
      else
      {
      }
} 
?>
<?php
{
$Resultat = mysql_query("SELECT * from table");
$num_rows = mysql_num_rows($Resultat);

if ($num_rows > 0) {
			echo"</div>"; 
	}
else {}
} 
?>