Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Valeurs de session disparues

13 réponses
Avatar
Pascale
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

10 réponses

1 2
Avatar
Pascale
Pascale <chaton.tigre+ écrivait
news::

[...]


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

Avatar
Olivier Miakinen

[...]


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).


Avatar
Jacques-A
"Pascale" <chaton.tigre+ a écrit dans le message de news:

Pascale <chaton.tigre+ écrivait
news::

[...]
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



Avatar
Pascale
Olivier Miakinen <om+ écrivait
news::

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

Avatar
Paul
Olivier Miakinen <om+ écrivait
news::

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...) ?


Avatar
BertrandB
Olivier Miakinen <om+ écrivait
news::

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.


Avatar
Pascale
BertrandB écrivait
news:4780bc02$0$873$:

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

Avatar
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 ?




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>


Si c'est un titre de ligne ou de colonne, utiliser <th> serait
préférable à <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), [...]


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.

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 :

[...]
if ($_SESSION['img1']!='')
[...]

Et là, miracle, je ne perds plus aucune donnée !


C'est donc probablement l'explication : GIGO (Garbage In, Garbage Out).

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 !

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.



Avatar
Pascale
Olivier Miakinen <om+ écrivait
news:47814982$:

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.

Si c'est un titre de ligne ou de colonne, utiliser <th> serait
préférable à <td>.


Exact... le poids de l'habitude...

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).

C'est donc probablement l'explication : GIGO (Garbage In, Garbage
Out).


Oui m'sieur, je l'ref'rai plus, m'sieur (:

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à...

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

Avatar
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.


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 ?

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.

C'est donc probablement l'explication : GIGO (Garbage In, Garbage
Out).


Oui m'sieur, je l'ref'rai plus, m'sieur (:


(;

(rigolo, le clin d'½il vers le bas)

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...


1 2