IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Cookies] condition if + setcookie = cannot send header information


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <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 ?

  2. #2
    Membre éprouvé Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Points : 1 009
    Points
    1 009
    Par défaut
    PHP étant asynchrone un cookie est crée puis ne peut être exploité que dans une autre page ou bien après rafraichissement.

  3. #3
    Membre actif
    Inscrit en
    Janvier 2004
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 242
    Points : 271
    Points
    271
    Par défaut
    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

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    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?

  5. #5
    Membre actif
    Inscrit en
    Janvier 2004
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 242
    Points : 271
    Points
    271
    Par défaut
    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

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    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.

  7. #7
    Membre actif
    Inscrit en
    Janvier 2004
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 242
    Points : 271
    Points
    271
    Par défaut
    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.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    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.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Bon alors,

    Si je crée le cookie comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setcookie('sauvegarder[pseudo]', $_POST['pseudo'], (time() + 3000000));
    Rien ne s'affiche du tout.

    Si je fais cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setcookie('sauvegarder[pseudo]', '$pseudo', (time() + 3000000));
    le champ value m'affiche $pseudo.

  10. #10
    Membre actif
    Inscrit en
    Janvier 2004
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 242
    Points : 271
    Points
    271
    Par défaut
    Citation Envoyé par psychoBob
    Bon alors,

    Si je crée le cookie comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setcookie('sauvegarder[pseudo]', $_POST['pseudo'], (time() + 3000000));
    Rien ne s'affiche du tout.

    Si je fais cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setcookie('sauvegarder[pseudo]', '$pseudo', (time() + 3000000));
    le champ value m'affiche $pseudo.
    donc ecrit ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setcookie('sauvegarder[pseudo]', "$pseudo", (time() + 3000000));
    PS : les ' n'interprete pas le contenu.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    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).

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    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.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    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 ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 24/05/2012, 13h16
  2. [Cookies] Cannot modify header information sur setcookie
    Par Jimmy Monkey dans le forum Langage
    Réponses: 4
    Dernier message: 21/01/2008, 22h44
  3. Réponses: 1
    Dernier message: 17/07/2007, 11h49
  4. Réponses: 5
    Dernier message: 04/09/2006, 15h13
  5. Warning: Cannot modify header information
    Par neXistPa dans le forum Langage
    Réponses: 9
    Dernier message: 16/02/2006, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo