Probleme de boucle en php

bilane Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   -  
bilane Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je voudrais afficher des thèmes classés par ordre alphabétique et qui seront présenter comme ceci :
A
Adhésion
Agrément
B
Banque
C
Commission
Cotisation
etc…
le problème ce que je n’arrive pas à les afficher correctement. Si vous pouvez m’aider.
Merci d’avance.

Le code :

<?php
// on se connecte à MySQL
require('connect.php.inc');
$db=connect();

echo '<h4><center><b>Recherche thématique des textes</b></center></h4>';
echo '<table>';
echo '<tr>';
echo '<td>';

$sql = "SELECT * FROM theme order by libelle_theme asc ";

$req1 = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$resu = mysql_num_rows($req1);
$i="A";
$res="Z";
WHILE ($i < $res){
echo "<h4><b>$i</b></h4>";
while($data = mysql_fetch_assoc($req1))
{
$n_th=$data['num_theme'];
$lib_th=$data['libelle_theme'];
echo "- <a href=recherchethemeessaie.php?num_th=$n_th>$lib_th</a></br>";
$i++;
}
echo '</td>'; echo '</tr>';
echo '</table>';
}
mysql_close();
?>
A voir également:

1 réponse

Dalida Messages postés 6728 Date d'inscription   Statut Contributeur Dernière intervention   922
 
salut,

en vrac :
- tu ne devrais pas utiliser <center> et <b> pour mettre en page mais une css, idem pour le tabeau.
- tu ne dois JAMAIS utiliser 'SELECT *' dans une requête mais toujours citer nommément les champs que tu souhaites récupérer.

pour l'erreur, elle doit venir de la connexion. faudrait voir ce qu'il y a dans ton include() et je ne m'y retrouve pas.

mais de toute façon je ne comprends pas ce que tu fais.
tu fais une boucle de A à Z, ok. mais le problème c'est qu'à chaque lettre tu devrais faire une requête sur la bdd pour savoir si elle contient des champs commençant par la dite lettre. cela permet aussi de ne pas afficher les lettres "vides".
0
bilane Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour Dalida,
Merci de votre aide, ça marche.
Mais, j’ai un autre problème si vous pouvez m’aider.
Je voulais afficher mes enregistrements sous forme d’un tableau de 3 lignes et 4 colonnes.
Mais la cellule (1,4) reste vide et il ya une quatrième ligne qui s’affiche.


Voici le code :

<?php require('connect.php.inc');
$db=connect(); ?>

<body>

<div id="corps">
<p><?php include("titre.php"); ?></p>
<p> </p>
<p><?php


$an=2006;

echo " ANNEE ".$an."<br><br>";


$req = mysql_query("SELECT DISTINCT num_jo, date_jo, type_jo FROM jo where DATE_FORMAT(date_jo,'%Y')='$an' ORDER BY date_jo ASC;");
$res = mysql_num_rows($req);
$i=0; $mois = ""; $j=0; $lien = "";

$nb_col = 4;
$k=0;

echo '<table id="tabjo" width="75%" border="1" cellspacing="0" align="center">';
WHILE ($i < $res){

$num = mysql_result($req,$i,"num_jo");
$type = mysql_result($req,$i,"type_jo");
$dat = mysql_result($req,$i,"date_jo");
list($year, $month, $day) = explode("-", $dat);
$months = array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin",
"Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
$aux = $months[$month-1];

if ($k==$nb_col) {
echo "</tr>";
$k=0;
}
if ($k==0) {
echo "<tr>";
}

if ($aux != $mois) { if ($mois != '') echo "<td valign='top' align='center' width=33% height=1 ><font color='blue'>".$mois."<br><br>".$lien."</font></td>"; $mois = $aux; $lien = ""; $k++;}

if ( $type == "n")
{$lien .= '<a href=jof.php?n='.$num.'&type='.$type.'&date='.$dat.'> n° '.$num.'</a><br>'; }
else { if ( $type == "sp")
{$lien .= '<a href=jof.php?n='.$num.'&type='.$type.'&date='.$dat.'> spécial n° '.$num.'</a><br>'; }
else { if ( $type == "spelec")
{$lien .= '<a href=jof.php?n='.$num.'&type='.$type.'&date='.$dat.'>spécial élecion n° '.$num.'</a><br>'; }
else { if ( $type == "spreg")
{$lien .= '<a href=jof.php?n='.$num.'&type='.$type.'&date='.$dat.'> spécial élection régional n° '.$num.'</a><br>'; }
else { if ( $type == "excep")
{$lien .= '<a href=jof.php?n='.$num.'&type='.$type.'&date='.$dat.'> exceptionnel n° '.$num.'</a><br>'; }}}}}


$i++;

} echo "<td valign='top' align='center' width=33% height=1><font color='blue'>".$mois. "<br><br>".$lien."</td></font>";
if ($k>0 && $k<$nb_col) {
while ($k<$nb_col) {
echo "<td> </td>";
$k++;
}
echo "</tr>";
}
echo '</table> <br><br><br> ';
mysql_close();
?>


merci d'avance
0
Dalida Messages postés 6728 Date d'inscription   Statut Contributeur Dernière intervention   922
 
salut,

peux-tu me coller le html obtenu ? ce sera plus rapide pour moi que d'interpréter ton code.

à la première lecture je ne comprends pas :
if ($k==$nb_col) {
echo "</tr>";
$k=0;
}

pourquoi fermerais-tu la balise '<tr>' alors qu'elle n'a pas encore pu être ouverte ?
enfin je crois... ;o)
0
bilane Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   > Dalida Messages postés 6728 Date d'inscription   Statut Contributeur Dernière intervention  
 
salut,

excuse moi, j'ai eu un probleme de connexion d'internet ces derniers jours, le html obtenu est un tableau comme ceci :

Janvier Février Mars
n° 1 n° 3 n° 5
n° 2 n° 4 n° 6

Avril Mai Juin Juillet
n° 7 n° 9 n° 11 n°13
n° 8 n° 10 n° 12 n°14

Aoûtl Septembre Octobre Novembre
n° 15 n° 17 n° 19 n°21
n° 16 n° 18 n° 20 n° 22

Décembre
n°23
n°24

Merci d'avance
0