changer l'affich.date et ne pas afficher valeur dans un tableau

changer l'affich.date et ne pas afficher valeur dans un tableau - PHP - Programmation

Marsh Posté le 10-10-2008 à 01:05:56    

Bonjour à tous,  
 
je débute en php et je tatonne, voici ma question : sur cette page http://www.stalag-iiib.fr/blog/test9.php j'affiche le contenu d'une base (mysql, hébergée chez OVH).
 
Mes pb :
- j'aimerai afficher la date "à la française" (jj/mm/aaaa)
- quand j'ai une valeur = 0, je voudrais ne rien afficher, plutôt que d'afficher 0
 
Voici le code, que j'ai trouvé d'ailleurs sur un site :
// requête SQL qui compte le nombre total d'enregistrements dans la table et qui
//récupère tous les enregistrements
$select = 'SELECT immat_stalag,nom,prenom_premier,naissance_date,naissance_lieu,naissance_dept,residence_commune,residence_dept FROM fichierpg';
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result);
 
// si on a récupéré un résultat on l'affiche.
if($total) {
    // début du tableau
    echo '<table bgcolor="#000000">'."\n";
        // première ligne on affiche les titres prénom et surnom dans 2 colonnes
        echo '<tr>';
        echo '<td bgcolor="#CCCCCC"><b><u>Matricule</u></b></td>';
        echo '<td bgcolor="#CCCCCC"><b><u>Nom</u></b></td>';
        echo '<td bgcolor="#CCCCCC"><b><u>Prénom</u></b></td>';
        echo '<td bgcolor="#CCCCCC"><b><u>Né le</u></b></td>';
        echo '<td bgcolor="#CCCCCC"><b><u>à</u></b></td>';
        echo '<td bgcolor="#CCCCCC"><b><u>Dept.</u></b></td>';
        echo '<td bgcolor="#CCCCCC"><b><u>Résidant à</u></b></td>';
        echo '<td bgcolor="#CCCCCC"><b><u>Dept.</u></b></td>';
        echo '</tr>'."\n";
    // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
    while($row = mysql_fetch_array($result)) {
        echo '<tr>';
        echo '<td bgcolor="#FFFFFF">'.$row['immat_stalag'].'</td>';
        echo '<td bgcolor="#FFFFFF">'.$row['nom'].'</td>';
        echo '<td bgcolor="#FFFFFF">'.$row['prenom_premier'].'</td>';
        echo '<td bgcolor="#FFFFFF">'.$row['naissance_date'].'</td>';
        echo '<td bgcolor="#FFFFFF">'.$row['naissance_lieu'].'</td>';
        echo '<td bgcolor="#FFFFFF">'.$row['naissance_dept'].'</td>';
        echo '<td bgcolor="#FFFFFF">'.$row['residence_commune'].'</td>';
        echo '<td bgcolor="#FFFFFF">'.$row['residence_dept'].'</td>';
        echo '</tr>'."\n";
    }
    echo '</table>'."\n";
    // fin du tableau.
}
else echo 'Pas d\'enregistrements dans cette table...';
 
// on libère le résultat
mysql_free_result($result);
 
Pour l'histoire des 0 ou 0000-00-00, je n'arrive pas à éviter ces valeurs dans la base, quand j'importe mon CSV source, et je n'ai pas trouvé comment dire que le champ ne doit rien contenir si il n'y a pas d'infos à importer.
 
Merci de votre aide :-)

Reply

Marsh Posté le 10-10-2008 à 01:05:56   

Reply

Marsh Posté le 10-10-2008 à 08:55:30    

Bonjour,
 
Pour la première question :

Code :
  1. <?php
  2.   $select = 'SELECT immat_stalag,
  3.                     nom,
  4.                     prenom_premier,
  5.                     DATE_FORMAT(naissance_date, '%d/%m/%Y') as date_naissance,
  6.                     naissance_lieu,
  7.                     naissance_dept,
  8.                     residence_commune,
  9.                     residence_dept
  10.              FROM fichierpg';
  11. ?>


Et tu changes cette ligne :

Code :
  1. echo '<td bgcolor="#FFFFFF">'.$row['naissance_date'].'</td>';


par :

Code :
  1. echo '<td bgcolor="#FFFFFF">'.$row['date_naissance'].'</td>';


Pour la deuxième question, exemple :

Code :
  1. echo '<td bgcolor="#FFFFFF">' . ($row['date_naissance'] != '00/00/0000') ? $row['date_naissance'] : ' ' . '</td>';


D'autre part, les multiples 'echo' prennent du temps. Tu pourrais tout simplement mettre :

