Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Passer une valeur via une ancre plutôt que via un

11 réponses
Avatar
Denis Bitouzé
Bonjour,

je souhaite qu'une date, saisie dans un de mes formulaires, obéisse à
un certain format de saisie.

Plutôt que créer un masque de saisie ou effectuer un contrôle a
posteriori, je souhaite que cette date soit saisie, lorsqu'un clic sur
le contrôle a lieu, via un script javascript qui affiche un calendrier :

http://www.garrett.nildram.co.uk/calendar/scw.htm

Le problème est que, si le contrôle en question est une boîte de saisie
(input de type text), l'utilisateur peut effectuer la saisie à la main
et donc ne pas respecter le format souhaité.

J'ai donc pensé à faire saisir la date en cliquant sur une ancre. Le
problème est que celle-ci ne passe aucune valeur dans $_POST.

J'ai essayé de faire remplir, par un script javascript, le contenu de
l'ancre dans un input caché mais je n'y parviens pas.

Auriez-vous une idée de la façon dont procéder ?

Merci d'avance.
--
Denis

10 réponses

1 2
Avatar
Jean-Francois Ortolo
Bonjour Monsieur

Une petite suggestion...

Utiliser la librairie Curl pour lancer l'autre url, avec les
paramètres calculés post qui vont bien.

Peut-être un peu compliqué ?...

Et puis, il faut bien distinguer ce qui est de l'ordre de PHP, de ce
qui est de l'ordre de HTTP, ou de HTML ( les formulaires, etc... ) donc
faire un audit des différents moyens de déclencher une requête http en
post, tout en ayant la possibilité de calculer le paramètre post, et
aussi de l'afficher.

Cela ne devrait pas être trop difficile ? ;)

Bien à vous.

Amicalement.

Jean-François Ortolo

--
Visitez le site http://www.pronostics-courses.fr/
qui donne des Statistiques, Pronostics et Historiques graphiques.

Les Statistiques sont calculées d'après une base de données
allant du 1/01/2000 jusqu'à très récemment.
Avatar
Pascal PONCET
Denis Bitouzé a écrit :

Le problème est que, si le contrôle en question est une boîte de saisie
(input de type text), l'utilisateur peut effectuer la saisie à la main
et donc ne pas respecter le format souhaité.



Bonjour,

Je pense qu'il suffit d'ajouter l'attribut "readonly" sur l'élément
"input" en question.
Evidemment, dans ce cas, l'utilisateur sera obligé de choisir dans le
calendrier, mais c'est peut-être ce qui était recherché, non ?

En HTML :
<input type="text" ... readonly>
En XHTML :
<input type="text" ... readonly="readonly" />


J'ai donc pensé à faire saisir la date en cliquant sur une ancre. Le
problème est que celle-ci ne passe aucune valeur dans $_POST.




Oui, un lien ou un bouton qui ouvre la fenêtre du calendrier.

Dans le cas d'un lien, ne pas oublier le "return false" qui annule le
comportement par défaut (qui est de suivre le lien).

<a href="#nothing" onclick="openCalendar(); return false;">...</a>

J'ai essayé de faire remplir, par un script javascript, le contenu de
l'ancre dans un input caché mais je n'y parviens pas.




Pas besoin d'un champ caché, il faut que le script du calendrier renvoie
la valeur formatée retenue dans le champ "input" initialement prévu pour
la saisie.

<code>
...
var dateField = opener.document.forms["formName"].elements["date"];
dateField.value = calendar.getFormattedResponse("jj/mm/aaaa");
self.close();
</code>

Cordialement,
Pascal
Avatar
Mickael Wolff
Denis Bitouzé a écrit :
Le problème est que, si le contrôle en question est une boîte de saisie
(input de type text), l'utilisateur peut effectuer la saisie à la main
et donc ne pas respecter le format souhaité.



Il suffit alors d'intercepter l'événement de saisie sur l'input et
filtrer. L'événement à intercepter est change
<http://www.w3.org/TR/html4/interact/scripts.html#adef-onchange>

Il y a aussi les événement keypress, keypressdown et keypressup que
tu peux intercepter et annuler. ce sera d'ailleurs plus facile :

<input onkeypress='return false' />

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Seeking for a position <http://lupusmic.org/pro/>
Avatar
SAM
Le 7/8/09 4:57 PM, Denis Bitouzé a écrit :
Bonjour,

