Probleme de boucle en php

Fermé
bilane Messages postés 13 Date d'inscription samedi 2 septembre 2006 Statut Membre Dernière intervention 21 mars 2007 - 10 mars 2007 à 07:12
bilane Messages postés 13 Date d'inscription samedi 2 septembre 2006 Statut Membre Dernière intervention 21 mars 2007 - 17 mars 2007 à 14:55
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 mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 920
10 mars 2007 à 11:18
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 samedi 2 septembre 2006 Statut Membre Dernière intervention 21 mars 2007
11 mars 2007 à 08:51
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 mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 920
11 mars 2007 à 14:08
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 samedi 2 septembre 2006 Statut Membre Dernière intervention 21 mars 2007 > Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016
17 mars 2007 à 14:55
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