Problème date sql php
Résolu/Fermé
eric204044
Messages postés
33
Date d'inscription
mercredi 30 juin 2010
Statut
Membre
Dernière intervention
15 septembre 2010
-
1 août 2010 à 14:37
eric204044 Messages postés 33 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 15 septembre 2010 - 1 août 2010 à 23:15
eric204044 Messages postés 33 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 15 septembre 2010 - 1 août 2010 à 23:15
A voir également:
- Problème date sql php
- Easy php - Télécharger - Divers Web & Internet
- Trier par date excel - Guide
- Airpods 3 date de sortie - Guide
- Trouver une date de naissance gratuit ✓ - Forum Google Chrome
4 réponses
HostOfSeraphim
Messages postés
6750
Date d'inscription
jeudi 2 février 2006
Statut
Contributeur
Dernière intervention
31 juillet 2016
1 608
Modifié par HostOfSeraphim le 1/08/2010 à 18:40
Modifié par HostOfSeraphim le 1/08/2010 à 18:40
Il est tout à fait possible de modifier le type d'un champ sur une table. Seulement... l'intégralité de vos dates enregistrées dans la table vont sauter si elles ne sont pas au bon format, exemple :
Par contre, une fois dans le bon format, le changement de type se fait sans dégât :
Il faudrait donc faire un traitement PHP (en SQL, je ne vois pas trop... le temps de chercher, tu aurais plus vite fait de le faire en PHP) qui parcourt l'ensemble des lignes, découpe le champ avec la date en 3 morceaux (année, mois, jour), les assemble dans le bon format, et les réinsère dans la table.
Configuration : Fedora 13 virtualisé sur machine hôte CentOS 5.5 (via VirtualBox)
MariaDB [test]> select * from t3; +------+------------+ | c1 | c2 | +------+------------+ | 1 | 01/02/2010 | | 2 | 05/04/2010 | | 3 | 03/05/2010 | | 4 | 20/05/2010 | | 5 | 12/07/2010 | +------+------------+ 5 rows in set (0.00 sec) MariaDB [test]> alter table t3 modify c2 date; Query OK, 5 rows affected, 5 warnings (0.17 sec) Records: 5 Duplicates: 0 Warnings: 5 MariaDB [test]> select * from t3; +------+------------+ | c1 | c2 | +------+------------+ | 1 | 0000-00-00 | | 2 | 0000-00-00 | | 3 | 0000-00-00 | | 4 | 0000-00-00 | | 5 | 0000-00-00 | +------+------------+ 5 rows in set (0.00 sec)
Par contre, une fois dans le bon format, le changement de type se fait sans dégât :
MariaDB [test]> select * from t3; +------+------------+ | c1 | c2 | +------+------------+ | 1 | 2010-02-01 | | 2 | 2010-04-05 | | 3 | 2010-05-03 | | 4 | 2010-05-20 | | 5 | 2010-07-12 | +------+------------+ 5 rows in set (0.00 sec) MariaDB [test]> alter table t3 modify c2 date; Query OK, 5 rows affected (0.11 sec) Records: 5 Duplicates: 0 Warnings: 0 MariaDB [test]> select * from t3; +------+------------+ | c1 | c2 | +------+------------+ | 1 | 2010-02-01 | | 2 | 2010-04-05 | | 3 | 2010-05-03 | | 4 | 2010-05-20 | | 5 | 2010-07-12 | +------+------------+ 5 rows in set (0.00 sec)
Il faudrait donc faire un traitement PHP (en SQL, je ne vois pas trop... le temps de chercher, tu aurais plus vite fait de le faire en PHP) qui parcourt l'ensemble des lignes, découpe le champ avec la date en 3 morceaux (année, mois, jour), les assemble dans le bon format, et les réinsère dans la table.
Configuration : Fedora 13 virtualisé sur machine hôte CentOS 5.5 (via VirtualBox)
eric204044
Messages postés
33
Date d'inscription
mercredi 30 juin 2010
Statut
Membre
Dernière intervention
15 septembre 2010
1 août 2010 à 19:04
1 août 2010 à 19:04
Merci pour ton aide, c'est justement ce que je cherche à faire: trouver un traitement en php qui me permette de changer le champ que je récupère dans mon formulaire de type text au format date et de stocker cette valeur dans la base de données à laquelle j'aurais préalablement changé le type varchar par le type date.
Cependant je ne vois pas trop comment passer de ma chaine de caractère au format date
Cependant je ne vois pas trop comment passer de ma chaine de caractère au format date
HostOfSeraphim
Messages postés
6750
Date d'inscription
jeudi 2 février 2006
Statut
Contributeur
Dernière intervention
31 juillet 2016
1 608
Modifié par HostOfSeraphim le 1/08/2010 à 19:30
Modifié par HostOfSeraphim le 1/08/2010 à 19:30
J'ai trouvé une solution. Attention, c'est un peu long, et je te conseille de faire l'essai sur une table temporaire dans un premier temps.
Configuration : Fedora 13 virtualisé sur machine hôte CentOS 5.5 (via VirtualBox)
MariaDB [test]> desc t3; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | c1 | varchar(10) | YES | | NULL | | | c2 | varchar(10) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.01 sec) MariaDB [test]> select * from t3; +------+------------+ | c1 | c2 | +------+------------+ | 1 | 01/02/2010 | | 2 | 05/04/2010 | | 3 | 03/05/2010 | | 4 | 20/05/2010 | | 5 | 12/07/2010 | +------+------------+ 5 rows in set (0.00 sec) MariaDB [test]> alter table t3 add c3 date after c2; Query OK, 5 rows affected (0.11 sec) Records: 5 Duplicates: 0 Warnings: 0 MariaDB [test]> update t3 set c3 = str_to_date(c2,'%d/%m/%Y'); Query OK, 5 rows affected (0.04 sec) Rows matched: 5 Changed: 5 Warnings: 0 MariaDB [test]> select * from t3; +------+------------+------------+ | c1 | c2 | c3 | +------+------------+------------+ | 1 | 01/02/2010 | 2010-02-01 | | 2 | 05/04/2010 | 2010-04-05 | | 3 | 03/05/2010 | 2010-05-03 | | 4 | 20/05/2010 | 2010-05-20 | | 5 | 12/07/2010 | 2010-07-12 | +------+------------+------------+ 5 rows in set (0.00 sec) MariaDB [test]> alter table t3 drop c2; Query OK, 5 rows affected (0.09 sec) Records: 5 Duplicates: 0 Warnings: 0 MariaDB [test]> alter table t3 change c3 c2 date; Query OK, 0 rows affected (0.09 sec) Records: 0 Duplicates: 0 Warnings: 0 MariaDB [test]> desc t3; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | c1 | varchar(10) | YES | | NULL | | | c2 | date | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.01 sec) MariaDB [test]> select * from t3; +------+------------+ | c1 | c2 | +------+------------+ | 1 | 2010-02-01 | | 2 | 2010-04-05 | | 3 | 2010-05-03 | | 4 | 2010-05-20 | | 5 | 2010-07-12 | +------+------------+ 5 rows in set (0.00 sec)
Configuration : Fedora 13 virtualisé sur machine hôte CentOS 5.5 (via VirtualBox)
eric204044
Messages postés
33
Date d'inscription
mercredi 30 juin 2010
Statut
Membre
Dernière intervention
15 septembre 2010
1 août 2010 à 19:48
1 août 2010 à 19:48
c'est gentil mais en fait, il me faudrait une solution qui me le fasse en php car je récupère pleins de date, donc je ne peux pas faire ça à chaque fois sur la table, il me faudrait convertir la chaine en date et mettre ensuite cette date au format date dans un champ également au format date de ma table sql
ca serait plus pratique mais je ne sais pas trop comment m'y prendre, j'ai trouvé sur le net la fonction str_to_date mais bon j'y comprend pas grand chose à vrai dire, je vais essayer d'étudier ça
si t'as une solution n'hésite pas
merci d'avance
ca serait plus pratique mais je ne sais pas trop comment m'y prendre, j'ai trouvé sur le net la fonction str_to_date mais bon j'y comprend pas grand chose à vrai dire, je vais essayer d'étudier ça
si t'as une solution n'hésite pas
merci d'avance
HostOfSeraphim
Messages postés
6750
Date d'inscription
jeudi 2 février 2006
Statut
Contributeur
Dernière intervention
31 juillet 2016
1 608
1 août 2010 à 19:51
1 août 2010 à 19:51
Il te suffit tout simplement de modifier ton script PHP pour que les dates enregistrées soient désormais dans le bon format... et d'exécuter une fois ce que j'ai mis plus haut pour corriger les dates précédemment enregistrées.
eric204044
Messages postés
33
Date d'inscription
mercredi 30 juin 2010
Statut
Membre
Dernière intervention
15 septembre 2010
1 août 2010 à 20:38
1 août 2010 à 20:38
ben c'est ça mon pb trouver comment modifier mon programme pour que les dates soient au format correct, corriger les dates précédentes n'est pas nécessaire, ma base n'est pas encore définitive
HostOfSeraphim
Messages postés
6750
Date d'inscription
jeudi 2 février 2006
Statut
Contributeur
Dernière intervention
31 juillet 2016
1 608
1 août 2010 à 21:39
1 août 2010 à 21:39
corriger les dates précédentes n'est pas nécessaire, ma base n'est pas encore définitive
Justement si : autant corriger pendant qu'il est encore temps. Ce n'est pas une fois la base rendue définitive que tu devras changer ça. Et un champ "date" pas dans le bon format, ça doit être corrigé.
Pour le script PHP, il faut utiliser la fonction explode() pour découper la chaîne.
Justement si : autant corriger pendant qu'il est encore temps. Ce n'est pas une fois la base rendue définitive que tu devras changer ça. Et un champ "date" pas dans le bon format, ça doit être corrigé.
Pour le script PHP, il faut utiliser la fonction explode() pour découper la chaîne.
eric204044
Messages postés
33
Date d'inscription
mercredi 30 juin 2010
Statut
Membre
Dernière intervention
15 septembre 2010
1 août 2010 à 21:52
1 août 2010 à 21:52
à quoi va me servir de faire un explode puisque ma date est au format texte comme ceci par exemple 01/08/2010 .
ma date dans ma table est maintenant au format date, mais l'insertion donne 0000-00-00
le explode est fait pour restructurer ma date, mais là elle est comme je la veux sauf qu'il faut que je la convertisse au format date.
j'essaye str_to_date mais ça donne aussi 0000-00-00
ma date dans ma table est maintenant au format date, mais l'insertion donne 0000-00-00
le explode est fait pour restructurer ma date, mais là elle est comme je la veux sauf qu'il faut que je la convertisse au format date.
j'essaye str_to_date mais ça donne aussi 0000-00-00
HostOfSeraphim
Messages postés
6750
Date d'inscription
jeudi 2 février 2006
Statut
Contributeur
Dernière intervention
31 juillet 2016
1 608
1 août 2010 à 22:36
1 août 2010 à 22:36
Justement : tu DOIS lui donner "à manger" une date au format AAAA-MM-JJ et pas autre chose !