Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/02/2006, 17h15   #1
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Par défaut [Cookies] condition if + setcookie = cannot send header information

Bonjour,

Avant tout oui oui je sais que setcookie doit être placé en haut tout en haut avant toute autre chose.

Mais je l'ai pas fait. Pourquoi ? Qu'en sais-je, le goût de l'exotisme peut-être, la soif d'aventure... allez savoir !

Enfin, toujours est-il que j'ai sur un formulaire un input tout nouveau tout beau, qui dit "se souvenir de mes informations". Ce qui nécessite de créer un cookie si le input est coché. Et donc pas du tout si le input n'est pas coché.

Donc j'ai écrit, assez finement du reste, la chose suivante, en haut de la page qui réceptionne les données du formulaire :

Code :
1
2
3
4
5
6
7
8
9
10
<?php
if(isset($sauvegarder))
{
 
setcookie('sauvegarder[pseudo]', '$pseudo', (time() + 3000000));
setcookie('sauvegarder[email]', '$email', (time() + 30000000));
setcookie('sauvegarder[titreSite]', '$titreSite', (time() + 3000000));
setcookie('sauvegarder[urlSite]', '$urlSite', (time() + 3000000));
}
?>
Et j'obtiens donc le très fameux cannot send header etc... Normal me direz-vous, il y a un if avant. Mais je ne vais pas initialiser un cookie si le checkbox sauvegarder n'est pas coché. Donc... ?


L'idée, pourtant fulmineuse, était ensuite d'afficher naturellement la valeur du cookie dans le value des inputs des formulaires, comme suit :
Code :
<input name="pseudo"  type="text" size="30" maxlength="30" value="<?php $_COOKIE['sauvegarder']['pseudo'];  ?>" >
Mais ça ne fonctionne pas.

Comme la page formulaire.php est elle même inclue dans la page index.php, j'ai aussi essayé de placer le setcookie dans la page index.php, tout en haut.

Marche pas.

Pourtant c'est simple les cookies normalement, peut-être est-ce parce que je n'ai pas mangé de la journée? Où est l'erreur dans mon boulot ?
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2006, 17h23   #2
Membre émérite
 
Avatar de macbook
 
Inscription : février 2006
Messages : 840
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 840
Points : 924
Points : 924
PHP étant asynchrone un cookie est crée puis ne peut être exploité que dans une autre page ou bien après rafraichissement.
macbook est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2006, 17h25   #3
Membre confirmé
 
Inscription : janvier 2004
Messages : 242
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 242
Points : 245
Points : 245
Il ne faut absolument aucun carractere avant l'envoi des cookies, donc il faut que ta balise <? soit tout en haut de la page, sans aucun espace ou quoi que se soit avant.

Ps : ce n'est pas beau le register global on
chaced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2006, 17h25   #4
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
asynchrone ?

Déjà je viens d'essayer de vérifier, le setcookie doit être placé en haut de la page d'index et non en haut de la page formulaire qui est inclue dans la précédente.

je viens d'enlever le if, pour voir, de toute façon le cookie ne semble même pas être créé, le champ de formulaire n'affiche rien.

**edit**
que vient faire faire register global on là dedans, chaced?
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2006, 17h28   #5
Membre confirmé
 
Inscription : janvier 2004
Messages : 242
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 242
Points : 245
Points : 245
il ne manque pas des arguments a ton cookie ? genre un ,,,,.'/', false, 0);

bon je dits ça il y a un moment que je n'ai pas utilisé de cookie
chaced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2006, 17h31   #6
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Je viens d'essayer de remplacer $pseudo par $_POST[pseudo] dans le set cookie, mais c'est pareil. Rien ne s'affiche ensuite dans le value du formulaire, sans pour autant qu'il y ait un message d'erreur.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2006, 17h34   #7
Membre confirmé
 
Inscription : janvier 2004
Messages : 242
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 242
Points : 245
Points : 245
Citation:
Envoyé par psychoBob
Je viens d'essayer de remplacer $pseudo par $_POST[pseudo] dans le set cookie, mais c'est pareil. Rien ne s'affiche ensuite dans le value du formulaire, sans pour autant qu'il y ait un message d'erreur.
tu autorises la zone localhost dans ton navigateur ? peut etre que c'est son filtre qui n'accepte pas le biscuit.
chaced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2006, 17h39   #8
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
si en fait, je n'avais pas écrit le echo dans le value.........

Mais curieusement, la valeur du cookie s'est affichée lors d'un retour de page (et pas les autres informations, donc c'est bien le cookie), mais pas ensuite lorsque l'on change de page et que retourne sur la page de formulaire. Là plus rien.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2006, 17h47   #9
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Bon alors,

Si je crée le cookie comme cela :

Code :
setcookie('sauvegarder[pseudo]', $_POST['pseudo'], (time() + 3000000));
Rien ne s'affiche du tout.

Si je fais cela :

Code :
setcookie('sauvegarder[pseudo]', '$pseudo', (time() + 3000000));
le champ value m'affiche $pseudo.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2006, 17h48   #10
Membre confirmé
 
Inscription : janvier 2004
Messages : 242
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 242
Points : 245
Points : 245
Citation:
Envoyé par psychoBob
Bon alors,

Si je crée le cookie comme cela :

Code :
setcookie('sauvegarder[pseudo]', $_POST['pseudo'], (time() + 3000000));
Rien ne s'affiche du tout.

Si je fais cela :

Code :
setcookie('sauvegarder[pseudo]', '$pseudo', (time() + 3000000));
le champ value m'affiche $pseudo.
donc ecrit ça

Code :
setcookie('sauvegarder[pseudo]', "$pseudo", (time() + 3000000));
PS : les ' n'interprete pas le contenu.
chaced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2006, 17h51   #11
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
oui mais alors maintenant voilà le problème semble t'il :

Normalement le cookie ne se crée qu'à partir du moment ou le bouton "sauvegarder mes informations " est cochée :

Comment faire sans condition if pour tester si le checkbox est cochée ?


**edit**
c'est noté pour les ' (sans doute pour cela que ça optimise le traitement des scripts).
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2006, 17h55   #12
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Voilà ce qui se passe :

Je rempli le formulaire.
Je clique prévisualiser.
Pour tester je retourne à la page précédente avec le bouton précédent du navigateur.
Toutes les informations sont dans les champs.
J'actualise la page, seul le champ où l'information provient du cookie est remplie: preuve que le cookie est bien initialisée.
Je réactualise la page pour tester si le cookie est toujours là : plus rien ne s'affiche.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2006, 18h26   #13
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Bon ça fonctionne, je me suis inspiré d'un style switch que j'avais commis il y a quelques temps.

Au passage, voyez que l'on peut écrire des choses avant le setcookie, puisque mon code est le suivant.

Code :
1
2
3
4
5
6
7
8
9
10
11
if(isset($_POST['previsualiser']))
// On vérifie que le formulaire a été soumis
{
	if(isset($_POST['sauvegarder']))
	{
		// On fait un cookie d'une année de durée pour garder en mémoire le style choisi et le récupérer à la prochaine visite
 
		setcookie('pseudo', $_POST['pseudo'], time()+(365*24*3600)) ;
		// Si le fichier *.css existe on définit une variable $css correspondant au style
	}
}
Oui oui, je sais, vous allez trouver des excuses
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2006, 21h01   #14
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Sans remettre ça les gars, comment ce fait-il donc que l'on puisse placer une condition if pour initialiser un cookie alors que rien ne doit normalement précéder setcookie ?
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h32.


 
 
 
 
Partenaires

Hébergement Web