Discussion:
Valeurs de session disparues
(trop ancien pour répondre)
Pascale
2008-01-04 15:44:53 UTC
Permalink
Bonjour à tous,

Je suis face à un mystère mystérieux...
Il s'agit d'un formulaire dont certaines données sont facultatives,
d'autres obligatoires. On visualise les données entrées, si elles ne
conviennent pas on peut revenir sur le formulaire. Bref, du très classique
comme j'en ai déjà fait.
J'ai l'habitude de travailler avec Opera, j'ai testé sous IE : tout marche.
Et au moment de tester avec Firefox, catastrophe : toutes les données
facultatives sont perdues ! Certaines données sont du texte, d'autres des
textarea, d'autres des boutons radio, d'autres des cases cochées, d'autres
des images... Peu importe.

Par exemple, dans mon formulaire de départ, j'ai des choses du style :
<input type="text" class="boitefac" name="nomjard" size="50" maxlength="50"
value="'.stripslashes($_SESSION['nomjard']).'">

Dans le programme de visualisation :
$nomjard=filtre($_POST['nomjard']);
$_SESSION['nomjard']=$nomjard;

(filtre est une petite fonction qui nettoie les données, et que j'emploie
systématiquement, que les données soient obligatoires ou facultatives,
elle ne m'a jamais causé de soucis :

function filtre($douteux)
{
$douteux=trim($douteux);
$douteux=strip_tags($douteux);
$propre=trim(htmlspecialchars($douteux,ENT_QUOTES,'ISO8859-15'));
return $propre;
}

Lorsque je visualise les données, par exemple :

echo '.stripslashes($_SESSION['nomjard']).';

tout va bien, toutes les données sont là, obligatoires ou facultatives,
quel que soit le navigateur.

Par contre, si je clique sur le bouton modifier et que je reviens au
formulaire de départ, tout est correct avec IE7 et Opera, mais Firefox me
paume les valeurs de session facultatives (seules les données obligatoires
sont conservées !) !
Je comprends d'autant moins qu'un autre site programmé par mes soins de la
même manière fonctionne très bien quel que soit le navigateur...
J'ai probablement fait une erreur grosse comme un brontosaure adulte, mais
je ne la vois pas...
--
Pascale
Pascale
2008-01-04 20:49:16 UTC
Permalink
[...]
Je me réponds à moi-même : il semble que le cache de Firefox soit en cause.
Une fois vidé, les problèmes semblent résolus. Est-ce que cela révèle un
défaut particulier dans ma façon de programmer en PHP ? Y a-t-il moyen de
prévenir ce genre de soucis ?
--
Pascale
Olivier Miakinen
2008-01-04 21:56:53 UTC
Permalink
[...]
Je me réponds à moi-même : il semble que le cache de Firefox soit en cause.
Une fois vidé, les problèmes semblent résolus. Est-ce que cela révèle un
défaut particulier dans ma façon de programmer en PHP ? Y a-t-il moyen de
prévenir ce genre de soucis ?
Vu que je n'ai pas compris la différence que tu fais entre données
« obligatoires » et « facultatives », ni surtout comment tu programmes
l'un ou l'autre, je serais bien incapable de répondre (tout comme j'ai
été incapable de répondre à ta première question).
Pascale
2008-01-05 18:27:04 UTC
Permalink
Post by Olivier Miakinen
Vu que je n'ai pas compris la différence que tu fais entre données
« obligatoires » et « facultatives », ni surtout comment tu programmes
l'un ou l'autre, je serais bien incapable de répondre (tout comme j'ai
été incapable de répondre à ta première question).
Dans le formulaire, certaines informations doivent obligatoirement être
fournies, d'autres ne sont que facultatives. Si une information obligatoire
est absente, un message d'erreur est retourné et l'on revient au
formulaire.

Je viens de re-vérifier : vider le cache ne résoud pas mes problèmes dans
tous les cas.
Le PHP n'étant pas exécuté du côté client mais sur le serveur, j'avoue ne
pas comprendre comment des valeurs de session peuvent être perdues
lorsqu'on utilise un navigateur et ne pas l'être si on utilise un autre
navigateur.
--
Pascale
Paul
2008-01-06 13:17:35 UTC
Permalink
Post by Pascale
Post by Olivier Miakinen
Vu que je n'ai pas compris la différence que tu fais entre données
« obligatoires » et « facultatives », ni surtout comment tu programmes
l'un ou l'autre, je serais bien incapable de répondre (tout comme j'ai
été incapable de répondre à ta première question).
Dans le formulaire, certaines informations doivent obligatoirement être
fournies, d'autres ne sont que facultatives. Si une information obligatoire
est absente, un message d'erreur est retourné et l'on revient au
formulaire.
Je viens de re-vérifier : vider le cache ne résoud pas mes problèmes dans
tous les cas.
Le PHP n'étant pas exécuté du côté client mais sur le serveur, j'avoue ne
pas comprendre comment des valeurs de session peuvent être perdues
lorsqu'on utilise un navigateur et ne pas l'être si on utilise un autre
navigateur.
Est tu sure que les deux navigateurs ont bien les mêmes paramètres de
"sécurité" (acceptation des cookies, etc...) ?
BertrandB
2008-01-06 13:17:35 UTC
Permalink
Post by Pascale
Post by Olivier Miakinen
Vu que je n'ai pas compris la différence que tu fais entre données
« obligatoires » et « facultatives », ni surtout comment tu programmes
l'un ou l'autre, je serais bien incapable de répondre (tout comme j'ai
été incapable de répondre à ta première question).
Dans le formulaire, certaines informations doivent obligatoirement être
fournies, d'autres ne sont que facultatives. Si une information obligatoire
est absente, un message d'erreur est retourné et l'on revient au
formulaire.
Je viens de re-vérifier : vider le cache ne résoud pas mes problèmes dans
tous les cas.
Le PHP n'étant pas exécuté du côté client mais sur le serveur, j'avoue ne
pas comprendre comment des valeurs de session peuvent être perdues
lorsqu'on utilise un navigateur et ne pas l'être si on utilise un autre
navigateur.
Tout dépend de coment est transmis l'information de session, si c'est
par un cookie ou en paramètre. l'utilisateur sur son navigateur peut
imposer de restriction sur les cookies.
Pascale
2008-01-06 19:11:14 UTC
Permalink
Post by BertrandB
Tout dépend de coment est transmis l'information de session, si c'est
par un cookie ou en paramètre. l'utilisateur sur son navigateur peut
imposer de restriction sur les cookies.
J'ai vérifié, tous les cookies sont autorisés dans Firefox jusqu'à leur
date d'expiration.
En fait, mon problème est résolu, mais pas expliqué !

Parmi les informations du formulaire, il y a 4 champs qui correspondent à
des url de photos.
Au moment de l'affichage des données entrées, j'avais :

<tr><td class="col1facdesc">Titre, adresse<br>1ère image (30%)</td>
<td
class="col3desc">'.stripslashes($_SESSION['timg1']).'<br>'.$_SESSION['img1'
].'<br><br><img src="'.$_SESSION['img1'].'" width="30%"
alt="photo1"></td></tr>

