PHP - date issue d'un formulaire, vers sql

Résolu/Fermé
Signaler
Messages postés
16
Date d'inscription
mercredi 19 décembre 2007
Statut
Membre
Dernière intervention
25 septembre 2013
-
Messages postés
16
Date d'inscription
mercredi 19 décembre 2007
Statut
Membre
Dernière intervention
25 septembre 2013
-
Bonjour !

Je débute en PHP, encore plus en sql.

Mon problème est :
- j'ai un formulaire html, qui me sert à compléter des données d'une base sql (method=post)
- Dans ce formulaire, je demande une date ($_POST['date']).

=> Pas moyen que sql reconnaisse cette date. Les autres données, aucun souci, il les récupère.
Mais la date envoyée par le formulaire ne doit pas être reconnue comme telle, et il me met des dates ou à 0000-00-00 00:00, ou à 1970-01-01 ...

=> Y a-t-il une solution, sans faire des études en informatique à Bac +5, pour avoir une chance de récupérer une simple date ? ^^

Ça fait des jours que je galère ... des fonctions php qui parlent de dates, il y en a des dizaines... Chacun ne marche apparemment que dans des contextes hyper précis, et hyper complexes ; et encore, en général il faut jongler avec une demie-douzaine d'entre elles pour afficher une date qui ressemble à quelque chose...
(mais pour l'envoyer en sql, nada...)

Comment se fait-il qu'il n'existe pas une simple fonction du genre :
fonction ('madate', 'aaaa-mm-jj');
qui transformerait la donnée "madate" que je récupère telle quelle du formulaire html dans le format requis apparemment par sql ?


Si quelqu'un peut me trouver une solution simple, je suis vraiment preneur !!

6 réponses

Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
856
Le truc si tu ne met pas en place la petite astuce de jeangilles, c'est qu'au niveau de ton script PHP de traitement, après avoir récupéré via $_POST la date remplie par l'utilisateur, il te faudra la remanier / traiter à l'aide des expressions régulières.
Ce qui t'amènera donc à utiliser les expressions régulières pour découper ta date et récupérer séparément les éléments qui la constituent (année, mois, jour).

Dans tous les cas il faut que tu arrive au final à récupérer l'année, le mois et le jour (solution de sinder les champs au niveau du formulaire évitera des erreurs et la lourdeur de devoir tester les différentes combinaisons directement en PHP)

Après, libre à toi d'insérer cette date de la manière qui va bien via ta requête SQL, mais pour ça tu sera obligé de connaitre le format d'enregistrement de ta date dans ta base (si ce n'est pas toi qui t'occupe de la base de données, demande à la personne en question, elle te répondra certainement)
Si le format de la date change d'une table à l'autre, le mec qui a fait la base de données "est un manche" (désolé si c'est toi, et cela n'engage que moi) : toujours utiliser le même format d'enregistrement, quitte à différentier l'affichage par la suite via un traitement dans tes scripts.



~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~
2
Messages postés
816
Date d'inscription
samedi 21 juin 2008
Statut
Membre
Dernière intervention
17 juillet 2012
184
Comment faire pour brider cela à un format qui convient ? 


le plus simple (mais vraiment très simple ^^), c'est d'au lieu d'avoir un seul champs où l'utilisateur rentre sa date entière, le découper en 3 champs différents jour, mois et année, là au moins tu es sûr de connaître le format puisque c'est toi qui le choisis ^^
1
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
856
Bonjour,


Je ne comprends pas trop ton souci, tu sembles avoir déjà toutes les cartes en main pour résoudre ton problème.

Comme tu l'as déjà remarqué, il y a surement un problème de format entre celui attendu par MySQL et celui que tu récupère dans ton script PHP.

Si tu souhaites créer / jouer avec les dates en PHP, il n'y a pas 36 solutions:
https://www.php.net/manual/fr/function.date.php

Reste donc à savoir le format dans lequel tu réceptionne ta date via $_POST. A partir de là, libre à toi de la reformatter pour qu'elle ressemble au format SQL attendu: AAAA-MM-JJ (avec l'heure éventuellement, selon la manière dont tu as le champ en question dans ta base de données)

Le fait que ton champ date soit rempli par 0000-00-00... ou 1970-01-01... s'explique facilement : comme le format attendu n'est pas respecté, la valeur par défaut (défini dans la table en question) est mise. Comme les dates en informatique commence le 01-01-1970... ou rien si tu as configurer avec des 0.
0
Messages postés
16
Date d'inscription
mercredi 19 décembre 2007
Statut
Membre
Dernière intervention
25 septembre 2013
19
Oui j'ai bien compris pourquoi ça m'a mis ces dates-là.
Le problème est double en effet :
1 - le format dans lequel je récupère ma date via $_POST
2 - la transformation de ce format en quelque chose de compatible avec ma base SQL.
Et en fait, les 2 me posent sans doute un souci.

1 : je ne sais pas forcément quelle forme prendra l'enregistrement de la date dans mon formulaire (a priori, les gens pourrait indiquer aussi bien 12-05-2010 que 12/5/10)
=> Comment faire pour brider cela à un format qui convient ?
A priori, je suppose en php, une fois le submit lancé : mais comment "lire" le format affiché et reconnaître que c'est non valide ?

2 : là j'avoue que je me perds franchement dans la façon de modifier un format de date en php. Je suis juste parvenu une fois à afficher dans un tableau une date sous un format lisible ( $date=date('d M Y', strtotime($row['site_datecablage'])); )
Mais dès que j'essaye d'utiliser une fonction qui ressemble à ça ailleurs, ça ressemble à rien...
J'essaierai de regarder à nouveau ce qui concerne les dates à l'adresse que tu m'as indiquée (mais j'avoue que j'entrave à peu près jamais rien à ce qui est raconté sur le site de php.net : ils n'y expliquent jamais les choses pour qu'elles soient compréhensibles par un néophyte ^^ )

Je te remercie néanmoins de l'attention apportée à mon souci ^^
0
Messages postés
16
Date d'inscription
mercredi 19 décembre 2007
Statut
Membre
Dernière intervention
25 septembre 2013
19
y a de l'idée oui ^^
Au pire si je m'en sors pas je partirai peut-être comme ça ;)
0
Messages postés
16
Date d'inscription
mercredi 19 décembre 2007
Statut
Membre
Dernière intervention
25 septembre 2013
19
J'ai fait la base et pas de souci c'est toujours le même format.
L'intérêt de la date en 1 seule case, c'est que c'est plus simple à saisir par l'utilisateur... Mais finalement comme ça me simplifie les choses derrière, ça pourrait bien être ma solution définitive.

A moins de spécifier le formatage nécessaire pour remplir la date ("format 31-01-2010" par exemple) ; ensuite, faut que je me débrouille pour faire un test derrière pour vérifier que le format est bien reconnu (10 caractères en tout, dont le 3° et le 6° étant des "-")... Et si c'est bon, je valide l'enregistrement que j'insère dans ma base ; sinon je mets un message d'erreur expliquant comment indiquer la date).

Je vais réfléchir à la 2ème solution déjà.
Et ensuite essayer de transformer le résultat en format compréhensible par sql.
(là, j'aurai peut-être besoin d'aide à nouveau, donc je redemanderai ici si besoin est ;) j'attends donc d'avoir avancé avant de clore le sujet... ou pas !)

Merci de votre aide en tous cas, ça m'aide à y voir plus clair.
(parce que franchement, le site php.net, pour présenter de façon compliquée en embrouillée ce qui ne l'est pas forcément à l'origine, ils sont assez forts ^^ )
0