Vous n'êtes pas identifié(e).
[Résolu]
(pas réussi à changer le titre du post)
Bonjour chers PHP-ticien(ne)s,
Si les tests sur les champs de mon formulaire renvoient des erreurs, le-dit formulaire est réaffiché avec les données de l'utilisateur. Les champs présentant une erreur sont mis en valeur par un changement de CSS. Ça fonctionne (non sans peine !).
MAIS : ma page est longue (pas le choix...) donc au rechargement, il faut descendre pour faire apparaître le fomulaire. L'utilisateur ne verra donc pas qu'il y a une erreur !
- J'ai essayé de rediriger vers une ancre avec un header("location: ../mapage.php#ancre_formulaire"); => l'ancre fonctionne, mais le message d'alerte ne s'affiche plus et le formulaire ne se remplit plus (comme si le php n'était pas lu après l'ancre).
- J'ai essayé la même chose, mais en décalant la ligne ci-dessus SOUS mon formulaire (= je réouvre php pour terminer le if avec ce header...); mais le header se retrouve après du HTML : pas bon.
- J'ai essayé avec : //echo'<meta http-equiv=\"refresh\" content=\"0; url=mapage.php#ancre_formulaire" />' => le navigateur renvoie une erreur 500. Mauvaise syntaxe ?
ET je ne peux pas compter sur l'utilisation de Javascript chez l'utilisateur...
D'avance, grand merci !
Oliv73
Dernière modification par oliv73 (27-01-2010 11:20:08)
Hors ligne
Hello,
Mon humble avis est que tu devrais faire les vérifications de ton formulaire avec de l'AJAX.
A savoir que lorsque ton utilisateur clique sur le bouton "Envoyer", ça va appeler un fonction JS qui va envoyer le contenu des champs de ton formulaire à script PHP qui va valider que toutes les informations sont présentes/cohérentes.
Après lors de la soumission du formulaire en elle même ton PHP refera les tests (tu n'es pas à l'abris que l'utilisateur ai désactivé le JS de son navigateur) et si y a une erreur tu le renvoie sur le formulaire en haut de page avec un texte : "Veuillez vérifier les champs indiqués en Erreur" et là l'utilisateur prendra le temps de scroller pour trouver le champs en erreur.
Parce que les ancres c'est bien pour quand tu fais un Dictionnaire ou une liste de mots, parce que du coup le mot est vraiment sous la barre d'adresse du navigateur, ce qui aide vraiment à la lecture. Dans le cas d'un formulaire tu vas le perturber, il comprendra pas forcément qu'il a été renvoyé sur le même formulaire...
Si tu as des question sur comment réaliser le mécanisme indiqué plus haut, pose les
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Bonjour Maskime,
Merci pour cette réponse rapide, précise et soignée.
Il y a un "petit" obstacle à utiliser AJAX : j'en connais tout juste le nom ! Alors ce ne sont pas des questions que je te poserais, mais un cours qu'il me faudrait .
Quant à Javascript, c'était exactement le fait que l'utilisateur puisse le désactiver, qui m'a obligé à effectuer un contrôle (+ une sécurisation grâce à htmlentities et strip_tags) côté serveur. Du coup la vérification côté client était redondante.
Perturber mon visiteur en le redirigeant sur le formulaire ? Peut-être... si tu veux te faire une opinion c'est par ici : http://XXX
Par contre pourquoi ne pas afficher un message en tête de page, effectivement Maskime : ça je sais faire. C'est une solution pour l'ergonomie, qui respecte la sécurité.
Appel au bon peuple : ça doit quand même être possible d'envoyer sur une ancre avec PHP, en laissant s'exécuter les balises PHP en aval de cette ancre ?
"header(location " ferait-il perdre les variables ? Une autre commande existerait-elle ? (C'est pas faute d'avoir cherché...)
Merci encore !
Dernière modification par oliv73 (27-01-2010 08:33:19)
Hors ligne
Hello,
Bon je vois mieux pourquoi est ce que tu veux utiliser ton ancre, maintenant que j'ai vu la page
La raison pour laquelle tu perds le remplissage de tes champs :
J'imagine que dans le value de tes champs tu fais un truc du genre <?php echo @$_POST['nom_du_champs']; ?>
Or lorsque tu fais un header('Location:...'); Ton navigateur va recharger la page sans re-soumettre les posts de ton formulaire => du coup les posts sont vides => du coup plus de valeur de champs
Essaye de mettre directement l'ancre dans l'action du formulaire :
<form action='metamis.php#ancre_formulaire'...
Comme ça si y a une erreur tu es déjà sur la page de formulaire et tu seras bien renvoyé à ton ancre.
SI pas d'erreur j'imagine que tu dois renvoyer vers une page genre "Merci....".
Dis moi ce que ça donne
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Grand bonjour, Maskime !
Génial, tu es génial !
Ta solution de mettre directement l'ancre dans l'action du formulaire est exactement ce que je cherchais ! Ça marche nickel.
Dire que j'ai cherché deux jours...
Merci, grand merci !
Très bonne journée à toi.
(Je vais essayer de marquer ce post comme résolu)
Dernière modification par oliv73 (27-01-2010 10:12:09)
Hors ligne
Je vais dire à ma nana que tu penses comme elle,
Elle sera rassurée de pas être la seule
Bonne journée.
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Avant que tu n'attrappes la grosse tête
comment faire pour marquer ce post comme résolu, STP ?
Hors ligne
Tu modifies ton premier post et il me semble que tu peux changer le titre du post et rajouter un [Résolu] au début.
Sinon tu laisse tel quel on a l'habitude
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne