Problème de cache ?
Bonjour,
Voila, je commence a venir souvent quand même, mais je vais representer mon projet, je dois faire un envoi de mail en combinant php et html, tout ça en 3 pages, l'une qui prend les variables (le formulaire html) qui passe a la seconde page qui vérifie tous les champs, réajustent quelques problèmes, et affiche un récapitulatif, permettant a l'utilisateur de faire précedent (c'est la le problème, mais j'y reviens.), et enfin la troisième page, qui envoie le mail après validation.
Lorsque l'utilisateur se trompe dans la syntaxe d'un champ, ou oublie d'en remplir un, la deuxième page le bloque, et lui demande de faire "précedent", le bouton marche, mais l'utilisateur se retrouve devant un formulaire vide. Exit les informations qu'il avait saisi. Je suis pratiquemment sûr que c'est un problème lié au cache du serveur php, mais mes variables sont récupérés en post pour la seconde page, puis je les attribue en session directement après (Pas très utile, vous me direz.).
Est ce que c'est vraiment le cache du serveur attribué a la session utilisateur ? Auquel cas, mes variables doivent être directement en session, ou bien je peux garder ma méthode Post ?
Merci d'avance.
Voila, je commence a venir souvent quand même, mais je vais representer mon projet, je dois faire un envoi de mail en combinant php et html, tout ça en 3 pages, l'une qui prend les variables (le formulaire html) qui passe a la seconde page qui vérifie tous les champs, réajustent quelques problèmes, et affiche un récapitulatif, permettant a l'utilisateur de faire précedent (c'est la le problème, mais j'y reviens.), et enfin la troisième page, qui envoie le mail après validation.
Lorsque l'utilisateur se trompe dans la syntaxe d'un champ, ou oublie d'en remplir un, la deuxième page le bloque, et lui demande de faire "précedent", le bouton marche, mais l'utilisateur se retrouve devant un formulaire vide. Exit les informations qu'il avait saisi. Je suis pratiquemment sûr que c'est un problème lié au cache du serveur php, mais mes variables sont récupérés en post pour la seconde page, puis je les attribue en session directement après (Pas très utile, vous me direz.).
Est ce que c'est vraiment le cache du serveur attribué a la session utilisateur ? Auquel cas, mes variables doivent être directement en session, ou bien je peux garder ma méthode Post ?
Merci d'avance.
29 réponses
Résumé de la discussion
Le cœur du sujet est la gestion d’un formulaire en trois pages, avec saisie, validation et récapitulatif, et un retour qui efface les données saisies. Plusieurs réponses proposent des solutions pour préserver l’état des champs, notamment stocker les valeurs en session plutôt qu’en POST et pré-remplir les inputs au retour. Des conseils portent aussi sur le comportement du bouton retour ou des liens dédiés, tels history.go(-1) ou des paramètres GET, afin de contrôler le flux et éviter la perte. Une nuance utile concerne les listes déroulantes alimentées par des fichiers texte, où la récupération des valeurs via session nécessite une logique d affichage et une réinitialisation conditionnelle.
-
En fait, j'aimerais bien pouvoir mettre "résolu", mais je ne peux pas, je n'ai pas le bouton pour faire ça... Et je n'arrive même pas a creer un nouveau sujet, le formulaire me dit que mon nom de sujet est incorrect (qu'il est vide, et non précis...)
-
ContributeurMais de rien ^^
si ton problème est résolu tu peux l'indiquer sur ton sujet ;) -
A la suite d'un problème de connexion internet, j'ai pas pu te remercier encore une fois pour ton aide. Donc, merci encore, tout ça marche maintenant, je suis devant un autre problème, qui ne vient pas de moi je pense, je posterai un autre sujet pour ça.
Désolé pour le retard, et l'impolitesse, merci de ton aide. -
Contributeurle mieux, c'est que tu utilises le code que je t'ai donné tel quel. Le switch est un peu comme un if multiple, mais tu l'auras remarqué, il n'a pas vraiment de else.
Le but ici du code est de faire une variable pour chaque checkbox dans laquelle on rajoute le bout de ligne permettant de dire si elle sera cochée ou non.
Donc je commence par passer sur toutes ces variables à vide, puis je parcours mon tableau et le switch remplit les variables s'il le faut.
Ensuite je fais un echo par input avec la variable complétée ou non...
C'est mieux de faire un seul echo par input, comme ça si tu veux changer un truc dans ton input, pas besoin de modifier à plusieurs endroits.
C'est une logique qui t'évitera des soucis. -
J'ai fait a quelque chose près ce que tu as marqué, vraiment, a quelque chose près, j'ai préfère faire ça pour chaque input, c'était pas plus rapide, mais ça me paraissait plus lisible pour moi.
ça donne ça du coup :
if (isset($_SESSION['options'])) { foreach ($_SESSION['options'] as $i) { switch ($i) { case "option1 " :
echo '<input type="checkbox" name="options[]" value="option1" checked = "checked"/> option1<br/>'; break; } } } else {
echo '<input type="checkbox" name="options[]" value ="option1"/>option1<br/>' ; }
Il reprend bien les cases cochées, même trop bien, puisque il efface celles qui ne le sont pas, faute a un manque d'echo qui afficherait l'input même si la variable $_SESSION['options'] est set.
Le problème, c'est que je sais pas vraiment ou mettre ce code, le switch ne dispose pas de else, et dans mon if, je ne sais pas comment l'écrire au niveau de la syntaxe... -
Contributeurc'est en gros un if multiple, tout indiqué pour contrôler des valeurs de tableau
tu peux faire un truc du genre :
$option1 = ""; $option2 = ""; $option3 = ""; $option4 = ""; $option5 = ""; foreach ($_SESSION['options'] as $val) { switch ($val) { case "option1" : $option1 = " checked"; break; case "option2" : $option2 = " checked"; break; case "option3" : $option3 = " checked"; break; case "option4" : $option4 = " checked"; break; case "option5" : $option5 = " checked"; break; } } echo "<input type=\"checkbox\" name=\"options[]\" value=\"option1\" $option1/>"; etc... -
Pour le var_dump le voici : array(5) { [0]=> string(7) "option1" [1]=> string(7) "option2" [2]=> string(7) "option3" [3]=> string(7) "option4" [4]=> string(7) "Option5" }
un switch ? Je connais pas cette commande, je vais voir ça tout de suite. -
ContributeurQu'est ce que ton tableau contient ? (var_dump)
pour parcourir un tableau tu peux faire un foreach et après pour controler les valeurs tu peux utiliser un switch -
Mon code n'est pas un copié, il manque un echo au début du input, et je le sais. Mais je crois en fait savoir ce qu'il me manque, du moins, l'emplacement :
if (isset($_SESSION['options'])) { ICI {echo '<input type="checkbox" name="options[]" value="option1" checked = "checked"/> texte <br/>'; } }
else { echo '<input type="checkbox" name="options[]" value="option1"/> option1 <br/>'
Il me manquerait un if avec une certaine condition qui puisse lire le tableau, et voir la valeur "option1" pour dire "ok, c'est check"... si quelqu'un a une idée de la syntaxe... -
Bon, j'ai encore un problème en fin de compte...
J'ai essayé toute la matinée de faire la même chose avec des checkbox, c-a-d de les cocher en cas de retour a la première page si elles avaient été selectionnées par l'utilisateur au préalable.
Le problème, c'est que le fait qu'elle soit coché ou non est contenu dans un tableau qui s'appelle options[], j'ai 5 checkbox, je pourrais passer chacune avec variable pour faire plus simple, mais je trouve la solution idiote. j'ai essayé avec un code comme ceci :
if (isset($_SESSION['options'])) {if ($option[$i] == 'option1') { '<input type="checkbox" name="options[]" value="option1" checked = "checked"/> texte <br/>'; } }
else { echo '<input type="checkbox" name="options[]" value="option1"/> option1 <br/>'
Mais ça ne me retourne rien du tout... -
Bonjour, effectivement, ton code marche bien, merci beaucoup, par contre, le dernier echo </select> m'a fait buggué, donc je l'ai enlevé, je ferme mon select après ma balise php. c'était pas le cas sur le code que j'ai montré, c'était le code d'origine avant que je le retouche, pas l'actuel, m'enfin voila.
Merci beaucoup en tout cas ! -
Contributeuroui, j'aurais fait ça légèrement différemment histoire de factoriser un peu...
$fichier = fopen('valeurs.txt', 'r+'); $contenu = fgets($fichier); fclose($fichier); $valeurs = explode('/', $contenu); echo '<select name="mon_var">'; foreach($valeurs as $cle => $valeur) { if ($_SESSION['mon_var'] === $valeur) { $selected = ' selected="selected"'; } else { $selected = ''; } echo '<option value="'.$valeur.'"'.$selected.'>'.$valeur.'</option>'; } echo '</select>';
mais ça revient strictement au même que ce que t'as dit Pitet -
Salut,
Voici un exemple pour sélectionner la bonne ligne avec ta variable de session :
<?php
$fichier = fopen('valeurs.txt', 'r+');
$contenu = fgets($fichier);
fclose($fichier);
$valeurs = explode('/', $contenu);
echo '<select name="mon_var">';
foreach($valeurs as $cle => $valeur)
{
if ($_SESSION['mon_var'] == $valeur) {
echo '<option value="'.$valeur.'" selected="selected">'.$valeur.'</option>';
} else {
echo '<option value="'.$valeur.'">'.$valeur.'</option>';
}
}
echo '</select>';
?> -
J'ai un problème encore lié a ça. Je me doute que je dois commencer a être lourd, mais voila, j'ai des listes déroulantes qui s'appuient sur des fichiers texte pour leurs options. La question c'est comment reprendre la variable de session la dedans : <?php
$fichier = fopen('valeurs.txt', 'r+');
$contenu = fgets($fichier);
fclose($fichier);
$valeurs = explode('/', $contenu);
echo '<select name="mon_var">';
foreach($valeurs as $cle => $valeur)
{
echo '<option value="'.$valeur.'">'.$valeur.'</option>';
}
echo '</select>';
?> -
Ah, ça marche aussi dans ce cas la, d'accord, je pensais que c'était juste pour afficher une apostrophe quand on en avait besoin, ou des guillemets !
Ok, bon bah, merci beaucoup thEBiShOp, je crois que ce coup-ci, ce sera enfin bon ! J'espère en tout cas ! -
Contributeurle caractère d'échappement qui marche dans de nombreux langages :
echo "Dans cette ligne je peux mettre des 'apostrophes' mais aussi des \"guillements\" grâce au caractère d'éhcappement !"; echo 'Même chose \'ici\' !!!';
-
C'est bien plus rapide avec cette méthode oui... Je vais faire ça comme ça, ce sera plus rapide, par contre, j'ai une dernière question, sur certain champ, j'avais des value par défaut ("Non connu" par exemple) bon, pour les garder, pas de soucis, me suffirait d'un if. Mais, j'avais mis un code onfocus pour que dès qu'on clique, le texte par défaut s'efface, pratique pour pas s'embêter.
Sauf que avec le php, les guillemets font conflit... Quand je balance mon input, je le mets entre ' ' puis je peux faire mon type = "text" pas de problème, mais sur le onfocus, j'ai besoin des apostrophes et des guillemets, y a moyen de feinter la chose ? -
Ah bah oui, effectivement, quand on met un vrai lien, et pas un précédent camouflé en mousse, ça marche comme prévu.
-
Contributeurtu peux passer par une variable get pour être certain d'être en retour
<a href="page1.php?a=retour">retour</a>
et vérifier la présence de cette variable.
Sinon je pense que tu pourrais faire un truc de ce genre en début de page :
if (isset($_SESSION['retour']) && $_SESSION['retour'] === 'oui') { $champ1 = $_SESSION['champ1']; $champ2 = $_SESSION['champ2']; etc... } else { $champ1 = ''; $champ2 = ''; etc... } $_SESSION['retour'] = 'non';
et dans tes inputs :
echo '<input type="text" name="champ1" value="'. $champ1 .'"' />';
-
J'ai un lien définit sur un bouton, mais finalement, c'est un précedent camouflé ça donne on.click = "history.go(-1)" quelque chose comme ça.
- 1
- 2
Suivant