11548 sujets

JavaScript, DOM et API Web HTML5

Hello,

je suis en train de monter le formulaire suivant :
http://www.femmesbusinessangels.org/formulaire_pp.php

Vu le nombre de champs, de nombreux tests sont nécessaires, lorsqu'un champs n'est pas saisi, on obtient un message avec un lien permettant de retourner au formulaire.
Evidemment, lors du retour les champs déjà saisi doivent se retrouver dans le formulaire afin d'éviter toute nouvelle saisie.

Pour cela, j'ai utilisé la fonctionnalité javascript history.go(-1) et me suis aperçu que cette fonctionnalité ne fonctionne qu'avec la dernière version de IE. Ca ne fonconne ni avec Firefox ni avec IE<7.0.

J'ai essayé de remplacer avec history.back() mais idem.
Comment résoudre ce problème?

Merci

Pascal
tu fais tes tests en javascript donc?

pourquoi ne pas tous simplement annuler le champ de validation en faisant un return false();

si derriere tu fais de la validation php au cas où js est déconnecté. pas de miracle ( même en ecoutant cascada ) faut que tu mémorises les valeurs pour les remettre en place.

edit: hum je viens de regarder ca ne ressemble pas a de la validation javascript ça.

bon ben tu peux enrengistrer toutes les valeurs passées dans une variable serializé mise en session .
tu unserialize au retour du formulaire et pour chaque champs tu regardes s'il y avait pas un truc dans le tableau obtenu pour initialiser ton champs?

en pensant a unset la variable session pour pas garder de traces.

bon je dis ça. Ouuuh que j'aime pas ce genre d'exercice a écrire. on y arrive mais c'est tjs un peu relou.

pascal ( mais pas le même s'entend Smiley cligne )
Modifié par CPascal (11 Jun 2007 - 10:19)
a écrit :
tu fais tes tests en javascript donc?

Non en fait, tous les tests sont faits en php, dès qu'une erreur dans le formulaire est détectée je rajoute un lien "retour au formulaire" qui est reliée à une fonction javascript history.back()

, le javascript doit bien sûr être activé, mais lors des tests que j'ai effectué, il l'était.

D'ailleurs tu peux vérifier sur le formulaire, tu rentre n'importe quoi dans un champs
, tu valides, tu auras le lien, tu cliques dessus et tu verras que la valeur que tu avais rentrée dans le champs n'apparaît plus ( àmoins que tu ne soie sous IE 7).

C'est bizarre..
mais normal. ton formulaire envoie les données dans $_POST (si method post) à la page ou tu testes la validité mais aprés ton lien suivant ne renvoi rien.

que les precedents(ou javascript.history(-1);) redonnent parfois les valeurs moi je le prends plus comme une faille de sécurité. c'est en tout cas pas fiable.

d'où ma proposition ( alimenté par des souvenirs flou j'avoue):

serialize $_POST dans la page ou tu fais les tests.
mets ça dans une variable session.
retour a la page precedente on test si la variable session est remplie.
unserialize tu obtiens un tableau avec les même clés/valeurs que $_POST ( j'y crois a vérifier). et ensuite le test est pas trop dur a écrire.

sinon autre solution le test de la validité et le formulaire sont sur la même page. form action=$_SERVER['PHP_SELF']. et quand c'est bon que tous est ok tu sors de là avec un header("Location:....); qui t'emmenes vers la suite
Modifié par CPascal (11 Jun 2007 - 12:34)
Ok je vais voir , le serialize me paraît un peu compliqué Smiley ohwell


a écrit :
sinon autre solution le test de la validité et le formulaire sont sur la même page. form action=$_SERVER[PHP_SELF]. et quand c'est bon que tous est ok tu sors de là avec un header("Location:....); qui t'emmenes vers la suite

=> cela signifie que les tests doivent être effectué côté client avec javascript ce qui n'est pas le cas, il faudrait que je réécrive mes tests en javascript...
Smiley fache Smiley biggrin

bon reprennons. je pense pas que le serialize ça complique au contraire dans mon dernier job (avant de redevenir chomeur mon état trop habituel Smiley sweatdrop ) quelqu'un m'a donné cette astuce utilise serialize ça m'a drolement simplifié la vie. j'ai solutionné le pb en une ou 2 heures alors que je pataugeais depuis plusieurs jours car....

a écrit :
sinon autre solution le test de la validité et le formulaire sont sur la même page. form action=$_SERVER['PHP_SELF']. et quand c'est bon que tous est ok tu sors de là avec un header("Location:....); qui t'emmenes vers la suite


je n'utilisais pas ça initialement ce qui reste une bonne solution mais qui me demandais de tous reprendre mon code.....
et la dedans point de javascript. (sauf si on veut en rajouter pour faire plus dynamique ).

tu fais juste
nom: <input type="text" name="nom" 
 value="<?php if ((isset($_POST['nom'])) echo $_POST['nom']; ?> > 


par contre ça demande un code plus touffu sur une seule page puisque les tests php sont faits sur la page.

if ($_POST['unevariablecaché'] == 1 ) {
/* mes tests de validité */
}

si tous va bien redirection

sinon

si erreur affichage message erreur

affichage du formulaire
Modifié par CPascal (11 Jun 2007 - 12:34)
Ok là je comprend, je pense que je vais appliquer cette methode là.

Merci et bonne continuation... dans la recherche d'un job Smiley smile

Pascal