Page 1 sur 1

Enregistrement date base de données (date trop ancienne)

Posté : 08 avr. 2011, 18:01
par Faksprod
Bonjour à tous,

Je rencontre un problème avec des dates enregistrées dans une de mes bases de données. J'ai un système d'inscription tout simple à une newsletter sur un site. Je stock les adresses emails des abonnés dans un base de données en enregistrant également leur date d'inscription comme ceci:
$adresse = "[email protected]";
$date = date("d-m-Y");
// [ ...connexion base, sélection de la table, etc... ]
$inserer = "INSERT INTO maTable(champAdresse, champDate) VALUES('$adresse', '$date')";
// [ ...fermeture connexion, etc... ]
J'ai mis en place ce système il y a deux mois. Cependant quand je fouille dans ma base de données je trouve des inscriptions qui date de 2005 :shock: (ce qui est totalement impossible je n'avais même pas le site à cette date). Quel est ce curieux bug? Est-ce que la fonction date() de PHP se base sur la machine de l'utilisateur? (Il me semble que non j'ai fait des tests en modifiant la date de mon ordinateur (7 avril 2011) et la fonction date() exécuter en ligne me retournait la bonne date (8 avril 2011). Donc j'imagine que cette fonction se base sur la date récupérer sur le serveur.)
Mais alors d'où vient ce problème???? Mes recherches sur Google ne sont pas vraiment fructueuses c'est pourquoi je demande votre. Quelqu'un aurait-il rencontré le même problème? Je suis preneur de toutes vos idées ou explications!

Merci par avance et bon week-end à tous!

Re: Enregistrement date base de données (date trop ancienne)

Posté : 08 avr. 2011, 18:14
par stealth35
pourquoi ne pas avoir fait :
INSERT INTO maTable(champAdresse, champDate) VALUES('$adresse', NOW())

Re: Enregistrement date base de données (date trop ancienne)

Posté : 08 avr. 2011, 18:27
par Faksprod
Et bien parce que je ne m'y connais pas des masses en PHP/ SQL :wink:
Stealth35 merci pour ta réponse, je vais corriger mon code.
Cela dit je ne sais pas si cela va régler ce drôle de problème. Est-ce que la fonction SQL NOW() est plus précise que date() en PHP?

Est-ce quelqu'un aurait déjà rencontré ce problème :?:

Merci et bonne continuation!

Re: Enregistrement date base de données (date trop ancienne)

Posté : 08 avr. 2011, 18:50
par xTG
Disons plutôt que la fonction NOW() est une fonction SQL ce qui empêche les erreurs d'interprétation de date lors de la requête.
Car tu as renseigné une date européenne alors que les mysql attend en premier lieu un format US.

Re: Enregistrement date base de données (date trop ancienne)

Posté : 08 avr. 2011, 19:23
par Faksprod
Merci beaucoup pour vos réponses,

Maintenant que j'ai modifié mon code je me retrouve avec un autre problème :lol: .
Le format de la date d'enregistrement en maintenant au format US dans mon champ "date". Toutes les dates enregistrées depuis deux mois sont elles au format Européen...
J'aimerais modifier tous les champs "date" qui sont au format Européen en format US. J'ai plus de 2000 lignes à traiter donc il serait bien que j'automatise le tout.

Pourriez-vous m'indiquer sur quelle fonction je dois me pencher?

Encore merci et bonne continuation

Re: Enregistrement date base de données (date trop ancienne)

Posté : 08 avr. 2011, 19:54
par Faksprod
Voilà une solution à ma dernière question :
Pour modifier tous les champs "champDate" contenant une date au format "dd-mm-yyyy" en "yyyy-mm-dd" vous pouvez faire :
update maTable set champDate = concat_ws('-',substring(champDate, 7, 4),substring(champDate, 4, 2),substring(champDate, 1, 2))
Bonne continuation à tous.