Problème de cache ?
                                    
                        DocN                    
                                    -
                                     
DocN -
        DocN -
        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.
        A voir également:         
- Problème de cache ?
- Copie caché - Guide
- Numéro caché - Guide
- Jeux google caché - Guide
- Message caché whatsapp - Guide
- C'est quoi le cache d'une application - Guide
29 réponses
                        
                    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
    
                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
                        
                    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.
    
                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.
                        
                    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 ?
    
                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 ?
                        
                    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 :
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
    
                ç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
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...
    
                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...
                        
                    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 !
    
                Merci beaucoup, encore une fois ! En espérant que c'est la dernière fois !
                        
                    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...
                
                
    
                
                        
                    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 ?
                
                
    
                
                        
                    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.
                
                
    
                
                        
                    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 :
et dans tes inputs :
    
                <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 .'"' />';
                        
                    Ah bah oui, effectivement, quand on met un vrai lien, et pas un précédent camouflé en mousse, ça marche comme prévu.
                
                
    
                
                        
                    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 ?
    
                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 ?
                        
                    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\' !!!';
                        
                    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 !
    
                Ok, bon bah, merci beaucoup thEBiShOp, je crois que ce coup-ci, ce sera enfin bon ! J'espère en tout cas !
                        
                    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>';
?>
    
                $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>';
?>
                        
                    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>';
?>
    
                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>';
?>
                        
                    oui, j'aurais fait ça légèrement différemment histoire de factoriser un peu...
mais ça revient strictement au même que ce que t'as dit Pitet
    
                $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
                        
                    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 !
    
                Merci beaucoup en tout cas !
                        
                    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...
    
                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...
