Gros N@z Posté 30 Novembre 2005 Posté 30 Novembre 2005 Bonjour, Voila j'ai suivit correctement le tutorial de php debutant sur un "Site multi-langues". Sans cookies cela marche très bien mais avec j'ai une erreur.... http://phpdebutant.org/article106.php Je ne crois pas avoir fait d erreurs dans le code alors je ne sais pas trop....Voici l erreur que j'obtiens Warning: Cannot modify header information - headers already sent by (output started at /home/adnpc.net/perso/dll/index.php:1) in /home/adnpc.net/perso/dll/includes/decide-lang.php on line 24 La ligne 24 dans mon code correspond a ceci : setcookie("lang", $lang, time() + $expire); Sinon j'ai également une question lorsque je suis sur l'index avec le texte en anglais ...../index.php?lang=en lorsque je clique sur un lien (présent sur l'index), la partie ?lang=en disparait ce qui est logique et ça repasse en français...comment remédier à ce problème ? Merci beaucoup
Portekoi Posté 30 Novembre 2005 Posté 30 Novembre 2005 Bonjour, Pour ton premier problème, tu dois avoir quelque chose qui s'affiche avant la ligne 24. Pour le second problème, j'ai pas tout compris. Portekoi
Gros N@z Posté 30 Novembre 2005 Auteur Posté 30 Novembre 2005 <?php if(isset($HTTP_COOKIE_VARS['lang'])) { $lang = $HTTP_COOKIE_VARS['lang']; } else { // si aucune langue n'est déclarée on tente de reconnaitre la langue par défaut du navigateur $lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2); } //script d'origine if ($lang=='fr') { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php include('fr-lang.php'); } elseif ($lang=='en') { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php include('en-lang.php'); } //fin du script d'origine //définition de la durée du cookie (1 an) $expire = 365*24*3600; //enregistrement du cookie au nom de lang setcookie("lang", $lang, time() + $expire);?> en fait j'ai ça comme code Je suis en train de lire un tuto sur cette erreur (http://www.phpdebutant.org/article145.php) mais je ne comprends pas trop pour l instant...
Gros N@z Posté 30 Novembre 2005 Auteur Posté 30 Novembre 2005 Et bien je ne comprends toujours pas le tuto malheuresement...
Portekoi Posté 30 Novembre 2005 Posté 30 Novembre 2005 Dans le fichier fr-lang.php ou en-lang.php, tu n'affiches rien? Parfois, il suffit d'un saut de ligne tout bête... Essaie en mettant les deux lignes d'inclusion en commentaire pour voir...
Gros N@z Posté 30 Novembre 2005 Auteur Posté 30 Novembre 2005 si j'affiche des choses <?php //--------------------------------------------------------- // ELEMENTS COMMUNS //--------------------------------------------------------- define('TXT_1_STRUCT', 'Home'); define('TXT_2_STRUCT', 'Partners'); define('TXT_3_STRUCT', 'Contact'); define('TXT_4_STRUCT', 'About'); define('TXT_5_STRUCT', 'Copyright © blablabla 2006. Propriété de leurs auteurs respectifs. Page générée en .....'); //--------------------------------------------------------- // index.php //--------------------------------------------------------- define('TXT_1_INDEX', 'cdddccd'); define('TXT_2_INDEX', 'Nom du fichier recherché :'); define('TXT_3_INDEX', '(exemple : <font color="#FF0000"><hihihi</strong></font>)'); define('TXT_4_INDEX', 'ralala'); //--------------------------------------------------------- // propos.php //--------------------------------------------------------- define('TXT_1_PROPOS', 'txt1'); define('TXT_2_PROPOS', 'txt2'); ?> ça marche d'ailleurs puisque sans cookies j'arrive à le faire marcher
NorSeb Posté 30 Novembre 2005 Posté 30 Novembre 2005 Bonjour, en fait j'ai ça comme code Je suis en train de lire un tuto sur cette erreur (http://www.phpdebutant.org/article145.php) mais je ne comprends pas trop pour l instant... <{POST_SNAPBACK}> Regarde ton code... avant le "<?php" tu as une ligne vide. C'est elle qui fout la m***. En effet, il faut absolument que les cookies et autres variables de sessions soient définie avant que les données a afficher soient envoyées au navigateur. Or la ligne vide est interprétée comme une donnée a afficher. Supprime-la, ca devrait aller mieux
Gros N@z Posté 30 Novembre 2005 Auteur Posté 30 Novembre 2005 Bonjour,Regarde ton code... avant le "<?php" tu as une ligne vide. C'est elle qui fout la m***. En effet, il faut absolument que les cookies et autres variables de sessions soient définie avant que les données a afficher soient envoyées au navigateur. Or la ligne vide est interprétée comme une donnée a afficher. Supprime-la, ca devrait aller mieux <{POST_SNAPBACK}> dans mon code il n'y a pas de ligne vide, c est juste sur le forum
NorSeb Posté 30 Novembre 2005 Posté 30 Novembre 2005 (modifié) Si c'est pas une ligne, tu dois envoyer quelque chose au navigateur avant le setcookie(), c'est clair... Il faut que tu cherche de ce coté là. Il y a quoi dans les includes fr-lang.php et en-lang.php ?? Modifié 30 Novembre 2005 par NorSeb
NorSeb Posté 30 Novembre 2005 Posté 30 Novembre 2005 Bonjour, Après un bref echange de mail il s'est avéré que c'est (encore) Portekoi qui avait raison... Il y avait plein de choses affichées avant le setcookie. Normalement, ca devrait aller
Gros N@z Posté 30 Novembre 2005 Auteur Posté 30 Novembre 2005 je viens de le mettre au tout début de la page mais c est pareil <?php require("includes/decide-lang.php"); Require("includes/fonctions.php");?><? echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>"; ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head>....
Anonymus Posté 30 Novembre 2005 Posté 30 Novembre 2005 Juste avant d'envoyer le cookies, tu affiches un tiret, et une grande ligne, ainsi : die("-<hr>"); Tu verras bien si quelque chose s'affiche avant le tiret, et avant la ligne
Dre4M Posté 30 Mars 2006 Posté 30 Mars 2006 Bonjour, j'ai actuellement le même problème sur ce tutorial, j'ai essayé la commande die("-<hr>"); Le résultat de la page index.html est : "); require("./pages/lang.php"); ?> Choix de langue * Francais * Anglais Code de la page index.html : <?php die("-<hr>");require("./pages/lang.php"); ?> <html><head><title>Index</title></head><body></body><h1>Choix de langue</h1><ul> <li><a href="./pages/accueil.php?lang=fr">Francais</a></li> <li><a href="./pages/accueil.php?lang=en">Anglais</a></li></ul> Au passage le code du cookie: <?php if(isset($HTTP_COOKIE_VARS['lang'])) { $lang = $HTTP_COOKIE_VARS['lang'];} else { // si aucune langue n'est déclarée on tente de reconnaitre la langue par défaut du navigateur $lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2); }//script d'origineif ($lang=='fr') { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php include('../lang/fr-lang.php'); } elseif ($lang=='en') { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php include('../lang/en-lang.php'); } //fin du script d'origine //définition de la durée du cookie (1 an) $expire = 365*24*3600; //enregistrement du cookie au nom de langsetcookie("lang", $lang, time() + $expire); ?> Cependant quand j'essayé sur ma page accueil.php, j'ai un tiret ainsi qu'une barre qui s'affiche. Pourtant le code est le même que celui de l'index J'ai essayé de chercher pourquoi il m'affichait le code php sur la page index, je pensais a une balise fermant le code mal placé mais j'ai pas trouvé que ce soit ds l'index ou le cookie.
Anonymus Posté 30 Mars 2006 Posté 30 Mars 2006 Attends : regle ton problème de cookie, tu verras que l'autre problème disparaitra de lui même. Tu as un problème de langue parce que justement tu ne peux pas envoyer de cookie. Pour régler ton problème de cookie, tu prends la première ligne du fichier en question (celui qui est appelé par l'url), et tu descend ton code comme ca, à la recherche de la ligne blanche
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant