Insertion en base de donnée (petit soucis)

Eléphant du PHP | 169 Messages

13 sept. 2007, 15:15

Et oui encore moi !!!
heureusement que vous êtes la !

Voila, je "coupe" une date qui a ce format "00/00/0000" pour que je puisse lister les mois en lettre.
if (preg_match("#^[0-9]{2}\/{1}[0-9]{2}\/{1}[0-9]{4}$#", $debut_congres))
{
// SI la valeur saisie est correcte on décompose $debut_congres 
list ($jour_debut_congres, $mois_debut_congres, $annee_debut_congres) = explode ("/",$debut_congres); 
			
// on transforme la variable $mois_debut_congres (lister au dessus) de chiffres vers lettres et enregistre dans $mois_debut_congres_lettre 
switch ($mois_debut_congres)
{
case 01 : $mois_debut_congres_lettre ="janvier"; break;
case 02 : $mois_debut_congres_lettre = "février"; break;
case 03 : $mois_debut_congres_lettre = "mars"; break;
case 04 : $mois_debut_congres_lettre = "avril"; break;
case 05 : $mois_debut_congres_lettre = "mai"; break;
case 06 : $mois_debut_congres_lettre = "juin"; break;
case 07 : $mois_debut_congres_lettre = "juillet"; break;
case 08 : $mois_debut_congres_lettre = "août"; break;
case 09 : $mois_debut_congres_lettre = "septembre"; break;
case 10 : $mois_debut_congres_lettre = "octobre"; break;
case 11 : $mois_debut_congres_lettre = "novembre"; break;
case 12 : $mois_debut_congres_lettre = "décembre"; break;
default ; break; 
}
					
// on donne la composition de la variable $_SESSION[date_fin], pour que l'on puisse affichier le bon format dans le cas ou il y aurais une erreur
$_SESSION['date_debut'] = $jour_debut_congres.'/'.$mois_debut_congres.'/'.$annee_debut_congres;
				
// on donne la composition de la variable SESSION[date_fin_sql] pour quelle soit au format americain 2007-05-12
$_SESSION['date_debut_sql'] = $annee_debut_congres.'-'.$mois_debut_congres.'-'.$jour_debut_congres;
}
je veux insérer dans ma base de donnée le nom de la date en lettre
$sql = "INSERT INTO agenda
VALUES					('','".$congres."','".$mois_debut_congres_lettre."','".$_SESSION[date_debut_sql]."','".$_SESSION[date_fin_sql]."','".$annee_debut_congres."')";
lorsque je vérifie dans ma table, le champs qui vas récupérer le mois en lettre est vide ????
j'ai vérifier mon code et ne trouve pas d'erreur (selon mes connaissance, bien sur :roll: )
quelqu'un pourrais t'il jeté un coup d'oeil ?

Merci de votre participation
--
Kweb

d0m
Mammouth du PHP | 1141 Messages

13 sept. 2007, 15:23

$mois_debut_congres, résultat de l'explode est une chaine de caractère

alors que dans ton switch tu testes tes cas avec des entier.
Il faut ajouter des quotes :
case '01' :

Eléphant du PHP | 169 Messages

13 sept. 2007, 15:26

Ouuuppssss !!!!
c'est vraie.

Merci a toi
--
Kweb

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

13 sept. 2007, 15:27

Hum.. si ton champ est de type date, c'est normal que tu ne puisses le faire (et il n'y a d'ailleurs aucun intérêt à le faire ainsi). Le format d'un champ date MySQL est "AAAA-MM-JJ", y a pas de texte, de "st" ou de "th", de jour de la semaine ou autre, une date c'est une date :)

Si tu veux afficher le nom du mois, tu peux soit le convertir à partir du numéro lors de l'affichage, ou si tu tiens absolument à le stocker, utiliser un champ de type Varchar suffisament grand pour stocker ta chaine. Sachant que dans ce second cas, tu te prives de toutes les fonctions disponibles sur les dates (recherche, calcul, interval, ...)

Edit : oops, bon bah j'avais pas compris la question apparement.. mais le fait n'en est pas moins vrai qu'il vaut mieux stocker des dates dans des champs date ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...