[mysql] probleme d'affichage de variable

Fermé
bilane Messages postés 13 Date d'inscription samedi 2 septembre 2006 Statut Membre Dernière intervention 21 mars 2007 - 20 sept. 2006 à 10:06
bilane Messages postés 13 Date d'inscription samedi 2 septembre 2006 Statut Membre Dernière intervention 21 mars 2007 - 27 sept. 2006 à 10:26
Bonjour à tous,

Je voudrais afficher la liste des textes classée par année. Mais le problème, il m’affiche pour chaque texte l’année comme ceci :

ANNEE 2006
- 2006-01-13 : texte n° 003

ANNEE 2006
- 2006-01-11 : texte n° 002

ANNEE 2006
- 2006-01-10 : texte n° 001

ANNEE 2004
- 2004-01-15 : texte n° 0025

Je voudrais comme ceci :

ANNEE 2006
- 2006-01-13 : texte n° 003
- 2006-01-11 : texte n° 002
- 2006-01-10 : texte n° 001

ANNEE 2004
- 2004-01-15 : texte n° 0025


Code :

<?php
// on se connecte à MySQL
require('connect.php.inc');
$db=connect();
$req = mysql_query('SELECT DISTINCT nature_texte FROM texte');

echo "<h4><center><b><u>Recherche par nature du texte</u></b></center></h4>";
echo "<form method='POST'>";
echo '<table>';
echo '<tr>';
echo '<td> Choississez la nature du texte :  ';
echo "<select name='nature'>";
while($data = mysql_fetch_assoc($req))

{
$nature=$data['nature_texte'];

if($nature == $_POST['nature']) {
echo "<option value=\"$nature\" selected >$nature</option>";
} else {
echo "<option value=\"$nature\">$nature</option>";

}
}
echo "</select>";

echo '</td>';
echo '<td>';
echo "<input type='submit' value='Valider' name='B1' style='border-style: solid; border-width: 1; padding: 1'>   ";
echo '</td>';
echo '</tr>';
echo '</table>';
echo "</form>";


if (isset($_POST['nature'])){
$nature=$_POST['nature'];
//echo "<h1><b>$nature</b></h1>";

$sql = "SELECT texte.id_jo, id_texte, num_texte, date_texte, nature_texte, commentaire_texte FROM texte where nature_texte='$nature' ORDER BY date_texte DESC, num_texte DESC ";
$req1 = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$annee="";
while($data1 = mysql_fetch_assoc($req1))
{
$id_texte=$data1['id_texte'];
$num=$data1['num_texte'];
$jo=$data1['id_jo'];
$date=$data1['date_texte'];
list($year, $month, $day) = explode("-", $date);
$months = array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin",
"Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
$mois = $months[$month-1];


echo "<font size=3px><b><center>ANNEE " .$year." </center></b></font><br><br>";
echo '- <a jo/'.$jo.'/'.$num.'.php>'.$data1['date_texte'].' : '.$data1['nature_texte'].' n° '.$data1['num_texte'].' </a></br>';

}
}

mysql_close();

?>

Merci d’avance.

4 réponses

ceddec Messages postés 148 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 10 mars 2012 82
20 sept. 2006 à 17:10
Bonjour,

