Euh merci, mais c'est plutôt toi que je soutiens que ton codeil est qd mm plein de ... fonctionnalités
Comme l'ont souligné, au moins, Auteur, Bovino et SpaceFrog, le html généré est incorrect. Ce serait bien de le corriger.
Reset or not reset ?
Sur un formulaire on peut avoir :
- un bouton submit : input type="submit"
- un bouton reset : input type="reset"
Comme l'on expliqué Bovino et Spacefrog, le bouton reset se contente de remettre les contrôles du formulaire à leur état initial.
Cet état initial est l'état connu au chargement de la page. Par exemple :
Avec une page initiale à :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 ... <form> ... <select> <option value="1" selected>un</option> <option value="2">deux</option> </select> ... <input type="reset" value="reset" /> </form> ...
Si l'utilisateur sélectionne 'deux', "2" sera la valeur du select.
Si maintenant il appuie sur le bouton reset, le ""navigateur"" va remettre la valeur du select à "1" qui est la valeur de l'option 'selected'.
Ce type de bouton ne fonctionnera pas dans ton formulaire, parce que : (si je reprends le même exemple)
Si l'utilisateur sélectionne 'deux', "2" sera la valeur du select.
MAIS tu soumets ton formulaire, c'est à dire que tu regénère ta page en PHP et elle revient modifiée :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 ... <form> ... <select> <option value="1">un</option> <option value="2" selected>deux</option> </select> ... <input type="reset" value="reset" /> </form> ...
Si maintenant il appuie sur le bouton reset, le ""navigateur"" va remettre la valeur du select à "2" qui est MAINTENANT la valeur de l'option 'selected' donc ça ne fait pas ce que tu attends.
A moins de changer la logique de ton code, ce qui consisterait à déporter les traitements que tu fais en PHP vers du Javascript dans la page, comme le proposent Bovino, SpaceFrog et SylvainPV, cela ne fonctionnera jamais.
Tes questions
Si tu mets une deuxième bouton submit dans ton formulaire, que se passe-t-il lors de l'appui sur ce bouton ?
La même chose qu'avec l'autre bouton submit déjà présent dans le formulaire :
- tu soumets ta page. Avec les contrôles et leurs valeurs.
Donc, au niveau de PHP, si tu veux faire la différence entre les deux états, il faut tester ce que tu récupères comme contrôles et leurs valeurs (je parle des boutons submit).
En fonction du bouton submit utilisé, tu devrais savoir si c'est une "sauvegarde" ou une "réinitialisation".
Tant que tu ne testes pas quel bouton a été utilisé, tu ne le sais pas.
Voilà pourquoi ça ne fonctionne pas.
Pour que ça fonctionne
En HTML4 et HTML5, un seul des deux boutons sera soumis (sous réserve qu'il ait un attribut 'name' valide, qu'il ne soit pas 'disabled', etc.) : celui utilisé.
Tu pourrais donc mettre
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ... <form> ... <input name="submit" type="submit" value="submit" /> <input name="reset" type="submit" value="reset" /> </form> ...
Et tester dans ton PHP un truc du genre (mais je n'y connais rien)
On devrait même pourvoir leur donner le même 'name' :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $RESET = ( $_POST['RESET'] == 'reset' ); ... if ( $RESET ) ...
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ... <form> ... <input name="action" type="submit" value="submit" /> <input name="action" type="submit" value="reset" /> </form> ...
Et tester
les pros sauront te conseiller.
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $RESET = ( $_POST['ACTION'] == 'reset' ); ... if ( $RESET ) ...
Dans ta solution actuelle, comme tu as créé un deuxième formulaire, qui lui ne contient AUCUN contrôle, quand on appuie sur le bouton submit, ton formulaire est soumis sans données, ton code PHP réinitialise ta page.
Voilà pourquoi ça fonctionne.
Quelle solution adopter ?
Bin ça dépend essentiellement de toi : si tu es aussi l'aise en Javascript qu'en PHP, que tu as le temps pour une refonte assez importante, ...
Quelques reflexions :
- comme tu fais de la validation incrémentale :
+ l'utilisateur, au travers du bouton "back" de son navigateur, peut revenir facilement à l'état précédent de sa saisie, impossible en AJAX- une solution AJAX :
+ il est assez facile de migrer vers du code sans Javascript du tout, le javascript dans un navigateur étant un trou de sécurité en lui même
= je ne sais pas si elle est nécessaire n'ayant pas analysé ton code en profondeur
- ça augmente le traffic réseau en nombre et en volume par rapport à une solution AJAX
- ça augmente la charge du serveur par rapport à une solution AJAX
+ meilleurs temps de réponse ("expérience utilisateur" comme on dit)
+ meilleure maintenabilité du coté PHP : plus de pages mais plus petites et plus simples
- basée sur de l'évènementiel asynchrone, pas la technique de programmation la plus simple à maitriser
- grosse refonte de code
Partager