Transformation de date à validation d'un formulaire ?

Eléphanteau du PHP | 37 Messages

31 mai 2007, 10:35

Bonjour à tous.

Dans la série les petits problémes d'Arkilon, aujourd'hui je m'attaque aux dates !

Principe :

J'ai un petit formulaire qui me permet de saisir une date de début de période et une date de fin de période.

Tout ceci lié à une petite table SQL qui reprend ces 2 Champs date_debutperiode et date_finperiode déclaré avec le type DATE, format 0000-00-00 (ISO).

But :

Je me suis servi de la faq "Quelques petites manipulations avec les dates (PHP/MySQL)"

ETAPE 1: Les 2 champs textes (date_debutperiode et date_finperiode) doivent me remonter la date déjà saisie et me la convertir au format FR, là pas de souci voici le code :
<?php
// Transformation de la date ISO en FR pour Debut période
$dateSQLDP = $row_majperiode['date_debutperiode']; 
list($annee, $mois, $jour) = explode("-", $dateSQLDP);  
$dateFRDP = $jour.'/'.$mois.'/'.$annee; 
// Transformation de la date ISO en FR pour Fin Période
$dateSQLFP = $row_majperiode['date_finperiode']; 
list($annee, $mois, $jour) = explode("-", $dateSQLFP);  
$dateFRFP = $jour.'/'.$mois.'/'.$annee;
?>
Une fois que j'ai ca je fait remonter les variables dans mes textbox.
      <td><input type="text" name="date_debutperiode" value="<?php echo $dateFRDP; ?>" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">Date de Fin:</td>
      <td><input type="text" name="date_finperiode" value="<?php echo $dateFRFP; ?>" size="32"></td>
    </tr>
ETAPE 2 : L'utilisateur va changer la date en respectant le format JJ/MM/AAAA et mon souci ce trouve ici, comment effectuer la transformation inverse et que cela s'intégre lors de la validation du formulaire ???

J'arrive à faire la manip inverse sans souci passé de la date FR à ISO dont voici le code :
// Transformation de la date FR en ISO pour Debut période
$date2FRDP = $_POST['date_debutperiode'];
list($jour2, $mois2, $annee2) = explode("/", $date2FRDP);
$dateSQL2DP = $annee2.'-'.$mois2.'-'.$jour2;
// Transformation de la date FR en ISO pour Fin période
$date2FRFP = $_POST['date_finperiode'];
list($jour2, $mois2, $annee2) = explode("/", $date2FRFP);
$dateSQL2FP = $annee2.'-'.$mois2.'-'.$jour2;
//FIN 
Mais comment l'insérer avec ? Par le POST ?

Voila je need un petit coup de pouce à ce sujet et merci d'avance

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

31 mai 2007, 10:53

Je ne vois pas trop ce qui te gène... lorsque l'utilisateur va valider son formulaire, il va t'envoyer les deux dates qu'il a modifier dans $_POST['date_debutperiode'] et $_POST['date_finperiode'].

Ces dates seront donc au format FR. Il te suffit donc de travailler sur ces deux variables pour inverser l'ordre des valeurs (comme tu le fais sur les deux variables que tu récupères en bases) et utiliser les nouvelles valeurs pour les insérer dans ta requête :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 37 Messages

31 mai 2007, 11:16

Re plop alor il y à des jours comme ca ou on à la tête dans le guidon c'est terrible !!

Donc la solution :
// Transformation de la date FR en ISO pour Debut période
$date2FRDP = $_POST['date_debutperiode'];
list($jour2, $mois2, $annee2) = explode("/", $date2FRDP);
$dateSQL2DP = $annee2.'-'.$mois2.'-'.$jour2;
// Transformation de la date FR en ISO pour Fin période
$date2FRFP = $_POST['date_finperiode'];
list($jour2, $mois2, $annee2) = explode("/", $date2FRFP);
$dateSQL2FP = $annee2.'-'.$mois2.'-'.$jour2;
//FIN 
  $updateSQL = sprintf("UPDATE date_periode SET date_debutperiode='$dateSQL2DP', date_finperiode='$dateSQL2FP' WHERE num_dateperiode=%s",
                       GetSQLValueString($_POST['num_dateperiode'], "int"));
Voila j'avai le bon code mais je ne l'avait pas mis à la bonne place |*()

Merci Ryle d'avoir retiré ma tête de mon guidon.