Moi je ferais d'abord une requete pour obtenir toutes les années différentes. Ensiute pour chaque année, je récupérerais les textes correspondants et je les afficherais. Le code deviendrait ca mais c'est à tester (l'idée fonctionne mais le code devrait fonctionner):

<?php
// on se connecte à MySQL
require('connect.php.inc');
$db=connect();
$req = mysql_query('SELECT DISTINCT nature_texte FROM texte');

echo "<h4><center><b><u>Recherche par nature du texte</u></b></center></h4>";
echo "<form method='POST'>";
echo '<table>';
echo '<tr>';
echo '<td> Choississez la nature du texte :  ';
echo "<select name='nature'>";
while($data = mysql_fetch_assoc($req))

{
$nature=$data['nature_texte'];

if($nature == $_POST['nature']) {
echo "<option value=\"$nature\" selected >$nature</option>";
} else {
echo "<option value=\"$nature\">$nature</option>";

}
}
echo "</select>";

echo '</td>';
echo '<td>';
echo "<input type='submit' value='Valider' name='B1' style='border-style: solid; border-width: 1; padding: 1'>   ";
echo '</td>';
echo '</tr>';
echo '</table>';
echo "</form>";


if (isset($_POST['nature'])){
$nature=$_POST['nature'];
//echo "<h1><b>$nature</b></h1>"; 

$sql1="SELECT date_texte FROM texte where nature_texte='$nature' ORDER BY date_texte DESC"
$req1 = mysql_query($sql1) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

$listeYear= array();
while($data1 = mysql_fetch_assoc($req1))
{
  $tmp= explode("-", $data1['date_texte']);
  if(!in_array($tmp[0],$listeYear))
    array_push($listeYear,$tmp[0]);
}

foreach($listeYear as $year)
{
    $sql = "SELECT texte.id_jo, id_texte, num_texte, date_texte, nature_texte, commentaire_texte FROM texte where nature_texte='$nature' AND date_texte LIKE '$year%' ORDER BY date_texte DESC, num_texte DESC ";
    $req2 = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    $annee="";
    while($data1 = mysql_fetch_assoc($req2))
    {
    $id_texte=$data1['id_texte'];
    $num=$data1['num_texte'];
    $jo=$data1['id_jo'];
    $date=$data1['date_texte'];
    list($year2, $month, $day) = explode("-", $date);
    $months = array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin",
    "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
    $mois = $months[$month-1];
    
    echo "<font size=3px><b><center>ANNEE " .$year." </center></b></font><br><br>";
    echo '- <a jo/'.$jo.'/'.$num.'.php>'.$data1['date_texte'].' : '.$data1['nature_texte'].' n° '.$data1['num_texte'].' </a></br>';
}
0
bilane Messages postés 13 Date d'inscription samedi 2 septembre 2006 Statut Membre Dernière intervention 21 mars 2007
21 sept. 2006 à 08:23
merci de votre aide, mais ca marche pas, j'ai toujours le meme probleme.
excuse moi mais je suis debutante, si vous pouvez me proposer une autre solution, ca serait sympa.

merci.
0
ceddec Messages postés 148 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 10 mars 2012 82
21 sept. 2006 à 17:18
Bonjour,

il faut que tu changes de place la ligne qui affiche ANNEE 2000 (l'avant dernier echo) :
echo "<font size=3px><b><center>ANNEE " .$year." </center></b></font><br><br>";

il faut le mettre avant le while:

while($data1 = mysql_fetch_assoc($req2))
0
bilane Messages postés 13 Date d'inscription samedi 2 septembre 2006 Statut Membre Dernière intervention 21 mars 2007
24 sept. 2006 à 09:19
bonjour,

merci beaucoup , ca marche maintenant.
0
bilane Messages postés 13 Date d'inscription samedi 2 septembre 2006 Statut Membre Dernière intervention 21 mars 2007
26 sept. 2006 à 08:48
Bonjour, j’ai le même problème d'affichage de variable que l’autre fois j’ai essayé d’adapter votre méthode mais ça ne marche pas. Pourriez vous m’aider.
Code :

<?php

if (isset($_GET['n'])){
$id=$_GET['n'];

$req1 = mysql_query("SELECT id_jo, num_jo,date_jo FROM jo where id_jo='$id'");
while($data1 = mysql_fetch_assoc($req1)) {
$id= $data1['id_jo'];
$num= $data1['num_jo'];
$date=$data1['date_jo'];
list($year, $month, $day) = explode("-", $date);
$months = array("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre");
$mois = $months[$month-1];


echo "<font size=3px><b>Journal officiel n° ".$num. " du " .$day ." " .$mois." ".$year. "</b></font><br><br>";

}
$req2 = mysql_query("SELECT * FROM texte where id_jo='$id' ORDER BY num_inst ASC ");
while($data = mysql_fetch_assoc($req2)) {
$id_texte=$data['id_texte'];
$id=$data['id_jo'];
$inst=$data['num_inst'];
$dat=$data['date_texte'];
list($year, $month, $day) = explode("-", $dat);
$months = array("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre");
$mois = $months[$month-1];
$dat = $day." ".$mois." ".$year;


$req3 = mysql_query("SELECT * FROM institution WHERE num_inst='$inst'");
$listeinst= array();
while ($data3 = mysql_fetch_assoc($req3))
{$insti= $data3['num_inst'];
if(!in_array($insti[0],$listeinst))
array_push($listeinst,$insti[0]);
}

foreach($listeinst as $inst)
{

echo "<font color=#800000> <u>" .$inst. "</u>"; echo "<br><br>";



echo '<font size=3px><a href=http://127.0.0.1/siteofficiel/jo/'.$year.'/'.$id.'/'.$id_texte.'.php>'.$dat.' : '.$data['nature_texte'].' n° '.$data['num_texte'] .$data['commentaire_texte'].'</a></font></br>';
echo "<br>"; echo'</tr>';

}}}
mysql_close();
?>

Merci d’avance.
0
ceddec Messages postés 148 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 10 mars 2012 82
26 sept. 2006 à 17:31
Bonjour

Je viens de réinstaller mon pc donc je ne peux pas tester le code et voir ce qui s'affiche mal.
Mais je pense que c'est le $inst qui va pas?
Si c'est le $inst qui s'affiche plusieurs fois alors qu'une seule est souhaitée, il faut l'afficher avant le foreach. Donc il faut deplacer la ligne :
echo "<font color=#800000> <u>" .$inst. "</u>"; echo "<br><br>";

Désolé si je répond à coté
0
bilane Messages postés 13 Date d'inscription samedi 2 septembre 2006 Statut Membre Dernière intervention 21 mars 2007
27 sept. 2006 à 10:26
Bonjour ceddec,

merci de votre aide, j'ai essayé mais ca marche pas.
si vous avez une autre solution, merci.
0