[PHP] Validation d'un champs date

Validation d'un champs date [PHP] - PHP - Programmation

Marsh Posté le 04-07-2003 à 18:35:38    

J'ai un champs date qui a le format suivant: AAAA-MM-JJ HH:MM:SS
 
j'aimerais bien valider, lors du submit, que le champs respecte bien ses critères
 
je mets fait seulement une validation que sur ####-##-## ##:##:## ou si ya moyen que je pousse pour que MM soit de 1-12, JJ de 1-31(voir meme selon le mois), que HH soit de 0-23, MM 0-59, SS 0-59?
 
EDIT
 
La solution
 

Code :
  1. if (! ereg('^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$', $_POST['body_date']))
  2.       {
  3.          $error_msg = "Le format de la date est incorrect";
  4.       }
  5.       elseif ($_POST['body_date'] != Date("Y-m-d H:i:s", mktime(substr($_POST['body_date'], 11, 2), substr($_POST['body_date'], 14, 2), substr($_POST['body_date'], 17, 2), substr($_POST['body_date'], 5, 2), substr($_POST['body_date'], 8, 2), substr($_POST['body_date'], 0, 4))))
  6.       {
  7.          $error_msg = "La date entrée n'existe pas";
  8.       }


 
ma date étant dans la variable $_POST['body_date'] étant sous un format AAAA-MM-JJ HH:MM:SS


Message édité par burgergold le 04-07-2003 à 19:32:26
Reply

Marsh Posté le 04-07-2003 à 18:35:38   

Reply

Marsh Posté le 04-07-2003 à 18:43:26    

salut
 
tout d'abord avec une expression régulière tu peux vérifier que ta date est de la forme ####-##-## ##:##:## et récupérer les valeurs de chaque partie
 
puis tu peux utiliser la fonction mktime (http://fr2.php.net/manual/fr/function.mktime.php)
 
avec cette fonction tu peux faire une validation en essayant de créer la date correspondant aux paramètres issus de l'expression régulière et regarder si la sortie de cette fonction correspond à la même date (je suis pas sur d'etre très clair là  :D )

Reply

Marsh Posté le 04-07-2003 à 18:45:13    

mouep jai plutot bien compris, je valide le format, ensuite je valide les valeurs avec mktime
 
jvais tenter le coup :D

Reply

Marsh Posté le 04-07-2003 à 18:47:00    

tiens moi au courant (mets ton code qd il marche pour que ça puisse servir éventuellement à d'autre)  :)

Reply

Marsh Posté le 04-07-2003 à 18:48:25    

comment jfais ca un espace dans un ereg? juste un espace ou \ espace?

Reply

Marsh Posté le 04-07-2003 à 18:51:17    

juste espace

Reply

Marsh Posté le 04-07-2003 à 18:55:54    

Code :
  1. ereg('^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})$', $_POST['body_date'])


 
et de une partie fonctionnel

Reply

Marsh Posté le 04-07-2003 à 19:32:58    

solution au premier post

Reply

Marsh Posté le 05-07-2003 à 12:18:46    

burgergold a écrit :


La solution 2 le retour  :D
 

Code :
  1. if (! ereg('^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})$', $_POST['body_date'], $regs))
  2.       {
  3.          $error_msg = "Le format de la date est incorrect";
  4.       }
  5.       elseif ($_POST['body_date'] != Date("Y-m-d H:i:s", mktime($regs[1], $regs[2], $regs[3], $regs[4], $regs[5], $regs[6])))
  6.       {
  7.          $error_msg = "La date entrée n'existe pas";
  8.       }


 
la date étant dans la variable $_POST['body_date'] étant sous un format AAAA-MM-JJ HH:MM:SS  


 
En effet un des intérets des expressions regulières étant de pouvoir récupérer des parties de l'expression que tu mets entre parenthèse dans ton expression regulière


Message édité par ratibus le 05-07-2003 à 12:19:58
Reply

Marsh Posté le 05-07-2003 à 15:00:53    

:jap:  
 
plutot bien comme truc :D mais ainsi pour que ca fonctionne avec mktime
 

Code :
  1. if (! ereg('^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})$', $_POST['body_date'], $regs))
  2.       {
  3.          $error_msg = "Le format de la date est incorrect";
  4.       }
  5.       elseif ($_POST['body_date'] != Date("Y-m-d H:i:s", mktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1])))
  6.       {
  7.          $error_msg = "La date entrée n'existe pas";
  8.       }

Reply

Marsh Posté le 05-07-2003 à 15:00:53   

Reply

Marsh Posté le 05-07-2003 à 15:19:52    

oups désolé je me suis trompé dans l'ordre des arguments  :jap:  

Reply

Sujets relatifs:

Leave a Replay

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