Code :
  1. <?php
  2. // si on a récupéré un résultat on l'affiche.
  3. if($total)
  4. {
  5.   // début du tableau
  6.   // première ligne on affiche les titres prénom et surnom dans 2 colonnes
  7.   echo '<table bgcolor="#000000">' . "n" . '
  8.           <tr>
  9.             <td bgcolor="#CCCCCC"><b><u>Matricule</u></b></td>
  10.             <td bgcolor="#CCCCCC"><b><u>Nom</u></b></td>
  11.             <td bgcolor="#CCCCCC"><b><u>Prénom</u></b></td>
  12.             <td bgcolor="#CCCCCC"><b><u>Né le</u></b></td>
  13.             <td bgcolor="#CCCCCC"><b><u>à</u></b></td>
  14.             <td bgcolor="#CCCCCC"><b><u>Dept.</u></b></td>
  15.             <td bgcolor="#CCCCCC"><b><u>Résidant à</u></b></td>
  16.             <td bgcolor="#CCCCCC"><b><u>Dept.</u></b></td>
  17.           </tr>' . "n";
  18.   // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.     
  19.   while($row = mysql_fetch_array($result))
  20.   {
  21.     echo '<tr>
  22.             <td bgcolor="#FFFFFF">' . $row['immat_stalag'] . '</td>
  23.             <td bgcolor="#FFFFFF">' . $row['nom'] . '</td>
  24.             <td bgcolor="#FFFFFF">' . $row['prenom_premier'] . '</td>
  25.             <td bgcolor="#FFFFFF">' . $row['date_naissance'] . '</td>
  26.             <td bgcolor="#FFFFFF">' . $row['naissance_lieu'] . '</td>
  27.             <td bgcolor="#FFFFFF">' . $row['naissance_dept'] . '</td>
  28.             <td bgcolor="#FFFFFF">' . $row['residence_commune'] . '</td>
  29.             <td bgcolor="#FFFFFF">' . $row['residence_dept'] . '</td>
  30.           </tr>' . "n";
  31.   }
  32.   echo '</table>' . "n";
  33.   // fin du tableau.
  34. }
  35. ?>

Reply

Marsh Posté le 10-10-2008 à 09:43:45    

super, je regarde si ça marche, ça c'est de la réponse, merci mille fois :-)

Reply

Marsh Posté le 10-10-2008 à 09:58:30    

Bon, ça marche pas :-(
 
voici le message d'erreur :
Parse error: syntax error, unexpected '%' in /home.36/s/t/a/stalagii/www/blog/test8.php on line 54
 
Ca correspond à cette ligne :
DATE_FORMAT(naissance_date, '%d/%m/%Y') as date_naissance,
 
J'ai mis des - à la place des /, mais rien n'y fait
 
Serait-ce un pb lié à php, qui pense que c'est une fonction php, alors que c'est un appel en base mysql ?
 
AUtre détail : dans ma base, les dates sont notées de cette façon : 1911-06-17


Message édité par cageandfish le 10-10-2008 à 10:07:42
Reply

Marsh Posté le 10-10-2008 à 10:11:42    

Désolé, j'ai oublié d'échapper les apostrophes :
DATE_FORMAT(naissance_date, \'%d/%m/%Y\') as date_naissance,

Reply

Marsh Posté le 10-10-2008 à 10:14:38    

tu peux montrer un peu plus de code ?  
surtout la partie autour du DATE_FORMAT


---------------

Reply

Marsh Posté le 10-10-2008 à 10:23:02    

j'ai changé la ligne, je n'ai plus l'erreur, mais la page s'affiche bizarrement, cf. http://www.stalag-iiib.fr/blog/test8.php  
 
la date s'affiche hors du tableau, et les 00/00/0000 s'affichent toujours

Reply

Marsh Posté le 10-10-2008 à 10:40:09    

un bout de code :
    while($row = mysql_fetch_array($result)) {
        echo '<tr>';
        echo '<td bgcolor="#FFFFFF">'.$row['immat_stalag'].'</td>';
        echo '<td bgcolor="#FFFFFF">'.$row['nom'].'</td>';
        echo '<td bgcolor="#FFFFFF">'.$row['prenom_premier'].'</td>';
  echo '<td bgcolor="#FFFFFF">' . ($row['date_naissance'] != '00/00/0000') ? $row['date_naissance'] : ' ' . '</td>';
        echo '<td bgcolor="#FFFFFF">'.$row['naissance_lieu'].'</td>';
        echo '<td bgcolor="#FFFFFF">'.$row['naissance_dept'].'</td>';
        echo '<td bgcolor="#FFFFFF">'.$row['residence_commune'].'</td>';
        echo '<td bgcolor="#FFFFFF">'.$row['residence_dept'].'</td>';
        echo '</tr>'."\n";

Reply

Marsh Posté le 10-10-2008 à 11:43:08    

Mets cette ligne à la place de l'autre :
        echo '<td bgcolor="#FFFFFF">' . (($row['date_naissance'] != '00/00/0000') ? $row['date_naissance'] : ' ') . '</td>' ."\n";

Reply

Marsh Posté le 10-10-2008 à 11:47:36    

YOUPI, ça marche :-)
 
cf. http://www.stalag-iiib.fr/blog/test13.php
 
merci, merci, merci !!!!

Reply

Marsh Posté le 10-10-2008 à 11:47:36   

Reply

Marsh Posté le 10-10-2008 à 12:42:51    

J'avais oublié de mettre l'expression entre parenthèses. Penses à le faire si tu ajoutes le même test sur d'autre colonnes.

Reply

Marsh Posté le 10-10-2008 à 18:06:46    

j'ai appliqué la même méthode sur d'autres lignes, ça marche parfaitement, merci encore.
 
Maintenant, je vais devoir m'attaquer au classement par colonne et à la pagination, ainsi qu'à des formulaires de recherche, car si la base ne contient que 150 noms aujourd'hui, elle en contiendra environ... 20 000 ! mais d'ici 1 an tout de même.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed