Pb avec formats dates

Pb avec formats dates - PHP - Programmation

Marsh Posté le 06-05-2011 à 10:21:10    

Bonjour ! :)
J'ai un problème avec les formats des dates, je m'explique :
J'ai une table ab_jourferm avec (jourferm_date, tjf_code, jourferm_libelle).
Les dates dans MySQL sont en format 0000-00-00 alors que moi je les ai affichée en php au format 00/00/0000 grâce à "DATE_FORMAT(AB_JOURFERM_DATE, '%d/%m/%Y') AS AB_JOURFERM_DATE" dans la requête.  
Cependant, lorsque je fais un insert, un update ou un delete, vu que les formats sont différents, les boutons cités précédemment ne fonctionnent pas car MySQL ne reconnait pas les dates (car format différent)
 
voici le code :
jourferm.php
 

Code :
  1. <?php require_once('header.php'); ?>
  2. <?php
  3. mysql_select_db($database_Absences, $Absences);
  4. $query_AB_JOURFERM = "SELECT AB_TJF_CODE, AB_JOURFERM_LIBELLE, DATE_FORMAT(AB_JOURFERM_DATE, '%d/%m/%Y') AS AB_JOURFERM_DATE FROM ab_jourferm";
  5. $AB_JOURFERM = mysql_query($query_AB_JOURFERM, $Absences) or die(mysql_error());
  6. $row_AB_JOURFERM = mysql_fetch_assoc($AB_JOURFERM);
  7. $totalRows_AB_JOURFERM = mysql_num_rows($AB_JOURFERM);
  8. mysql_select_db($database_Absences, $Absences);
  9. $query_list_jourferm = "SELECT * FROM ab_tjf";
  10. $list_jourferm = mysql_query($query_list_jourferm, $Absences) or die(mysql_error());
  11. $row_list_jourferm = mysql_fetch_assoc($list_jourferm);
  12. $totalRows_list_jourferm = mysql_num_rows($list_jourferm);
  13. ?>
  14. <br />
  15. <br />
  16.         <table border="2" align="center">
  17.         <tr>
  18.             <td>Date</td>
  19.             <td>Type</td>
  20.             <td>Action</td>
  21.          </tr>
  22. <?php
  23. function iif($condition,$ok,$nok='') {
  24.  print ($condition ? $ok : $nok);
  25.  return ($condition ? $ok : $nok);
  26. }
  27. $i = 0;
  28. do {
  29. ?>
  30. <form method="post" action="update_jourferm.php">
  31.                 <td><input name="AB_JOURFERM_DATE" type="text" class="Style5" style="text-align:center" value="<?php echo $row_AB_JOURFERM['AB_JOURFERM_DATE']; ?>" size="10"/><input name="AB_JOURFERM_DATEOLD" type="hidden" value="<?php echo $row_AB_JOURFERM['AB_JOURFERM_DATE']; ?>" size="10"/></td>
  32.                <td><input value="<?php echo $row_AB_JOURFERM['AB_JOURFERM_LIBELLE']; ?>" name="AB_JOURFERM_LIBELLE" type="text" size="15" style="text-align:center"/></td>
  33.                 <td><div align="center">
  34.                     <input type="image" name="update" src="_chartes/bt_modif.gif" align="texttop" />
  35.                  <a href="delete_jourferm.php?AB_JOURFERM_DATE=<?php echo $row_AB_JOURFERM['AB_JOURFERM_DATE']; ?>">
  36.                <input name="" type="image" src="_chartes/bt_suppr.gif" align="texttop"/>
  37.                </a></div></td>
  38.           </form>
  39.          </tr>
  40.             <?php $i=$i+1;} while ($row_AB_JOURFERM = mysql_fetch_assoc($AB_JOURFERM)); ?>
  41.      </table>
  42.         <br />
  43. <table align="center">
  44.     <tr>
  45.       <td><a href="insert_jourferm.php"><input type="submit" name="Ajouter" id="Ajouter" value="Ajouter" /></a>
  46.           <a href="parametres.php"><input type="submit" name="Annuler" id="Annuler" value="Retour" /></a>
  47.       </td>
  48.     </tr>
  49. </table>
  50. <?php
  51. mysql_free_result($AB_JOURFERM);
  52. mysql_free_result($list_jourferm);
  53. ?>
  54. <br />
  55. <?php require_once('footer.php'); ?>


 
 
update_jourferm.php
 

Code :
  1. <?php require_once('Connections/Absences.php'); ?>
  2. <?php
  3. if (!function_exists("GetSQLValueString" )) {
  4. function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "" )
  5. {
  6.   $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  7.   $theValue = function_exists("mysql_real_escape_string" ) ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
  8.   switch ($theType) {
  9.     case "text":
  10.       $theValue = ($theValue != "" ) ? "'" . $theValue . "'" : "NULL";
  11.       break;   
  12.     case "long":
  13.     case "int":
  14.       $theValue = ($theValue != "" ) ? intval($theValue) : "NULL";
  15.       break;
  16.     case "double":
  17.       $theValue = ($theValue != "" ) ? "'" . doubleval($theValue) . "'" : "NULL";
  18.       break;
  19.     case "date":
  20.       $theValue = ($theValue != "" ) ? "'" . $theValue . "'" : "NULL";
  21.       break;
  22.     case "defined":
  23.       $theValue = ($theValue != "" ) ? $theDefinedValue : $theNotDefinedValue;
  24.       break;
  25.   }
  26.   return $theValue;
  27. }
  28. }
  29.   $updateSQL = sprintf("UPDATE ab_jourferm SET AB_JOURFERM_LIBELLE=%s, AB_JOURFERM_DATE=%s WHERE AB_JOURFERM_DATE=%s",
  30.                        GetSQLValueString($_POST['AB_JOURFERM_LIBELLE'], "text" ),
  31.                        GetSQLValueString($_POST['AB_JOURFERM_DATE'], "date" ),
  32.        GetSQLValueString($_POST['AB_JOURFERM_DATEOLD'], "date" ));
  33. echo $updateSQL;
  34.   mysql_select_db($database_Absences, $Absences);
  35.   $Result1 = mysql_query($updateSQL, $Absences) or die(mysql_error());
  36.   $updateGoTo = "jourferm.php";
  37.   if (isset($_SERVER['QUERY_STRING'])) {
  38.     $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
  39.     $updateGoTo .= $_SERVER['QUERY_STRING'];
  40.   }
  41.   header(sprintf("Location: %s", $updateGoTo));
  42. ?>


 
 
 
