[RESOLU] Datepicker et affichage input en Fr + vérification

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Datepicker et affichage input en Fr + vérification

Re: [RESOLU] Datepicker et affichage input en Fr + vérificat

par ionesco » 15 oct. 2013, 22:58

Bonjour,
Je ferai le changement, je te fais confiance. Je débute, je ne connais pas tous les pièges.
Encore merci.
Cordialement,
Ionesco

Re: [RESOLU] Datepicker et affichage input en Fr + vérificat

par computarelier » 14 oct. 2013, 13:15

Salut si tu dis que c'est bon, bah... c'est bon ! :-)

Mais j'aurai bien modifié :
 $dateAModifier=$datefr ? $datefr->format('Y-m-d'):date('d/m/Y');
en
 $dateAModifier=$datefr ? $datefr->format('Y-m-d'):date('Y-m-d');
quand même... :-)

[RESOLU] Datepicker et affichage input en Fr + vérification

par ionesco » 14 oct. 2013, 12:15

Bonjour,
Trop content pour être vrai. Le calendrier est utilisé dans la backoffice. Il y a peut-être un risque de ce fait.
Merci pour tes réponses, je ne connaissais pas toutes ces attaques potentielles. J'apprends beaucoup.
Néanmoins ma réponse postée est-elle correcte?
J'ai fait le test, si j'enregistre un nouveau jeu sans mettre de date, au moment de la modification sur la page Modif, la date du jour sera insérée automatiquement.
Y a-t-il une faille?
Cordialement
Ionesco

Re: [RESOLU] Datepicker et affichage input en Fr + vérificat

par computarelier » 13 oct. 2013, 16:41

Le calendrier ne marche pas, quelqu'un a désactivé JS, ton input est pas en readonly et est donc modifiable à la main, quelqu'un passe par un curl ou modifie les infos avec un tramper... :-)

Si tu penses que ça ne risque pas d'arriver, dans ce cas le ternaire que je t'ai signalé est inutile :-)

Re: [RESOLU] Datepicker et affichage input en Fr + vérificat

par ionesco » 13 oct. 2013, 16:27

J'ai essayé de modifier mais je ne vois pas la différence.
$dateAModifier=$datefr ? $datefr->format('Y-m-d'):date('d/m/Y');
Cela signifie mettre
$dateAModifier=$datefr ? $datefr->format('d/m/Y'):date('Y-m-d');
Peux-tu me dire à quel moment la date serait mal saisie?
Merci
Ionesco

Re: [RESOLU] Datepicker et affichage input en Fr + vérificat

par computarelier » 13 oct. 2013, 15:55

:non: Non non non... C'est pas terminé ! :-)

Pour ton update, tu prends $dateAMofifier :
$dateAModifier=$datefr ? $datefr->format('Y-m-d'):date('d/m/Y');
Ce petit bout de code te dit que si $datefr est ok, tu la convertis en date EN (ok !) sinon bah tu prends pour date la date d'aujourd'hui (ok !) ...
... mais en format fr ! :-) Modifie ça, des fois où la date donnée serait pas bonne sinon tu vas avoir des 000 !

@+
Computarelier

Re: Datepicker et affichage input en Fr + vérification

par ionesco » 13 oct. 2013, 12:36

Bonjour,
J'ai essayé de mettre en place la solution mais j'ai une erreur. Entre-temps, je suis parvenu à résoudre le problème. J'ai corrigé le code.

Mon code sur la page Modif
$date = $_POST['date'];
		$datefr = DateTime::createFromFormat('d/m/Y', $date);
		$dateAModifier=$datefr ? $datefr->format('Y-m-d'):date('d/m/Y');

$requete=$bdd->prepare("UPDATE jeux SET  date=:date WHERE id_jeux=:id");
			$requete->execute(array(
                                                 ':intitule'=>$intitule,
                                                 ':descriptif'=>$descriptif,
                                   		':date'=>$dateAModifier,
					        ':id'=>$id));
