Envoyer une date (menus déroulants) vers MySql

Benohit
Invité n'ayant pas de compte PHPfrance

14 nov. 2010, 00:58

Bonsoir, j'ai fait une recherche avant de poser cette question mais pas facile de trouver la solution, si elle est déjà sur ce forum.

Alors voila ma question: j'aimerais récupérer une date de naissance et l'envoyer dans UN champ d'une table dans une base de donnée.
Le problème est que celle-ci est en menus déroulants, dont voici le code complet pour le jour, le mois et la date:

Code : Tout sélectionner

<p>Date de naissance : <br/> <select name="jj" id="jj"> <option value="jj"> JJ</option> <? for($x=1; $x<=31; $x++){ if($x<=9){ $jour = "0" . $x; } else { $jour = $x ; } if($jour == $jj){ echo "<option value='$jour' selected='selected'>$jour</option>"; } else { echo "<option value='$jour'>$jour</option>"; } } ?> </select> <select name="mm" id="mm"> <option value="mm"> MM</option> <? for($x=1; $x<=12; $x++){ if($x<=9){ $mois = "0" . $x; } else { $mois = $x ; } if($mois == $mm){ echo "<option value='$mois' selected='selected'>$mois</option>"; } else { echo "<option value='$mois'>$mois</option>"; } } ?> </select> <select name="aaaa" id="aaaa"> <option value="aaaa"> AAAA</option> <? $annee = date("Y"); for($x=$annee; $x>=($annee-90); $x--){ if($x == $aaaa){ echo "<option value='$x' selected='selected'>$x</option>"; } else { echo "<option value='$x'>$x</option>"; } } ?> </select> </p>
Je suis également tombé sur cette page:
http://www.commentcamarche.net/forum/af ... -naissance

mais je n'ai pas tout compris... J'ai essayé ceci mais je dois être loin du résultat:

Code : Tout sélectionner

$datecomplete = mktime(0, 0, 0, $_POST['mm'], $_POST['jj'], $_POST['aaaa']); $date_n = date('Ymd' , $datecomplete);
Merci par avance de vos lumières

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

14 nov. 2010, 02:47

Dans une base de données mysql, les champs de type DATE ont le format iso : AAAA-MM-JJ

Il te suffit donc de récupérer les valeurs de tes 3 champs et de les concaténer avec des tirets pour reconstruire ce format :
$anniv = $_POST['aaaa'] .'-'. $_POST['mm'] .'-'. $_POST['jj'];  
(ou $_GET le cas échéant)

Reste plus qu'à insérer en base ;)

Et pour récupérer tes 3 valeurs, il te suffit de ramener la date de ta base de donner et de découper la chaine (avec explode par exemple) pour retrouver ton jour, ton mois et ton année :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Benohit
Invité n'ayant pas de compte PHPfrance

14 nov. 2010, 02:49

J'ai trouvé la solution: partie html on ne change rien mais dans la validation php ça se passe comme ça:

Code : Tout sélectionner

if($_POST['jj']=="jj"){ $erreur .= "Le champ "Jour" est vide<br />"; } else { $jj = $_POST['jj']; } if($_POST['mm']=="mm"){ $erreur .= "Le champ "Mois" est vide<br />"; } else { $mm = $_POST['mm']; } if($_POST['aaaa']=="aaaa"){ $erreur .= "Le champ "Année" est vide<br />"; } else { $aaaa = $_POST['aaaa']; }
Et pour l'envoi des données:

Code : Tout sélectionner

if($erreur == ""){ $sql_query = "INSERT INTO table( datedenaissance ) VALUES ( '$aaaa-$mm-$jj' ); ";
"tout simplement"

Par contre maintenant j'ai une autre question: certains de mes champs ne veulent pas s'enregistrer dans MySql, je reçois cette erreur
Requête invalide : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'leboeuf', 'max', ' at line 16
.
(Ici je n'ai mis que les 2 premiers champs: nom et prénom). Est-ce normal aussi cette apostrophe juste avant "at line 16" ?
Voici ma partie html pour le nom:

Code : Tout sélectionner

<p> <label>Nom: <br/> <input type="text" name="nom" id="nom" value="<?=$nom?>" size="40"/> </label> </p>
la validation php:

Code : Tout sélectionner

if($_POST['nom']!=""){ $nom = $_POST['nom']; } else { $erreur .= "Le champ "nom" est vide<br />"; }
et l'envoi vers mysql:

Code : Tout sélectionner

if($erreur == ""){ $sql_query = "INSERT INTO table ( nom , prenom ) VALUES ( '$nom', '$prenom' ); ";
Encore une fois merci d'avance de vos réponses :)

Benohit
Invité n'ayant pas de compte PHPfrance

14 nov. 2010, 16:37

Merci pour ta réponse, je n'avis pas vu car on l'a écrit en même temps mais finalement j'ai trouvé une autre solution.
J'en profite pour faire remonter mon sujet, je suis censé rendre ça demain...

Benohit
Invité n'ayant pas de compte PHPfrance

14 nov. 2010, 17:17

Tout fonctionne maintenant, j'avais oublié une apostrophe à l'envoie des données. J'ai ensuite eu une autre erreur "header already sent" que j'ai corrigée en convertissant le document en utf8 SANS bom.