Rechercher : dans
Par :

[PHP] Gestion de cookies

Dernière réponse le 22 mai 2009 à 20:20:31 Valarauco, le 20 mai 2009 à 21:44:16 
 Signaler ce message aux modérateurs

Bonjour,

Je développe un site en php qui a une fonction bilingue.
J'utilise donc les cookies.
En haut de mes pages, je crée le cookie avec setcookie().
Au niveau local (localhost), ça fonction.
Mais lorsque je le test sur internet une erreur me dit :

Warning: Cannot modify header information - headers already sent by (output started at /home/vala/accueil.php:1) in /home/vala/accueil.php on line 2

Quand je regarde dans la liste des cookies, il n'a pas été créé.
Je vous remercie de m'éclaircir sur cette erreur.

Bonne soirée

Configuration: Windows XP
Firefox 3.0.10

Meilleures réponses pour « [PHP] Gestion de cookies » dans :
PHP - Les cookies et les en-têtes HTTP Voir Les en-têtes HTTP Lors de chaque échange par le protocole HTTP entre votre navigateur et le serveur, des données dîtes d'en-têtes contenant des informations sur les données à envoyer (dans le cas d'une requête) ou envoyées (dans le cas d'une...
[PHP] Headers already sent by..... VoirLorsque vous utilisez une fonction PHP qui manipule les en-têtes HTTP comme par exemple: header() setcookie() session_start() Il est important d'utiliser ces fonctions avant d'avoir généré le moindre flux vers le client. A partir du moment où...
Télécharger GLPI VoirGLPI est une application libre, distribuée sous licence GPL destinée à la gestion de parc informatique et de helpdesk. GLPI est composé d'un ensemble de services web écrits en PHP qui permettent de recenser et de gérer l'intégralité des composantes...
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...

1

sonik21, le 20 mai 2009 à 23:26:42

Tu pourrais envoyer le code d'une de tes pages pour voir un peu stp ? JuZa.e3b.org || No man's land, People are strange, & Jesus was a punk ## The Blood's Flowers
#Engraved February#             Sleepwalking Past Hope

Répondre à sonik21

2

IpIpIpIpOne, le 20 mai 2009 à 23:48:43

Salut !

Cette erreur veut dire que tu affiches quelque chose (que tu envoies les header) avant d'apeller la fonction setCookie(). Pour résoudre ton problème, il te suffit donc de mettre ton setcookie avant toute sortie vers le navigateur.

Si tu veux, tu peux aussi mettre un ob_start() en tout début de ton code et un ob_end_flush() tout à la fin.

Cordialement,

IpIpIp Ipone Terriens Rêveurs Unis pour Sauver une Planète

Répondre à IpIpIpIpOne

3

Valarauco, le 21 mai 2009 à 11:16:49

Merci pour les réponses, mais avant d'envoyer les cookies, je fais des tests pour savoir si il existe déjà ou si l'utilisateur à envoyé par la méthode post un changement de lang.

Voilà le code :

<?php

$expire = 365*24*3600;
if (!isset($_COOKIE['lang']) && !isset($_POST['lang']) ) {
$lang="fr";
setcookie("lang",$lang,time()+$expire);
}
if (!isset($_COOKIE['lang']) && isset($_POST['lang'])) {
$lang = $_POST['lang'];
setcookie("lang",$lang,time()+$expire);
}
if(isset($_COOKIE['lang']) && !isset($_POST['lang'])) {
$lang = $_COOKIE['lang'];
}
if (isset($_COOKIE['lang']) && isset($_POST['lang']) ) {
$lang=$_POST['lang'];
setcookie("lang",$lang,time()+$expire);
}



if ($lang=="en") {
include ($page_en);
include ('lang/interface_en.txt');
}
if ($lang=="fr") {
include ($page_fr);
include ('lang/interface_fr.txt');
}
?>


J'ai mis ce code dans une page appelé cookie.php, et dans mes pages principale, je fais cet appel en premier.

Répondre à Valarauco

4

IpIpIpIpOne, le 21 mai 2009 à 18:14:27

Tu peux faire tout ce que tu veux comme test avant, ça ne pose pas de problèmes.

Mais tu ne peux rien afficher avant, ni caractère, ni espace, ni saut de ligne ... Vu l'erreurrenvoyée, il doit sans aucun doute rester quelque chose chose avant ton setCookie. Enfin, je suppose ... sinon, je ne vois pas du tout d'où peut venir ton problème. Bonne recherche ! ;-)

cordialement,

IpIpIp Ipone Terriens Rêveurs Unis pour Sauver une Planète

Répondre à IpIpIpIpOne

5

Valarauco, le 22 mai 2009 à 09:05:09

Bonjour,
Merci pour la réponse. En fait, avant l'appel de la page j'ai stocké le chemin de fichiers .txt dans page_en et page_fr. Le début de mes pages font alors :

<?php
$page_en = 'lang/interface_en.txt';
$page_fr = 'lang/interface_fr.txt';
include ('connexion.php');
// suite du code

Je pensais que ça aurait pu m'éviter de copier à chaque fois l'algo dans toutes les pages. Mais si c'est cela qui crée l'erreur, soit je devrais créer une function fverif() qui retourne le langage choisit, soit recopier l'algo en début de chaque page.

Merci pour tes réponses IpIpIp Ipone

Répondre à Valarauco

6

le père, le 22 mai 2009 à 09:49:11
  • +1

Bonjour

Non, ça n'est pas $page_en = 'lang/interface_en.txt';... qui crée cette erreur.
Comme l'a dit IpIpIpIpOne, c'est que tu envoies quelque chose au client avant le setCookie.
Souvent il s'agit d'un caractère invisible qui est en tout début de fichier avant le <?php. Si écris tes scripts en UTF8, enregistre-les en UTF8 SANS BOM ou, si tu n'as pas vraiment besoin de l'UTF8, en ANSI.

Répondre à le père

7

Valarauco, le 22 mai 2009 à 13:47:15

C'est vrai que cela peut être à cause d'un caractère invisible, quand je voulais tester mes sources sans la partie des cookies, le validateur html me disait qu'il y avait un problème avant le doctype.
Sinon j'enregistre bien en UTF-8.
Merci le père

Répondre à Valarauco

8

le père, le 22 mai 2009 à 13:52:15

Tu travailles avec Notepad++ ? Enregistre bien SANS BOM.

Répondre à le père

9

Valarauco, le 22 mai 2009 à 14:45:49

Je travaille avec Notepad++ mais je ne vois pas ce que c'est SANS BOOM, je configure bien le UTF-8 dans format.
Je vérifirais ce soir chez moi, je n'ai pas mes sources sur moi.

Répondre à Valarauco

10

le père, le 22 mai 2009 à 15:04:49

Pas sans BOOM, sans BOM (Byte Order Mark)
regarde dans les menus de NotePad++, ça y est

Répondre à le père

11

arthezius, le 22 mai 2009 à 15:42:44

Parfois cette erreur viens aussi d'un simple espace en trop qu'il pourrai y avoir en tout début de fichier. « La recherche commence là où s'arrête la connaissance. »

Répondre à arthezius

12

Valarauco, le 22 mai 2009 à 19:57:36

Alors j'ai mis le UTF-8 without BOM et ça marche.
Je vous remercie de votre aide

Répondre à Valarauco

13

 arthezius, le 22 mai 2009 à 20:20:31

Oublie pas de modifier le statu en haut de cette page en "résolu" « La recherche commence là où s'arrête la connaissance. »

Répondre à arthezius
Collection CommentÇaMarche.net