8722 sujets

Développement web côté serveur, CMS

Bonjour.

Je poste ce message dans cette rubrique, mais je ne sais pas si le problème ne se trouve pas ailleurs...

C'est assez simple comme démo, et franchement, je m'arrache les cheveux sur ce soucis sans rien trouver...

J'ai un Form tout bête avec un Select et un bouton Submit.
Je fais un strcmp pour positionner le Selected par rapport au $_GET posté par le même select.
Ça marche bien ... pas de soucis ... sauf quand j'essaye d'utiliser les bouton de navigation avant/arrière de mon navigateur.

Pour tester, submitez A, puis B, puis C... et faites ensuite des retour arrière avec le navigateur, le select ne se positionne pas à la bonne ligne même si le strcmp trouve la valeur... Je comprend pas trop... Si quelqu'un a une idée ou une explication, je suis preneur Smiley sweatdrop


<?php 
$param = (isset($_GET['paramurl'])) ? $_GET['paramurl'] : 'a';
echo 'La valeur du passée dans le GET est bien : '.$param 
?>
<form name="recherche" method="get" action="" >
      <select name="paramurl">
        <option value="a" <?php if (!strcmp('a', $param)) {echo "selected=\"selected\"";} ?>>aaaaaa</option>
        <option value="b" <?php if (!strcmp('b', $param)) {echo "selected=\"selected\"";} ?>>bbbbbb</option>
        <option value="c" <?php if (!strcmp('c', $param)) {echo "selected=\"selected\"";} ?>>cccccc</option>
        <option value="d" <?php if (!strcmp('d', $param)) {echo "selected=\"selected\"";} ?>>dddddd</option>
        <option value="e" <?php if (!strcmp('e', $param)) {echo "selected=\"selected\"";} ?>>eeeeee</option>
      </select>
  <input type="submit" name="button" id="button" value="Envoyer">
</form>



Merci d'avance

Franck
Quand tu reviens en arrière, tu retournes sur ta page générée préalablement, par exemple B.

En même temps pour aller sur C, tu as sélectionné l'option correspondante dans le Select.

Cette sélection est sauvegardée par le navigateur. Donc tu as B ainsi que l'option ccccc sélectionnée.
Bonsoir,

C'est un comportement normal du navigateur, qui peut en effet être problématique dans certain cas.
Cela permet d'éviter la perte des informations saisies dans le formulaire en cas de retour en arrière.

Pour actualiser la page et remettre les champs par défaut, il faut faire ctrl shift R.

Edit : Grillé Smiley biggrin
Edit 2 : pourquoi faire un if (!strcmp('a', $param)), alors qu'un if ('a' == $param) pourrait suffire ?
Modifié par benj (07 Jan 2014 - 01:05)
Modérateur
benj a écrit :
C'est un comportement normal du navigateur


+1

Pour contrecarrer ce comportement, le local storage devrait t'aider
Merci tout le monde.

Je me doute bien que ce comportement est lié à la récupération des données de Form, mais il faut avouer que çà peut générer des problèmes... Smiley eek

Dans le cas présent, j'ai un affichage du select qui ne suit pas son code html puisque le selected est sur une autre ligne que ce qui est affichée pour l'utilisateur...

Benj : J'utilise toujours strcmp pour comparer des données textuelles, c'est une vielle habitude d'automaticien (sur un automate programmable, tu compare toujours des données de même type)... Les variables PHP qui stockent ce que tu veux, des int, des string, des bool, et qui peuvent être comparées entre elles, c'est un truc que je n'ai pas encore digéré (tu peux te retrouver à comparer un string avec un int, et là, le résultat n'est pas fiable...), mais je vais m'y faire, bien que je trouve cela peu sûr...

En résumé, pour moi, le cache, c'est ... ou pas...

En tout cas, merci beaucoup pour votre aide, je vais contourner la chose.

Franck
florealpes a écrit :
Benj : J'utilise toujours strcmp pour comparer des données textuelles, c'est une vielle habitude d'automaticien (sur un automate programmable, tu compare toujours des données de même type)... Les variables PHP qui stockent ce que tu veux, des int, des string, des bool, et qui peuvent être comparées entre elles, c'est un truc que je n'ai pas encore digéré (tu peux te retrouver à comparer un string avec un int, et là, le résultat n'est pas fiable...), mais je vais m'y faire, bien que je trouve cela peu sûr...
Les données que tu récupèrera avec un $_POST ou un $_GET seront toujours des string Smiley cligne