Problème de cache ?

Fermé
DocN - 4 févr. 2013 à 11:37
 DocN - 12 févr. 2013 à 14:26
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.
A voir également:

29 réponses

ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
4 févr. 2013 à 11:45
Bonjour,

Dans ton formulaire, est-ce que tu essayes de les remplir à nouveau grâce à tes variables sessions ?
Si tu ne le fais pas, essaye de fouiller dans cette direction. Si tu fais précédent et que tu tombes sur un formulaire vide, c'est "normal" vu qu'aucune donnée n'est transmise dans cette direction.
Certains navigateur remplissent à nouveau les formulaires lorsqu'on fait un retour, mais c'est une "courtoisie" de ces navigateurs, si on veut que ces champs soient à nouveau remplis, il faut le faire explicitement
0
Tralala8 Messages postés 120 Date d'inscription mercredi 17 août 2011 Statut Membre Dernière intervention 12 février 2013 14
4 févr. 2013 à 11:53
Bonjour,

Simple question : as-tu mis un "session_start();" au début de ta première page ? Sans ça, les variables de sessions ne sont pas accessible.
0
J'ai mis session_start()

Non, je ne les remplis pas via mes variables sessions, c'est pas idiot, effectivement, je vais essayer ça. Donc rien a voir avec le cache alloué par le serveur ?

Pour la syntaxe, pour affecter mes champs a ma variable session, faut simplement que je les affecte directement après la saisie, dans la même page ?
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
4 févr. 2013 à 13:03
pour affecter un champ, tu peux par exemple créer une variable session "retour" qui t'indiquera que tu reviens de ta page 2 et que tu peux avoir des données à afficher dans le formulaire.

ça pourrait donner quelque chose du genre :

<?php
echo '<input type="text" name="champBidule" value="';
if (isset($_SESSION['retour']) && $_SESSION['retour'] === "retour") {
  echo $_SESSION['champBidule'];
}

echo '" />';


ou tu peux faire ton affectation en début de code plutot que de vérifier à chaque input... enfin le principe en gros c'est ça
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J'ai essayé ton bout de code mais sans variable retour, un truc du style if (isset($_SESSION['Nom']) { echo $_SESSION['Nom']; }

En gardant la même syntaxe autour, ça ne marche pas, ça ne m'affiche que : />
en me supprimant la zone de saisi.
Ça ne marche que avec cette histoire de variable retour, ça me parait bizarre, le code en lui même ne change pas...
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
4 févr. 2013 à 14:07
tu dois avoir un bout de ton code erroné, ça doit pas être grand chose
0
Comme d'habitude, tu as raison, une erreur d'echo mal placé. ça marche en tout cas, je vais reprendre mes input, la solution me parait un peu longue, mais au moins elle est sûre.

Merci beaucoup, encore une fois ! En espérant que c'est la dernière fois !
0
Je me suis peut-être emballé trop vite, j'ai vérifié pour quelques champs la possibilité de les retrouver je me suis dit " Cool" mais, j'ai beau fermer mon navigateur, appuyer sur mon bouton reset, les variables restent au niveau de la saisie, on peut les effacer, mais bon, j'aimerais que ça parte quand on ferme le navigateur, au moins ça...
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
4 févr. 2013 à 14:29
Comment tu reviens à ta première page ? Avec la flèche de retour du navigateur ou est-ce que tu as prévu un lien pour revenir en arrière ?
0
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.
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
4 févr. 2013 à 14:39
tu 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 .'"' />';
0
Ah bah oui, effectivement, quand on met un vrai lien, et pas un précédent camouflé en mousse, ça marche comme prévu.
0
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 ?
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
Modifié par ThEBiShOp le 4/02/2013 à 14:54
le 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\' !!!';
0
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 !
0
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>';
?>
0
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>';
?>
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
4 févr. 2013 à 16:08
oui, 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
0
En effet, ta solution est plus élégante.
On peut également utiliser l'opérateur ternaire comme ceci :

echo '<option value="' . $valeur . '"' . ($_SESSION['mon_var'] == $valeur ? ' selected="selected"' : '') . '>'.$valeur.'</option>';

Plus compacte mais peut être moins lisible.
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
4 févr. 2013 à 16:37
oui, l'intérêt c'est juste que le jour où on veut modifier l'input, on ne doivent pas le faire à plusieurs endroits, histoire d'éviter les erreurs possibles...
0
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 !
0
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...
0