Comment faire pour que MySQL puisse reconnaitre les dates malgré leurs formats différents (MySQL : 0000-00-00, dans jourferm.php : 00/00/0000)
Si vous avez des questions à me poser n'hésitez pas
Merci de bien vouloir m'aider !

Reply

Marsh Posté le 06-05-2011 à 10:21:10   

Reply

Marsh Posté le 06-05-2011 à 10:38:30    

Salut,
perso j'ai l'habitude de passer par php pour traiter mes dates (niveaux perfs franchement j'en sais rien, c'est plus par facilité).

 

exemple simpliste (manque des tests pr validité de la date, et pr générer la date a renvoyer pr frToPhp j'aime bien passer par date() + mktime() quand ça viens d'un form) :

 
Code :
  1. function frToPhp($date)
  2. {
  3.     list($jour, $mois, $annee) = explode('/', $date);
  4.     return $annee."-".$mois."-".$jour;
  5. }
  6. function phpToFr($date)
  7. {
  8.     list($annee, $mois, $jour) = explode('-', $date);
  9.     return $jour."/".$mois."/".$annee;
  10. }
 

Message cité 1 fois
Message édité par vanish le 06-05-2011 à 10:42:39
Reply

Marsh Posté le 06-05-2011 à 10:54:17    

Merci beaucoup pour ta réponse vanish !
Cependant, j'aimerais savoir ou faut-il mettre ce bout de code, dans la page jourferm.php ou update_jourferm.php ?
lorsque je saurais ou placer ce code, je ferais les tests et je te tiendrais au courant :)

Reply

Marsh Posté le 06-05-2011 à 13:42:40    

Pour convertir une date au format yyyy-mm-dd provenant de mysql (ou autre) et l'afficher en fr : date('d/m/Y', strtotime($MaDateEn));
 
Pour l'inverse, la fonction frToPhp proposée par vanish est pas mal... sauf quelle ne vérifie pas l'existence de la date (genre le 30/02/2011 passsera sans pb) :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 06-05-2011 à 14:15:06    

Merci pour ta réponse :)
Mes dates sont affichées en 00/00/0000 sauf que lorsque je fais un update, la nouvelle date est toujours en format 00/00/0000 et MySQL ne connait pas ce format, donc ça ne fonctionne pas, quelle fonction faut-il que j'utilise pour que, lorsque je fais un update, la nouvelle date (00/00/0000) renvoie a MySQL cette même valeur mais en 0000-00-00 ?
Désolée je suis débutante donc je ne comprend pas toutes vos explications !

Reply

Marsh Posté le 06-05-2011 à 14:48:32    

Quand tu prends une date de mysql, tu l'affiches avec la méthode que je t'ai donnée et quand il s'agit de stocker une date provenant de l'ihm (donc au format fr), faut la transformer avec la méthode que t'as donnée vanish (frToPhp). C'est logique : si tu convertis dans un sens, faut faire la transformation inverse dans l'autre sens
BD -> Affichage : en->fr
Affichage -> BD : fr -> en


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 06-05-2011 à 15:14:24    

Oki merci je vais essayer tout ça, mais pour la réponse donnée par vanish, ou faut-il que je mette ce code ?

Reply

Marsh Posté le 06-05-2011 à 15:33:03    

Uaip rufo, c'est pr ça que j'avais mis :

 
vanish a écrit :

pr générer la date a renvoyer pr frToPhp j'aime bien passer par date() + mktime() quand ça viens d'un form) :

 

Donc :

 
Code :
  1. function frToPhp($date)
  2. {
  3.     list($jour, $mois, $annee) = explode('/', $date);
  4.     return date('d/m/Y', mktime (0, 0, 0, $mois, $jour, $annee));
  5. }
 

Ou carrement pr éviter tout prob :

 
Code :
  1. function frToPhp($date)
  2. {
  3.     if(ereg("[0-9]{2}/[0-9]{2}/[0-9]{4})", $date))
  4.     {
  5.         list($jour, $mois, $annee) = explode('/', $date);
  6.         return date('d/m/Y', mktime (0, 0, 0, $mois, $jour, $annee));
  7.     }
  8.     return "0000-00-00";
  9. }
 


Bin tu mets ta fonction qque part ou elle est accessible, et tu l'apelles ou tu en a besoin


Message édité par vanish le 06-05-2011 à 15:35:29
Reply

Marsh Posté le 06-05-2011 à 16:20:31    

perso, je préfère strtofime à mktime ;) Son écriture est plus concise et quand la donnée est sous la forme yyyy-mm-dd, voire yyyy-mm-dd hh:mm:ss, y'a aps besoin de splitter sur les séparateurs - et :, la conversion en timestamp se fait direct avec strtotime...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

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