Et j'ajoute une requête supplémentaire qui affiche les éléments de la page HTML
//---requête fiche modif
$req=$bdd->prepare("SELECT * FROM jeux WHERE id_jeux=:id");
$req->execute(array(':id'=>$_GET['id']));
$jeux=$req->fetch();
Dans la même page, côté HTML
<label>DATE</label>
			<input type="text" name="date" id="datepicker" value="<?php $dateEn = $info['date'];
			$dateFr = DateTime::createFromFormat('Y-m-d',$dateEn);
			echo $dateModif= $dateFr ? $dateFr->format('d/m/Y'):date('Y-m-d');?>"/>
Il fallait juste modifié le contenu dans le input. A priori, pour le moment ça marche. Dans le firebug, les éléments apparaissent correctement. Le code ci-dessus est bon si çela intéresse certain(e)s internautes.

Grâce à tes explications computarelier, j'ai réussi. Merci de m'avoir accompagné jusqu'au bout. =D>
Ionesco

Re: Datepicker et affichage input en Fr + vérification

par computarelier » 12 oct. 2013, 11:16

Salut je reprends. Pour ton formulaire de modification d'un champs date :

1) Tu attribues à $date la valeur de ton champ SQL (format en)
2) Dans ton affichage tu fais une nouvelle datetime à partir de la date EN et tu fais un format en FR : comme ça les gens voient la date au format FR
3) Tu vérifies si la date est bonne en créant un datetime à partir de la FR et tu la mets dans une variable avec le format EN
4) Dans ton update tu mets cette variable EN

Normalement tu as tous les petits bouts de code éparpillés dans ce message ...

Est ce que c'est un peu plus clair ?

Re: Datepicker et affichage input en Fr + vérification

par ionesco » 11 oct. 2013, 14:25

Bonjour Computarelier,
Ça fait plaisir de voir que je ne suis pas seul dans ce grand marasme php.
Effectivement, j'ai essayé de modifier de différentes manières les dates. Le problème est que la date s'affiche malgré tout à l'anglaise, je ne parviens pas à la remettre en fr lors de l'affichage direct. Mais si je modifie la date avant de soumettre le formulaire, elle est bien en Fr. Et une fois le clic sur modifier, la nouvelle date s'enregistre bien dans la bdd.
Le souci est si je ne fais pas de modification, comme l'affichage est 0000-00-00, le format date d/m/Y n'est plus reconnu et donc dans la bdd, s'affiche la valeur par défaut 0000-00-00. Et je voudrais l'éviter mais je ne sais pas comment procéder ni même par où commencer.

Je ne comprends pas le dernier commentaire. Je ne saisis pas ce que je dois faire.
Pourrais-tu développer un peu plus?
Merci par avance,
Ionesco

Re: Datepicker et affichage input en Fr + vérification

par computarelier » 10 oct. 2013, 19:02

Vu que tu es dans un input autant faire en sorte que ça s'affiche normalement pour que l'utilisateur voit une date format FR. Est ce que c'est le cas ?

Si oui, dans la page qui traite le formulaire tu créés un DateTime avec ton $_POST['date'] et tu le convertis en Y-m-d pour la BDD. Si non, ben fais le en vue de pouvoir faire le si oui :-)

Re: Datepicker et affichage input en Fr + vérification

par ionesco » 10 oct. 2013, 16:46

Bonjour,
Merci pour cette réponse. En fait, quand je suis sur ma page modification, je souhaite voir apparaître les données que j'ai en bdd.
Ex: jeu, descriptif, date. Ce qui est dans ma bdd
Jeu : puissance 4
Descriptif: alignement de 4 jetons en h, v ou d
Date: 2013-10-11

Dans ma page modif.php
J'affiche ces éléments. Sauf que la date elle se présente ainsi au lieu de 11/10/2013
Jeu : puissance 4
Descriptif: alignement de 4 jetons en h, v ou d
Date: 2013-10-11