je souhaite qu'une date, saisie dans un de mes formulaires, obéisse à
un certain format de saisie.

Plutôt que créer un masque de saisie ou effectuer un contrôle a
posteriori, je souhaite que cette date soit saisie, lorsqu'un clic sur
le contrôle a lieu, via un script javascript qui affiche un calendrier :

http://www.garrett.nildram.co.uk/calendar/scw.htm

Le problème est que, si le contrôle en question est une boîte de saisie
(input de type text), l'utilisateur peut effectuer la saisie à la main
et donc ne pas respecter le format souhaité.



Je ne comprends pas bien ta question.

Ce calendrier fonctionne très bien et
- est d'une facilité déconcertante de mise en place
- est multilingue
- sa page de démo te montre comment faire pour un champ de texte
(et/ou pour toute autre solution)

Auriez-vous une idée de la façon dont procéder ?



Comme dans la démo "basique" (*) ?

<input name="dateDepart" readonly
onfocus="scwShow(this,event);"
onclick="scwShow(this,event);" />


On peut aussi faire :

<input name="dateDepart" id="dateDepart" readonly />
<span onclick="scwShow(scwID('dateDepart'),event);">Cliquez moi
pour entrer votre date</span>

ou :

<input name="dateDepart" id="dateDepart" readonly />
<button onclick="scwShow(scwID('dateDepart'),event);">
Calendrier</button>

ou :

<input name="dateDepart" id="dateDepart" readonly />
<img onclick="scwShow(scwID('dateDepart'),event);"
src="calendrier.jpg" alt="" />




(*) <http://www.garrett.nildram.co.uk/calendar/scw.htm#howto>
aller à "trivial but fully functioning example"

Multilingue :
<http://www.garrett.nildram.co.uk/calendar/scwLanguages.js>


--
sm
Avatar
Denis Bitouzé
Le mercredi 08/07/09 à 17h43,
Pascal PONCET a écrit :

Denis Bitouzé a écrit :

> Le problème est que, si le contrôle en question est une boîte de
> saisie (input de type text), l'utilisateur peut effectuer la saisie
> à la main et donc ne pas respecter le format souhaité.

Bonjour,



Bonjour,

Je pense qu'il suffit d'ajouter l'attribut "readonly" sur l'élément
"input" en question.



Yeeeesss ! Merci, c'est cet attribut qui me manquait !

Evidemment, dans ce cas, l'utilisateur sera obligé de choisir dans le
calendrier, mais c'est peut-être ce qui était recherché, non ?



Effectivement ;)

En HTML :
<input type="text" ... readonly>
En XHTML :
<input type="text" ... readonly="readonly" />



OK.

> J'ai donc pensé à faire saisir la date en cliquant sur une ancre. Le
> problème est que celle-ci ne passe aucune valeur dans $_POST.
>

Oui, un lien ou un bouton qui ouvre la fenêtre du calendrier.



Euh... Que veux-tu dire ? Y a-t-il moyen de passer dans $_POST la date
saisie au moyen d'un lien ?

Dans le cas d'un lien, ne pas oublier le "return false" qui annule le
comportement par défaut (qui est de suivre le lien).

<a href="#nothing" onclick="openCalendar(); return false;">...</a>



Oui, ça, j'avais fait.
dans $_POST
> J'ai essayé de faire remplir, par un script javascript, le contenu
> de l'ancre dans un input caché mais je n'y parviens pas.
>

Pas besoin d'un champ caché, il faut que le script du calendrier
renvoie la valeur formatée retenue dans le champ "input" initialement
prévu pour la saisie.

<code>
...
var dateField = opener.document.forms["formName"].elements["date"];
dateField.value = calendar.getFormattedResponse("jj/mm/aaaa");
self.close();
</code>



Mais ceci est-il nécessaire avec :

<input type="text" ... readonly="readonly" />

?

Merci encore !

Cordialement.
--
Denis
Avatar
Denis Bitouzé
Le mercredi 08/07/09 à 17h41,
Mickael Wolff a écrit :

Il suffit alors d'intercepter l'événement de saisie sur l'input et
filtrer. L'événement à intercepter est change
<http://www.w3.org/TR/html4/interact/scripts.html#adef-onchange>



Qu'entends-tu par « filtrer » ?

Il y a aussi les événement keypress, keypressdown et keypressup
que tu peux intercepter et annuler. ce sera d'ailleurs plus facile :

