Discussion:
Passer une valeur via une ancre plutôt que via un <input>
(trop ancien pour répondre)
Denis Bitouzé
2009-07-08 14:57:53 UTC
Permalink
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
Jean-Francois Ortolo
2009-07-08 15:24:32 UTC
Permalink
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.
Denis Bitouzé
2009-07-09 12:28:56 UTC
Permalink
Le mercredi 08/07/09 à 15h24,
Post by Jean-Francois Ortolo
Bonjour Monsieur
Bonjour,
Post by Jean-Francois Ortolo
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.
Post by Jean-Francois Ortolo
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 ?
Post by Jean-Francois Ortolo
Cela ne devrait pas être trop difficile ? ;)
Rien n'est moins sûr ! ;)
Post by Jean-Francois Ortolo
Bien à vous.
De même.
--
Denis
Jean-Francois Ortolo
2009-07-09 17:48:31 UTC
Permalink
Post by Denis Bitouzé
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.
Mickael Wolff
2009-07-08 17:41:39 UTC
Permalink
Post by Denis Bitouzé
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/>
Denis Bitouzé
2009-07-09 12:28:56 UTC
Permalink
Le mercredi 08/07/09 à 17h41,
Post by Mickael Wolff
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 » ?
Post by Mickael Wolff
Il y a aussi les événement keypress, keypressdown et keypressup
<input onkeypress='return false' />
Euh, désolé, je ne vois pas bien ce que tu me suggères là...

Merci.
--
Denis
SAM
2009-07-08 23:29:14 UTC
Permalink
Post by 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
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)
Post by Denis Bitouzé
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
Denis Bitouzé
2009-07-09 12:28:56 UTC
Permalink
Le mercredi 08/07/09 à 23h29,
Post by SAM
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
SAM
2009-07-09 23:20:34 UTC
Permalink
Post by Denis Bitouzé
Le mercredi 08/07/09 à 23h29,
Post by SAM
Je ne comprends pas bien ta question.
Ce calendrier fonctionne très bien
Je comprends que tu n'aies pas compris : ceci vient de ce que
j'ignorais l'attribut readonly.
Heu ... ça existe depuis ... houlala ! ... le siècle dernier.
(pratique pour condamner/bloquer un bouton submit le temps d'attendre le
retour du formulaire)

Petite révision du HTML ? au moins les inputs :
<http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.4>
<http://www.w3.org/TR/REC-html40/interact/forms.html#adef-readonly>
et les mêmes en fr :
<http://www.la-grange.net/w3c/html4.01/interact/forms.html#h-17.4>
<http://www.la-grange.net/w3c/html4.01/interact/forms.html#adef-readonly>
Pour le XHTML ce qui nous intéresse ici est au 4.5 de :
<http://www.la-grange.net/w3c/xhtml1/#diffs>
d'ou : <input readonly="readonly" />
Post by Denis Bitouzé
Sinon, effectivement, le calendrier fonctionne à merveille, comme je
l'avais constaté :)
Ha! Bon! Ouf !
Post by Denis Bitouzé
Merci !
Ceci étant c'est peut-être un peu "lourd" tout ce calendrier juste pour
faire :
<p>Date : <input name="laDate" /> (au format: JJ/MM/AAAA)

Bon! à la rigueur un petit JS de vérif ?
<p>Date (au format: JJ/MM/AAAA):
<input name="laDate" onchange="dater(this)" />

function dater(quoi) {
if(!quoi.value.match(/\d\d\/\d\d\/\d\d\d\d/)) {
alert('la date n\'est pas au bon format');
setTimeout(function(){quoi.focus();quoi.select();},100);
}
}

Et, en tous cas, faire de même en PHP. (la vérif du format)
sans doute en un peu plus pointu ?
(le jour au jour et le mois au mois, pour le moins)
--
sm
Pierre Goiffon
2009-07-09 14:43:39 UTC
Permalink
Post by Denis Bitouzé
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...
Loading...