Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1639 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Pb avec formats dates

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pb avec formats dates

n°2074235
iOniOn95
Posté le 06-05-2011 à 10:21:10  profilanswer
 

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 !

mood
Publicité
Posté le 06-05-2011 à 10:21:10  profilanswer
 

n°2074238
vanish
Ce qui brûle, brûle !
Posté le 06-05-2011 à 10:38:30  profilanswer
 

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
n°2074243
iOniOn95
Posté le 06-05-2011 à 10:54:17  profilanswer
 

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 :)

n°2074315
rufo
Pas me confondre avec Lycos!
Posté le 06-05-2011 à 13:42:40  profilanswer
 

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
n°2074325
iOniOn95
Posté le 06-05-2011 à 14:15:06  profilanswer
 

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 !

n°2074334
rufo
Pas me confondre avec Lycos!
Posté le 06-05-2011 à 14:48:32  profilanswer
 

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
n°2074343
iOniOn95
Posté le 06-05-2011 à 15:14:24  profilanswer
 

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

n°2074349
vanish
Ce qui brûle, brûle !
Posté le 06-05-2011 à 15:33:03  profilanswer
 

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
n°2074369
rufo
Pas me confondre avec Lycos!
Posté le 06-05-2011 à 16:20:31  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Pb avec formats dates

 

Sujets relatifs
[Pb] Affichage d'un menu avec un effet carrouselPb: copier un graph Excel sur Word
Pb lancement d'un batch [RESOLU ET A DEL /f /q]Pb chargement de ToolTips sur ListView
[PIC/C] Pb Stack overflowPb exportation de données vers feuille excel
PB affichage incomplet d'un cadre javascriptPb contenu html en PHP
Pb commentaire HTML sous Opera et Safaricomparer des dates (YMD)
Plus de sujets relatifs à : Pb avec formats dates


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR