[PHP] Vérifier la validité d'une date

Vérifier la validité d'une date [PHP] - PHP - Programmation

Marsh Posté le 30-01-2003 à 17:22:47    

Voilà j'ai un champ de saisie et je veux contrôler que l'utilisateur a bien saisit une date. du style "30/01/2003"
 
J'ai juste trouver la fonction checkdate() mais bon c pas super pratique pcq je pense faut lui envoyer :
checkdate("01","30","2002" ) non? ça implique un découpage de la chaine. Y a pas un truc tout con comme en VB la fonction isdate?

Reply

Marsh Posté le 30-01-2003 à 17:22:47   

Reply

Marsh Posté le 30-01-2003 à 17:27:04    

tu fais un explode (www.php.net/explode) sur ta date et tu récupères les bon paramètres pour checkdate ;)

Reply

Marsh Posté le 30-01-2003 à 17:32:12    

je pense que tu peux ruser en faisant :
if ($ma_date== date("d/m/Y", strtotime($ma_date))){
 echo "ok";
}
 
c'est sans doute pas bon, mais c'est une voie à explorer

Reply

Marsh Posté le 30-01-2003 à 17:34:09    

ethernal a écrit :

je pense que tu peux ruser en faisant :
if ($ma_date== date("d/m/Y", strtotime($ma_date))){
 echo "ok";
}
 
c'est sans doute pas bon, mais c'est une voie à explorer


 
je préfére pas ce genre de code sur le site :/
c un site professionnel ki sera ptet payant d'accès donc c la misère si ça plante

Reply

Marsh Posté le 30-01-2003 à 17:36:04    

:lol:
il te reste l'explode et le checkdate alors
 
c'est pas non plus pcq c une "ruse" que c'est mauvais...
Dans la mesure du possible, on encode la date sur le serveur pas chez le client...


Message édité par ethernal le 30-01-2003 à 17:38:25
Reply

Marsh Posté le 30-01-2003 à 17:37:53    

y a pas kelkun ki a une fonction toute faite? ça me saoule de faire une fontion :D
 
y a bien le test du if (strtotime($madate)==-1) {... mais trop facile de passer à travers en lui balancant une date americaine ou bien un simple "20/01"

Reply

Marsh Posté le 30-01-2003 à 17:39:50    

Dinbougre888 a écrit :

y a pas kelkun ki a une fonction toute faite? ça me saoule de faire une fontion :D


 
si c un site payant... on te paye pour !
bosse un peu alors  :non:

Reply

Marsh Posté le 30-01-2003 à 17:39:58    

le explode te suffit pas??
plutot que d'aller utiliser une sombre fonction que tu connais pas, contentes toi d'un truc simple qui marche  ;)

Reply

Marsh Posté le 30-01-2003 à 17:43:00    

Dinbougre888 a écrit :

y a pas kelkun ki a une fonction toute faite? ça me saoule de faire une fontion :D
 
y a bien le test du if (strtotime($madate)==-1) {... mais trop facile de passer à travers en lui balancant une date americaine ou bien un simple "20/01"  


 
chui payer pour bah moué, chui programmeur normalement VB pas php et on m'a refilé un site à faire et pour moi mon salaire change po donc voilà :/

Reply

Marsh Posté le 30-01-2003 à 17:43:26    

dropsy a écrit :

le explode te suffit pas??
plutot que d'aller utiliser une sombre fonction que tu connais pas, contentes toi d'un truc simple qui marche  ;)  


 
si, je v faire une fonction avec le explode avec d'ot test

Reply

Marsh Posté le 30-01-2003 à 17:43:26   

Reply

Marsh Posté le 30-01-2003 à 18:00:23    

bon pour ceux ke ça interesse  
 

Function isdate($madate) {
     
  if (strlen($madate)!=10) {
   $msgerr = "false";
  }
   
  $tab_dt = explode("/", "$madate" ) ;
  if (count($tab_dt) != 3) {
   $msgerr = "false";
  }
   
  if ($tab_dt[1] > 12) {
   $msgerr = "false";
  }    
   
  if (checkdate($tab_dt[1], $tab_dt[0], $tab_dt[2]) == false) {
   $msgerr = "false";
  }
   
  if ($msgerr=="" ) {
   return(true);
  }
  else {
   return(false);
  }
 }

Reply

Marsh Posté le 30-01-2003 à 18:48:46    

version courte (un peu moins lisible peut être)
 

Code :
  1. <?
  2. Function isdate($madate) {
  3.   $msgerr = TRUE;
  4.   $tab_dt = explode('/',$madate);
  5.   if ( strlen(trim($madate))!=10 || count($tab_dt)!=3 || $tab_dt[1]>12 || checkdate($tab_dt[1], $tab_dt[0], $tab_dt[2]) == FALSE  ) {
  6.     $msgerr = FALSE;
  7.   }
  8.   return $msgerr;
  9. }
  10. ?>


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 30-01-2003 à 19:09:12    

oué mais g décomposer pour plus de facilité  
je débute en php :(
 
on me file un big projet et je connait ked en php

Reply

Marsh Posté le 31-01-2003 à 01:41:05    

avec votre fonction la date :
"1e/10/1999" passe sans prob à la vérification :D
 
bon je te donne la soluce :

Code :
  1. function check_ma_date($iDate){
  2.   list($day,month,$year)= explode('/', $iDate, 3); //le 3 pcq je veux que 3 indices à mon tableau
  3.   if (ereg("^([0-9]{2})/([0-9]{2})/([0-9]{4})$", $iDate) && checkdate( $month, $day, $year ) && $year>=1900 ){
  4.     return true;
  5.   }
  6.   return false;
  7. }


explication de l'ereg :
- 2 positions numériques  
- un /
- 2 positions numériques  
- un /
- 4 positions numériques  
--> 10 positions au total coupées par 2 '/' en 3 parties.
 
ou
 

Code :
  1. function check_ma_date($iDate){
  2.   if (ereg("^([0-9]{2})/([0-9]{2})/([0-9]{4})$", $iDate, $date) && checkdate( $date[2], $date[1], $date[3] ) && $date[3]>=1900 ){
  3.     return true;
  4.   }
  5.   return false;
  6. }


l'expression ereg décompose la date reçue dans $date.
$date[0]= $idate
$date[1]= $day
$date[2]= $month
$date[3]= $year
 
c'est bcp mieux ;)
 
ps : dis à ta boite d'engager des programmeurs php pour faire du php... en plus, ça fera du boulot à Sh@rdar (et pq pas à moi...) ! :lol:


Message édité par ethernal le 31-01-2003 à 11:49:57
Reply

Marsh Posté le 31-01-2003 à 16:41:24    

C grave.

Reply

Sujets relatifs:

Leave a Replay

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