Le cookie n'est pas créé
Résolu/Fermé
jacky0546
Messages postés
5
Date d'inscription
dimanche 24 juin 2018
Statut
Membre
Dernière intervention
26 juin 2018
-
Modifié le 25 juin 2018 à 06:38
Utilisateur anonyme - 26 juin 2018 à 14:31
Utilisateur anonyme - 26 juin 2018 à 14:31
A voir également:
- Le cookie n'est pas créé
- Cree un compte google - Guide
- Cree un compte gmail - Guide
- Supprimer cookie - Guide
- Comment cree un groupe sur whatsapp - Guide
- Cookie manager - Télécharger - Confidentialité
3 réponses
Utilisateur anonyme
25 juin 2018 à 00:01
25 juin 2018 à 00:01
Bonjour
Dans le protocole HTTP, il y a l'envoi des en-têtes PUIS celui des données.
set_cookie(), session_start() et header() utilisent les en-têtes http.
Si tu envoies quoi que ce soit avant (echo, tout code html y compris le commentaire
Pour utiliser la coloration syntaxique ("style notepad++"), sélectionne le texte à colorier puis utilise la petite flèche à droite du bouton <> en haut de la fenêtre qui sert à rédiger la réponse. Cette flèche permet de choisir le langage de programmation utilisé.
Dans le protocole HTTP, il y a l'envoi des en-têtes PUIS celui des données.
set_cookie(), session_start() et header() utilisent les en-têtes http.
Si tu envoies quoi que ce soit avant (echo, tout code html y compris le commentaire
<!-- Date de création: 23/06/2018 -->) la phase en-tête est terminée et les fonctions set_cookie(), session_start() et header() ne marchent plus.
Pour utiliser la coloration syntaxique ("style notepad++"), sélectionne le texte à colorier puis utilise la petite flèche à droite du bouton <> en haut de la fenêtre qui sert à rédiger la réponse. Cette flèche permet de choisir le langage de programmation utilisé.
Utilisateur anonyme
Modifié le 26 juin 2018 à 00:03
Modifié le 26 juin 2018 à 00:03
Tout d'abord, tu devrais vérifier (avec isset) l'existence de
Ceci dit et à part ce message d'erreur, ton script marche chez moi. MAIS peut-être pas comme tu t'y attendrais.
Je ne vois l'acceptation qu'au troisième affichage de la page, c'est à dire après avoir cliqué DEUX fois sur "J'accepte".
En effet, la première fois qu'on clique sur le bouton, le cookie est bien créé mais ton test
Bien sûr, si on rouvre ensuite la page (sans attendre six mois) on a bien le message d'acceptation.
J'ai fait l'essai avec Chrome et FF, le comportement est le même.
Si ça persiste à ne pas marcher, c'est peut-être que tu as un caractère invisible AVANT
$_COOKIE['editionskywiconf']car ton code génère une erreur
Notice: Undefined index: editionskywiconf in ...Si tu ne vois pas ce message, c'est que ta configuration n'affiche pas les erreurs. C'est très bien en production, mais c'est dommage en mise au point.
Ceci dit et à part ce message d'erreur, ton script marche chez moi. MAIS peut-être pas comme tu t'y attendrais.
Je ne vois l'acceptation qu'au troisième affichage de la page, c'est à dire après avoir cliqué DEUX fois sur "J'accepte".
En effet, la première fois qu'on clique sur le bouton, le cookie est bien créé mais ton test
if ($_COOKIE['editionskywiconf']...ne le montre pas car la variables $_COOKIE ne contient que les cookies qui existaient lors de l'ouverture de la page, pas ceux qui ont été créés depuis. Il faut donc cliquer une fois de plus pour en voir l'effet avec ce test-ci.
Bien sûr, si on rouvre ensuite la page (sans attendre six mois) on a bien le message d'acceptation.
J'ai fait l'essai avec Chrome et FF, le comportement est le même.
Si ça persiste à ne pas marcher, c'est peut-être que tu as un caractère invisible AVANT
<?php. As-tu bien enregistré ton fichier SANS BOM ?
jacky0546
Messages postés
5
Date d'inscription
dimanche 24 juin 2018
Statut
Membre
Dernière intervention
26 juin 2018
26 juin 2018 à 10:10
26 juin 2018 à 10:10
Bonjour Le Père,
J'ai d'abord répondu à Reivax962 - tu verras. En ce qui concerne tes propositions, je sens que l'on approche. Je vais vite vérifier cela. Je te tiens au courant.
Merci encore.
Bien cordialement,
Jacky.
J'ai d'abord répondu à Reivax962 - tu verras. En ce qui concerne tes propositions, je sens que l'on approche. Je vais vite vérifier cela. Je te tiens au courant.
Merci encore.
Bien cordialement,
Jacky.
jacky0546
Messages postés
5
Date d'inscription
dimanche 24 juin 2018
Statut
Membre
Dernière intervention
26 juin 2018
26 juin 2018 à 11:20
26 juin 2018 à 11:20
Grand merci Le Père !
- Le bog se tenait effectivement dans l'enregistrement du fichier qui était avec BOM. Comme je ne sais pas ce que cela signifie, je n'y ai pas prêté attention.
- Le "isset" sur le test du cookie ne fonctionne pas. J'ai le message d'erreur suivant :
Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in /homepages/2/d385103479/htdocs/jackylebrun/editions-kywi/acceptation.php on line 20
du coup, je n'y touche pas.
- Quant au fait de devoir retaper deux fois "j'accepte", j'ai trouvé une solution :
Dans le "<head>", je teste l'existence de $_POST['conf'], si vrai, c'est que je viens de créer le cookie, alors je met un "<meta>" qui recharge la page.
Voici le scripte qui marche :
- Le bog se tenait effectivement dans l'enregistrement du fichier qui était avec BOM. Comme je ne sais pas ce que cela signifie, je n'y ai pas prêté attention.
- Le "isset" sur le test du cookie ne fonctionne pas. J'ai le message d'erreur suivant :
Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in /homepages/2/d385103479/htdocs/jackylebrun/editions-kywi/acceptation.php on line 20
du coup, je n'y touche pas.
- Quant au fait de devoir retaper deux fois "j'accepte", j'ai trouvé une solution :
Dans le "<head>", je teste l'existence de $_POST['conf'], si vrai, c'est que je viens de créer le cookie, alors je met un "<meta>" qui recharge la page.
Voici le scripte qui marche :
<?php If (isset($_POST['conf'])) { $temps = 183*24*3600; setcookie ("editionskywiconf","oui", time() + $temps); }; session_start(); header( 'content-type: text/html; charset=utf-8' ); ?> <!DOCTYPE html> <head> <?php If (isset($_POST['conf'])) { echo '<meta HTTP-EQUIV="Refresh" content="0;URL=./acceptation.php">'; }; ?> <title>acceptation</title> <link rel="stylesheet" type="text/css" href="./jackylebrun.css"> </head> <BODY id="fondpage"> <!--Aceptation de la politique de confidentialité --> <?php if (($_COOKIE['editionskywiconf'] != "oui")) // le client n'a pas encore accepté la politique de confidentialité { echo 'editionskywiconf = '.$_COOKIE['editionskywiconf']; // ????? echo '<form METHOD="POST" action="./acceptation.php"> <font class="grande">Vous devez accepter notre politique de confidentialité sur vos données personnelles.<br> Lisez ce qui suit puis cliquez sur le bouton "j\'accepte" (cette acceptation restera valide pendant 6 mois)<br><br> bla bla bla<br><br> <input type="hidden" name="conf" value="oui"> <input type="submit" name="accepte" value=" J\'ACCEPTE " onclick="soumettre"> </form> </font>'; } else { echo 'editionskywiconf = '.$_COOKIE['editionskywiconf']; // ????? echo '<font class="grande">Corps de la page après acceptation</font>'; }; ?> </body> </html>
Utilisateur anonyme
>
jacky0546
Messages postés
5
Date d'inscription
dimanche 24 juin 2018
Statut
Membre
Dernière intervention
26 juin 2018
26 juin 2018 à 14:31
26 juin 2018 à 14:31
Tant mieux si ça marche :-)
Le BOM (Byte Order Mark) est un caractère invisible souvent ajouté par les éditeurs de texte au début des fichiers UTF8. C'est une plaie pour les programmeurs PHP, heureusement facile à éviter (quand on le sait). Pour savoir à quoi il sert (car il a quand même une utilité) :
https://fr.wikipedia.org/wiki/Indicateur_d%27ordre_des_octets
Quant à la fonction isset, avec le message d'erreur que tu donnes, c'est que visiblement tu t'en es mal servi. Elle teste si une variable existe, il faut donc lui donner une variable à tester. Et toi tu lui avais donné une expression.
Le BOM (Byte Order Mark) est un caractère invisible souvent ajouté par les éditeurs de texte au début des fichiers UTF8. C'est une plaie pour les programmeurs PHP, heureusement facile à éviter (quand on le sait). Pour savoir à quoi il sert (car il a quand même une utilité) :
https://fr.wikipedia.org/wiki/Indicateur_d%27ordre_des_octets
Quant à la fonction isset, avec le message d'erreur que tu donnes, c'est que visiblement tu t'en es mal servi. Elle teste si une variable existe, il faut donc lui donner une variable à tester. Et toi tu lui avais donné une expression.
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
Modifié le 26 juin 2018 à 08:23
Modifié le 26 juin 2018 à 08:23
Bonjour,
Complètement d'accord avec le père.
Du coup une solution simple à ton problème serait de modifier ton if en rajoutant le test sur POST['conf'] :
Xavier
Complètement d'accord avec le père.
Du coup une solution simple à ton problème serait de modifier ton if en rajoutant le test sur POST['conf'] :
if ($_COOKIE['editionskywiconf'] != "oui" && (!isset($_POST['conf']) || $_POST['conf'] != 'oui'))
Xavier
jacky0546
Messages postés
5
Date d'inscription
dimanche 24 juin 2018
Statut
Membre
Dernière intervention
26 juin 2018
26 juin 2018 à 10:05
26 juin 2018 à 10:05
Bonjour Reivax962,
J'avais déjà essayé cette solution qui effectivement fonctionne mais seulement la première fois. Si je quitte le site puis reviens dessus, je retrouve la demande car
Merci d'avoir tenté de m'aider, mais je pense que LePère doit toucher du doigt la solution, je vais vite voir de ce côté là.
Bien cordialement,
Jacky.
J'avais déjà essayé cette solution qui effectivement fonctionne mais seulement la première fois. Si je quitte le site puis reviens dessus, je retrouve la demande car
$_POST['conf']n'existe plus, de la même manière que lorsque je quitte la page puis reviens dessus.
Merci d'avoir tenté de m'aider, mais je pense que LePère doit toucher du doigt la solution, je vais vite voir de ce côté là.
Bien cordialement,
Jacky.
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
26 juin 2018 à 10:23
26 juin 2018 à 10:23
Bonjour,
C'est bien parce que $_POST['conf'] n'existe plus que j'ai mis le membre
Xavier
C'est bien parce que $_POST['conf'] n'existe plus que j'ai mis le membre
!isset($_POST['conf'])dans le test :-)
Xavier
25 juin 2018 à 17:21
D'abord merci pour ta réponse.J'ai supprimé tous les commentaires (on ne sais jamais) comme tu peux le voir dans mon nouveau texte ci-dessous, mais ça ne marche toujours pas. Le test à la ligne 20 renvoi systématiquement à la proposition ligne 21 et je ne vois pas le cookie dans ma liste (j'utilise FireFox : Options/Vie privée et sécurité/Cookies et données de site/Gérer les données...) Je suis vraiment désolé d'être complètement sec devant ce problème, surtout que le bog doit être gros comme une maison.
Bien cordialement,
Jacky.