Dans le cas où il n'y avait pas d'image (ce champ n'est pas obligatoire),
j'avais remarqué que Tidy signalait qu'il n'aimait pas ce src vide.
Donc histoire d'avancer un peu en attendant de trouver une solution à mon
problème, j'ai modifié mon code comme ceci :

<tr><td class="col1facdesc">Titre, adresse<br>1ère image (30%)</td>
<td class="col3desc">';
if ($_SESSION['img1']!='')
{echo
stripslashes($_SESSION['timg1']).'<br>'.$_SESSION['img1'].'<br><br><img
src="'.$_SESSION['img1'].'" width="30%" alt="photo1">';}
else
{echo '&nbsp;';} echo '</td></tr>

Et là, miracle, je ne perds plus aucune donnée !
Alors certes mon problème est résolu, mais cela n'explique pas pourquoi,
lorsqu'il y a un src="" , Firefox part en vrille et perd des valeurs de
session qui n'ont rien à faire avec ce champ image !
En tous cas, je vous remercie pour votre aide, mais j'aimerais bien savoir
pourquoi Firefox a ce comportement bizarre dans un cas comme celui-ci.
--
Pascale
Olivier Miakinen
2008-01-06 21:42:44 UTC
Permalink
Post by Pascale
Post by Olivier Miakinen
Vu que je n'ai pas compris la différence que tu fais entre données
« obligatoires » et « facultatives », ni surtout comment tu programmes
l'un ou l'autre, je serais bien incapable de répondre (tout comme j'ai
été incapable de répondre à ta première question).
Dans le formulaire, certaines informations doivent obligatoirement être
fournies, d'autres ne sont que facultatives. Si une information obligatoire
est absente, un message d'erreur est retourné et l'on revient au
formulaire.
Je voulais dire : quand des données sont fournies (et elles le sont
puisque tu te plains de les perdre), quelle différence de traitement y
a-t-il selon qu'elles étaient supposées obligatoires ou facultatives ?
Post by Pascale
En fait, mon problème est résolu, mais pas expliqué !
Parmi les informations du formulaire, il y a 4 champs qui correspondent à
des url de photos.
<tr><td class="col1facdesc">Titre, adresse<br>1ère image (30%)</td>
Si c'est un titre de ligne ou de colonne, utiliser <th> serait
préférable à <td>.
Post by Pascale
<td
class="col3desc">'.stripslashes($_SESSION['timg1']).'<br>'.$_SESSION['img1'
].'<br><br><img src="'.$_SESSION['img1'].'" width="30%"
alt="photo1"></td></tr>
Dans le cas où il n'y avait pas d'image (ce champ n'est pas obligatoire), [...]
http://www.la-grange.net/w3c/html4.01/struct/objects.html#h-13.2
src %URI; #REQUIRED -- URI de l'image à incorporer --

Dans l'élément IMG, l'attribut src *est* obligatoire et il doit contenir
un URI. Vu que ton code était incorrect, il ne faut pas s'étonner si des
navigateurs en font n'importe quoi.
Post by Pascale
j'avais remarqué que Tidy signalait qu'il n'aimait pas ce src vide.
Donc histoire d'avancer un peu en attendant de trouver une solution à mon
[...]
if ($_SESSION['img1']!='')
[...]
Et là, miracle, je ne perds plus aucune donnée !
C'est donc probablement l'explication : GIGO (Garbage In, Garbage Out).
Post by Pascale
Alors certes mon problème est résolu, mais cela n'explique pas pourquoi,
lorsqu'il y a un src="" , Firefox part en vrille et perd des valeurs de
session qui n'ont rien à faire avec ce champ image !
Euh... si tu veux te lancer dans la lecture du code de Gecko, n'hésite
pas, mais moi cela me suffit. Note que le bug est peut-être encore
ailleurs, quelque part dans ton propre code (mais il me semble assez
complexe et probablement difficile à lire en entier). Bon courage en
tout cas !
Post by Pascale
En tous cas, je vous remercie pour votre aide, mais j'aimerais bien savoir
pourquoi Firefox a ce comportement bizarre dans un cas comme celui-ci.
En deux mots : si c'est vraiment Firefox qui se plante sur ce cas
imprévu, on ne peut décemment pas lui en vouloir ; si c'est ailleurs
dans ton code, j'espère pour toi que ça n'aura pas d'effet désastreux
plus tard.
Pascale
2008-01-07 22:31:16 UTC
Permalink
Post by Olivier Miakinen
Je voulais dire : quand des données sont fournies (et elles le sont
puisque tu te plains de les perdre), quelle différence de traitement y
a-t-il selon qu'elles étaient supposées obligatoires ou facultatives ?
Je vérifie que les données obligatoires sont présentes, par exemple :

$prenom=filtre($_POST['prenom']);
if ($prenom!='')
{$_SESSION['prenom']=$prenom;}
else
{echo '<p class="erreur">Votre prénom est manquant !</p>';
$err='1';}

tout bêtement.
Post by Olivier Miakinen
Si c'est un titre de ligne ou de colonne, utiliser <th> serait
préférable à <td>.
Exact... le poids de l'habitude...
Post by Olivier Miakinen
http://www.la-grange.net/w3c/html4.01/struct/objects.html#h-13.2
src %URI; #REQUIRED -- URI de l'image à incorporer
Dans l'élément IMG, l'attribut src *est* obligatoire et il doit
contenir un URI. Vu que ton code était incorrect, il ne faut pas
s'étonner si des navigateurs en font n'importe quoi.
Vu... Mais mon erreur n'empêchait même pas la page d'être validée W3C
(dommage, parce que s'il avait couiné, j'aurais peut-être compris plutôt
mon erreur).
Post by Olivier Miakinen
C'est donc probablement l'explication : GIGO (Garbage In, Garbage Out).
Euh... si tu veux te lancer dans la lecture du code de Gecko, n'hésite
pas, mais moi cela me suffit. Note que le bug est peut-être encore
ailleurs, quelque part dans ton propre code (mais il me semble assez
complexe et probablement difficile à lire en entier). Bon courage en
tout cas !
Arf... je crois que je vais en rester là...
Post by Olivier Miakinen
En deux mots : si c'est vraiment Firefox qui se plante sur ce cas
imprévu, on ne peut décemment pas lui en vouloir ; si c'est ailleurs
dans ton code, j'espère pour toi que ça n'aura pas d'effet désastreux
plus tard.
Moi aussi...
--
Pascale
Olivier Miakinen
2008-01-07 23:58:54 UTC
Permalink
Post by Pascale
Post by Olivier Miakinen
Je voulais dire : quand des données sont fournies (et elles le sont
puisque tu te plains de les perdre), quelle différence de traitement y
a-t-il selon qu'elles étaient supposées obligatoires ou facultatives ?
$prenom=filtre($_POST['prenom']);
if ($prenom!='')
{$_SESSION['prenom']=$prenom;}
else
{echo '<p class="erreur">Votre prénom est manquant !</p>';
$err='1';}
tout bêtement.
Or donc, *si* les données obligatoires sont présentes, le fait de les
tester ou pas n'a strictement aucune influence sur le résultat, et par
conséquent on se fiche pas mal de savoir qu'elles étaient obligatoires.

N'est-ce pas ?
Post by Pascale
Vu... Mais mon erreur n'empêchait même pas la page d'être validée W3C
(dommage, parce que s'il avait couiné, j'aurais peut-être compris plutôt
mon erreur).
Ah oui, dommage en effet.
Post by Pascale
Post by Olivier Miakinen
C'est donc probablement l'explication : GIGO (Garbage In, Garbage Out).
(;

(rigolo, le clin d'œil vers le bas)
Post by Pascale
Post by Olivier Miakinen
Euh... si tu veux te lancer dans la lecture du code de Gecko, n'hésite
pas, mais moi cela me suffit. Note que le bug est peut-être encore
ailleurs, quelque part dans ton propre code (mais il me semble assez
complexe et probablement difficile à lire en entier). Bon courage en
tout cas !
Arf... je crois que je vais en rester là...
Sauf erreur, je crois avoir montré que le bug n'était pas dans la
différence de traitement entre données obligatoires et facultatives.
C'est déjà ça...
Pascale
2008-01-08 11:28:51 UTC
Permalink
Post by Olivier Miakinen
Or donc, *si* les données obligatoires sont présentes, le fait de les
tester ou pas n'a strictement aucune influence sur le résultat, et par
conséquent on se fiche pas mal de savoir qu'elles étaient
obligatoires.
N'est-ce pas ?
C'est exactement mon avis. Je trouve bizarre, illogique, voire aberrant,
que seules les données obligatoires se soient trouvées « à l'abri » du
problème !
Post by Olivier Miakinen
(;
(rigolo, le clin d'œil vers le bas)
Un autre gaucher ?(-:
En tous cas, j'espère que c'est bien un clin d'œil et pas une larme de
désolation devant ma nullité.
Post by Olivier Miakinen
Sauf erreur, je crois avoir montré que le bug n'était pas dans la
différence de traitement entre données obligatoires et facultatives.
C'est déjà ça...
Je suis d'accord, entièrement d'accord même avec toi. Mais avec mon homme,
on a testé l'un et l'autre sur 2 ordinateurs différents et seules les
données facultatives survivaient au désastre chaque fois qu'il y avait un
src vide. Je comprends bien que l'interface chaise-clavier est en cause
pour ce qui est de ces fameux src, mais il doit quand même y avoir un
gremlin quelque part...
--
Pascale
BertrandB
2008-01-09 22:06:33 UTC
Permalink
Post by Pascale
Je suis d'accord, entièrement d'accord même avec toi. Mais avec mon homme,
on a testé l'un et l'autre sur 2 ordinateurs différents et seules les
données facultatives survivaient au désastre chaque fois qu'il y avait un
src vide. Je comprends bien que l'interface chaise-clavier est en cause
pour ce qui est de ces fameux src, mais il doit quand même y avoir un
gremlin quelque part...
Si je ne me fais pas remodérer ....
Je vois deux solutions possible, les données facultative sont "chargée"
dans le form avant l'image coupable et donc le navigateur interprète
bien jusqu'à cette erreur.
ou un simple effet de bord les données facultative sont initialisé dans
une requête/page précédente et on les retrouve déjà initialisé sur la
nouvelle page.
Pascale
2008-01-10 12:54:05 UTC
Permalink
Post by BertrandB
Si je ne me fais pas remodérer ....
Je vois deux solutions possible, les données facultative sont "chargée"
dans le form avant l'image coupable et donc le navigateur interprète
bien jusqu'à cette erreur.
Je ne sais pas trop... Il y a des données facultatives et obligatoires tout
au long du formulaire. Les photos, avec leur titre éventuel, sont à la fin.
Post by BertrandB
ou un simple effet de bord les données facultative sont initialisé dans
une requête/page précédente et on les retrouve déjà initialisé sur la
nouvelle page.
Ça ne devrait pas, mais va savoir. Je pourrais donner l'intégralité du
code, mais c'est un peu long...
--
Pascale
Jacques-A
2008-01-04 21:56:53 UTC
Permalink
[...]
Bosoir,
Je me réponds à moi-même : il semble que le cache de Firefox soit en
cause.
Une fois vidé, les problèmes semblent résolus. Est-ce que cela révèle un
défaut particulier dans ma façon de programmer en PHP ? Y a-t-il moyen de
prévenir ce genre de soucis ?
Avec une balise d'entête interdisant le cache de cette page?

Jacques
--
Pascale
Continuer la lecture sur narkive:
Loading...