[PHP]Champ Date

Champ Date [PHP] - PHP - Programmation

Marsh Posté le 08-05-2007 à 18:18:11    

Bonjour à vous :)
 
voila j'ai fait un petit calendrier avec dans ma base de donnée les champ ID,DATE,EVENEMENT.
 
comme chacun sait mysql ne comprends que les dates à l'anglaise or dans ma partie administration du site lorsque les utilisateurs rentrent un évenement ils vont mettre les dates en français. alors je me suis posé la question comment faire que se soit transparent pour eux...
et dans phpmyadmin lorsqu'on veut inséré des donnée date dans un champ on a un petit calendrier qui s'affiche, comment puis je mettre ça en place sur mon site ? ou sinon comment puis je lor de l'envoie du formulaire transformer la date française en anglaise ?
 
merci pour vos réponses :)
 
SeB

Reply

Marsh Posté le 08-05-2007 à 18:18:11   

Reply

Marsh Posté le 08-05-2007 à 18:35:43    

fonction explode()
après un petit formatage avec sprintf et c'est dans la poche.
 
Tu peux également remplacer la date par le timestamp. Ainsi tu n'utilise plus que la fonction date() au lieu de 2.

Reply

Marsh Posté le 08-05-2007 à 18:39:24    

AlphaZone a écrit :

fonction explode()
après un petit formatage avec sprintf et c'est dans la poche.
 
Tu peux également remplacer la date par le timestamp. Ainsi tu n'utilise plus que la fonction date() au lieu de 2.


 
oula je débute lol, tu peux dévellopé, voici mon formulaire :  

Code :
  1. <form method="post" name="form1" action="<?php echo $editFormAction; ?>">
  2.           <table align="center">
  3.             <tr valign="baseline">
  4.               <td nowrap align="right">DATE:</td>
  5.               <td><input type="text" name="DATE" value="" size="32"></td>
  6.             </tr>
  7.             <tr valign="baseline">
  8.               <td nowrap align="right">DESCRIPTION:</td>
  9.               <td><textarea name="DESCRIPTION" cols="32" rows="3"></textarea></td>
  10.             </tr>
  11.             <tr valign="baseline">
  12.               <td nowrap align="right">REUNION:</td>
  13.               <td><input type="checkbox" name="REUNION" value="" ></td>
  14.             </tr>
  15.             <tr valign="baseline">
  16.               <td nowrap align="right">EVENEMENT:</td>
  17.               <td><input type="checkbox" name="EVENEMENT" value="" ></td>
  18.             </tr>
  19.             <tr valign="baseline">
  20.               <td nowrap align="right">&nbsp;</td>
  21.               <td><input type="submit" value="Insérer l'enregistrement"></td>
  22.             </tr>
  23.           </table>
  24.           <input type="hidden" name="MM_insert" value="form1">
  25.         </form>

Reply

Marsh Posté le 08-05-2007 à 23:10:46    

Oulala, et pourquoi pas une usine à gaz pour allumer une ampoule aussi :o
 
Expression régulière puisque de toutes manières chaque entrée DOIT être filtrée, suffit juste d'utiliser une référence arrière ;)

Reply

Marsh Posté le 08-05-2007 à 23:38:39    

moi perso je fais un champ INT(10) qui dontient un mktime($heure, $minute,$secondes,$mois,$jour,annee) ... puis à la lecture, un echo date("d/m/Y H:i:s",$timestamp); suffit.

Reply

Marsh Posté le 09-05-2007 à 00:36:45    

Et pourquoi pas un champ d'un type date :??: S'il contient une date pourquoi ne pas le typé en ce sens?
 
De toutes manières c'est pas le souci du sujet :D

Reply

Marsh Posté le 09-05-2007 à 10:14:14    

leflos5 a écrit :

Et pourquoi pas un champ d'un type date :??: S'il contient une date pourquoi ne pas le typé en ce sens?


Parce qu'un champ date doit être au format US et ça nécessite toujours une manipulation de la chaine.

Reply

Marsh Posté le 09-05-2007 à 10:47:24    

et alors tu as des fonctions mysql très bien faites, genre str_to_date qui font exactement ce que tu demandes:

Code :
  1. SELECT str_to_date( '9-5-2007', '%d-%m-%Y' ) ;


 
Alors biensur pour que cela marche il faut s'assurer que la date saisie et son format sont correctes, mais j'imagine que tu le fais déjà.

Reply

Marsh Posté le 09-05-2007 à 11:27:45    

le problème de faire un champ qui n'est pas date et que tu ne peux pas le requéte par la suite par ordre croissant ou décroissant. je me trompe ?

Reply

Marsh Posté le 09-05-2007 à 11:36:29    

Petite remarque en passant : le format MySQL standard (AAAA-MM-JJ HH:MM:SS) pour un champ "date" n'est absolument pas le format US qui est MM-JJ-AAAA ...
 
Ce format MySQL est juste le seul format intelligent de stockage de date en string (à part le timestamp donc) puisqu'elles seront toujours chronologiquement ordonnées.

Reply

Marsh Posté le 09-05-2007 à 11:36:29   

Reply

Marsh Posté le 09-05-2007 à 11:38:20    

plop007 a écrit :

le problème de faire un champ qui n'est pas date et que tu ne peux pas le requéte par la suite par ordre croissant ou décroissant. je me trompe ?


oui tu te trompes car son int est "triable" aisément.
Par exemple: 20070101 est bien supérieur à 20061231 mais inférieur à 20070509.

 

L'inconvénient c'est que tu peux plus te servir des fonctions natives du sgdb pour la gestion des dates ( date_format, date_add, date_sub, timediff,... par exemple sur mysql)

 
ZeBix a écrit :

Petite remarque en passant : le format MySQL standard (AAAA-MM-JJ HH:MM:SS) pour un champ "date" n'est absolument pas le format US qui est MM-JJ-AAAA ...


Petite remarque en repassant: c'est pas le format "MySQL standard" mais le format standard défini en SQL92

Message cité 1 fois
Message édité par anapajari le 09-05-2007 à 11:40:30
Reply

Marsh Posté le 09-05-2007 à 13:15:00    

anapajari a écrit :

et alors tu as des fonctions mysql très bien faites, genre str_to_date qui font exactement ce que tu demandes:

Code :
  1. SELECT str_to_date( '9-5-2007', '%d-%m-%Y' ) ;



Je ne connaissais pas cette fonction, merki :D
 

anapajari a écrit :

Alors biensur pour que cela marche il faut s'assurer que la date saisie et son format sont correctes, mais j'imagine que tu le fais déjà.


Je suis un peu parano sur les bords, donc oui je m'assure que la date saisi est au bon format ^^

Reply

Marsh Posté le 09-05-2007 à 14:30:21    

anapajari a écrit :

Petite remarque en repassant: c'est pas le format "MySQL standard" mais le format standard défini en SQL92


 
Tu as très bien compris ce que je voulais dire, mais précisions pour précisions, il s'agit en vérité du format ISO 8601 ... dont la dernière révision date de 2004 mais qui a été visiblement initié en ... 1988.
 
Valààà comme ça on est biiiiien précis !
 
[:cbrs]

Reply

Marsh Posté le 09-05-2007 à 21:16:19    

HuM :/
je crois que je vais changer de philosophi et si qqun veut bien se donner la peine de m'aider sa serait génial :)
pourquoi pas créer 3 champs formulaire avec des liste déroulante dans chacun de ces 3 champ qui énumererai le jour , moi et année. en suite je prends ces 3 champ et je l'insére au format ISO yyyy-mm-dd dan ma table mysql.
par contre je serai incapable de coder ça tout seul...
 
si qqun veut bien m'aider, mais peut être j'en demande trop :/
 
SeB

Reply

Marsh Posté le 09-05-2007 à 23:55:52    

J'ai un truc un peu porc pour çà que j'ai chopé je ne sais ou sur le net.  
 

<?php
 
 // $name : Nom générique des champs de formulaire
 // $fyear/$lyear : Fourchette d'années (optionel)
 // $class : Classe CSS appliquée (optionel)
 
 
  $class = '';
  $fyear='2007';
  $lyear='2015';
  $name = 'nom';
 
 
  $yr=date("Y",strtotime($date_ymd));
  $mo=date("m",strtotime($date_ymd));
  $dy = date("d",strtotime($date_ymd));
   
 // Jour  
   
  $s="<SELECT NAME=\"${name}_d\" class='$class'>\n";  
  $s.="<OPTION VALUE=$dy>$dy</OPTION>\n";
  $sclt="";  
  for ($i=1;$i<=31;$i++)  
  {  
  $i2="0$i";  
  $i2=substr($i2, -2);  
  if ($i2==$dy)  
  $sclt=" SELECTED";  
  else  
  $sclt="";  
  $s.="<OPTION VALUE=\"$i2\"$sclt>$i</OPTION>\n";
  }  
  $s.="</SELECT> / ";  
// Mois  
   
  $s.="<SELECT NAME=\"${name}_m\" class='$class'>\n";  
  $s.="<OPTION VALUE=$mo>$mo</OPTION>\n";
  $sclt="";  
  for ($i=1;$i<=12;$i++)  
  {  
  $i2="0$i";  
  $i2=substr($i2, -2);  
  if ($i2==$mo)  
  $sclt=" SELECTED";  
  else  
  $sclt="";  
  $mon2=date("M", mktime(0, 0, 0, $i, 1, 2001));
  $s.="<OPTION VALUE=\"$i2\"$sclt>$mon2</OPTION>\n";
  }  
  $s.="</SELECT> / ";  
 
 // Année  
   
  $s.="<SELECT NAME=\"${name}_y\" class='$class'>\n";  
  $s.="<OPTION VALUE=$yr>$yr</OPTION>\n";
  $sclt="";  
  for ($i=$fyear;$i<=$lyear;$i++)
  {  
  $i2="$i";  
  if ($i2==$yr)  
  $sclt=" SELECTED";  
  else  
  $sclt="";  
  $s.="<OPTION VALUE=\"$i\"$sclt>$i</OPTION>\n";  
  }  
  $s.="</SELECT>\n";  
    echo"$s";
 
// Pour récuperer vos valeurs du formulaire, ici avec la methode POST
// avec pour nom générique "nom"
 
$nom_y = $_POST['nom_y'];
$nom_m = $_POST['nom_m'];
$nom_d = $_POST['nom_d'];
 
?>


 
Et donc ensuite pour ta requete mysql

Code :
  1. $date_ymd = "{$_POST['nom_y']}-{$_POST['nom_m']}-{$_POST['nom_d']}";


 
M'enfin si qq1 poste qq chose de mieux :D

Reply

Sujets relatifs:

Leave a Replay

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