Donc si je modifie le nom du jeu et que je clique sur Enregistrer en bdd, j'obtiens:
Jeu : puissance 4
Descriptif: alignement de 4 jetons en h, v ou d
Date: 0000-00-00
Sans avoir modifier la date, il me met celle par défaut. Donc les dates sont fausses.
A l'inverse, si je modifie tout se passe bien.
J'aimerais éviter cette erreur et je ne sais comment faire.
Je ne sais comment placer dans le echo
echo $date->format('Y-m-d'); 
avec mon code: 
<input type="text" name="date" id="datepicker" value="<?php echo $jeux['date'];?>"/>
Est-ce : 
<input type="text" name="date" id="datepicker" value="<?php echo $date->format((Y-m-d')$jeux['date']);?>"/>
Merci
Cordialement
Ionesco

Re: Datepicker et affichage input en Fr + vérification

par computarelier » 10 oct. 2013, 16:31

Hellow,
Sur un objet DateTime tu peux agir comme ça :
echo $date->format('Y-m-d');

Ca te permet de :
1/ Tu récupères un POST en format date FR
2/ Tu créers un DateTime
3/ Ce DateTime tu le mets dans ta BDD avec ->format('Y-m-d');
4/ Ce même DateTime tu l'exploites en jQuery avec ->format('y-m-d');
etc ...

En fait je suis pas sûr de comprendre réellement to problème. :|

@+
Computarelier

Re: Datepicker et affichage input en Fr + vérification

par ionesco » 10 oct. 2013, 16:13

Bonjour,
Je reviens sur le sujet car j'ai noté un autre problème. J'ai essayé de le résoudre mais mes connaissances limitées ne me permettent pas de le solutionner. J'ai parcouru les informations contenues dans le lien. J'en ai pour 30 ans. Mais super intéressant. Les dates, un vrai casse-tête.
Je m'explique.
Suite à la solution que tu m'as proposée, qui fonctionne très bien, je n'ai pas réussi à l'appliquer dans un autre cas de figure: celui de la récupération de la date lors d'une modification.
Quand je mets ce code:
$date = $_POST['date'];
		$datefr = DateTime::createFromFormat('d/m/Y',$date);
		$dateAModifier=$datefr ? $datefr->format('Y-m-d'):date('d/m/Y');
Et l'affiche dans mon formulaire :
<label>DATE</label>
			<input type="text" name="date" id="datepicker" value="<?php echo $jeux['date'];?>"/>
		</div>
Dans ma bdd, j'ai ce problème.
Dans le champ input la date s'affiche à l'anglaise. Puis lorsque je la modifie, prend la forme d'une date en français. Puis les modifications sont envoyées à la bdd. Dans ce cas précis, aucun problème. Mais si la modification ne porte pas sur la date, mais sur le descriptif par exemple, la date retournée en bdd est modifiée et automatiquement devient 0000-00-00.
Je comprends la raison, que le format n'est pas reconnu donc on affiche par défaut. Je ne sais comment m'y prendre pour le modifier pour que ce soit vrai dans les 2 cas: avec ou sans modification.
Dans mon fichier jQuery : dateFormat:'yy-mm-dd'
J'ai essayé de modifier le format de la date qui est reçu Y-m-d pour que je puisse le lire en d/m/Y. C'est tombé à l'eau.
Je crois qu'il faut qu'il récupère l'un ou l'autre des formats mais avec la fonction jQuery, tout est figé.
Merci par avance à ceux qui m'éclaireront.
Cordialement,
Ionesco

Re: [RESOLU] Datepicker et affichage input en Fr + vérificat

par computarelier » 03 oct. 2013, 16:56

"Ma" méthode te souhaite de très longues et joyeuses heures de lecture. Les gars de PHP sont malsains. Rien que pour les dates et les heures t'en prends l'équivalent de 30 années d'abonnement à Paris Match : http://www.php.net/manual/fr/book.datetime.php .

Bonne lecture & à bientôt :)
Computarelier

Datepicker et affichage input en Fr + vérification

par ionesco » 03 oct. 2013, 16:39

Mille mercis.
Ça fonctionne au poil!
Ta réponse fait-elle partie d'une méthode ou bibliothèque, est-elle standard ? ou créée de toute pièce ? Car je ne connaissais pas certains éléments. Normal, je débute mais je cherche à progresser.
Ionesco