<input onkeypress='return false' />



Euh, désolé, je ne vois pas bien ce que tu me suggères là...

Merci.
--
Denis
Avatar
Denis Bitouzé
Le mercredi 08/07/09 à 15h24,
Jean-Francois Ortolo a
écrit :

Bonjour Monsieur



Bonjour,

Une petite suggestion...

Utiliser la librairie Curl pour lancer l'autre url, avec les
paramètres calculés post qui vont bien.

Peut-être un peu compliqué ?...



Je ne sais pas, je ne me suis jamais penché sur la question.

Et puis, il faut bien distinguer ce qui est de l'ordre de PHP, de
ce qui est de l'ordre de HTTP, ou de HTML ( les formulaires, etc... )
donc faire un audit des différents moyens de déclencher une requête
http en post, tout en ayant la possibilité de calculer le paramètre
post, et aussi de l'afficher.



Effectivement, ça ferait du bien à mon application un peu foutraque...
Y a-t-il sur le net de la littérature à ce sujet ?

Cela ne devrait pas être trop difficile ? ;)



Rien n'est moins sûr ! ;)

Bien à vous.



De même.
--
Denis
Avatar
Denis Bitouzé
Le mercredi 08/07/09 à 23h29,
SAM a écrit :

Je ne comprends pas bien ta question.

Ce calendrier fonctionne très bien et
- est d'une facilité déconcertante de mise en place
- est multilingue
- sa page de démo te montre comment faire pour un champ de texte
(et/ou pour toute autre solution)



Je comprends que tu n'aies pas compris : ceci vient de ce que
j'ignorais l'attribut readonly.

Sinon, effectivement, le calendrier fonctionne à merveille, comme je
l'avais constaté :)

Merci !
--
Denis
Avatar
Pierre Goiffon
Denis Bitouzé wrote:
je souhaite qu'une date, saisie dans un de mes formulaires, obéisse à
un certain format de saisie.



Voi des choses comme le plugin masked input de JQuery
(http://digitalbush.com/projects/masked-input-plugin/)

Quand même bien *toujours* contrôler côté serveur...
Avatar
Jean-Francois Ortolo
Le 09/07/2009 14:28, Denis Bitouzé a écrit :

Effectivement, ça ferait du bien à mon application un peu foutraque...
Y a-t-il sur le net de la littérature à ce sujet ?




Bonjour Monsieur

Réponse: Dans le PHP Manual ?

L'utilisation des fonctions curl_*() est relativement évidente, pour
qui sait un peu ce qu'est une connexion TCP/IP en général, et une
connexion HTTP en particulier.

Dans l'ordre:

$ch = curl_init(); // Pour récupérer un identifiant de connexion
dans $ch

curl_setopt($ch, $param1, $value1);
curl_setopt($ch, $param2, $value2); // Pour fixer les paramètres de
la connexion.
...

$result = curl_exec($ch); // Connexion effectué, résultat dans $result

if(curl_error($ch))
{
// Traitement d'erreur.
// ...

curl_close$ch);
exit(-1); // Eventuellement.
}

close($ch); // Fermture connexion, le résultat des dans
$result

// Traitement de la variable $result
// .................

...Avec les arobases qui vont bien en début des noms des fonctions
@curl_*(), pour éviter des arrêts du script dus aux erreurs ( il faut
prévoir les erreurs, tout bon programmeur sait ça ).

Il va sans dire, que les paramètres à la fonction curl_setopt(...),
définissent le type de la connexion HTTP ( POST pour vous ), et que
d'autre part dans ce cas, il faut positionner le paramètre
CURLOPT_FOLLOWLOCATION à 1, et autres paramètres... le script de départ
se termine par exit(0); après le curl_close($ch), vu que le script est
remplacé par le script appelé en POST. C'est la moindre des choses.

Regardez les fonctions curl_ dans le PHP Manual, et les paramètres à
la fonction curl_setopt() , c'est instructif.

Quand même, les fonctions curl, c'est pas la mer à boire... ;)

Bien à vous.

Amicalement.

Jean-François Ortolo

--
Visitez le site http://www.pronostics-courses.fr/
qui donne des Statistiques, Pronostics et Historiques graphiques.

Les Statistiques sont calculées d'après une base de données
allant du 1/01/2000 jusqu'à très récemment.
1 2