Problème de variable de session - PHP - Programmation
Marsh Posté le 08-06-2010 à 16:39:47
il doit y avoir un texte (ou un retour à la ligne) avant le session_start();
Marsh Posté le 08-06-2010 à 17:00:10
Visiblement non, en fait j'ai deux fichiers: un qui contient toute l'entete avec l'ouverture de session, et un qui contient la page web elle même et qui appelle le header.
Voici le début du fichier header :
<?php
session_start();
[...]
Et le début du fichier page:
<?php get_header(); ?>
[...]
Est ce que ça peut venir d'une incompréhension entre les deux pages à ce niveau... ou pas du tout?
Marsh Posté le 08-06-2010 à 17:03:31
Salut,
Comme le dit ton message d'erreur :
- "headers already sent" (les headers ont déjà été transmis)
- puis "output started at /var/www/vhost/arborescences.net/home/html/index.php:4" (la sortie a commencé dans index.php ligne 4)
Donc regarde ce qu'il y a dans ton index.php à la ligne 4, il doit y avoir soit un echo, soit du texte, ou un retour à la ligne en dehors de balises <?php ?>, qui du coup interdit l'utilisation du session_start() (qui exige que les headers n'aient pas déjà été transmis)
Bon courage
Marsh Posté le 08-06-2010 à 17:54:01
même une tabulation (indentation) peut générer ce genre d'erreur
Marsh Posté le 08-06-2010 à 19:14:03
s'il y a un include, et que dans ton include il y a envoi de données l'erreur se produit aussi.
cela pose problème si l'envoi est fait dans une fonction ou classe
Marsh Posté le 09-06-2010 à 10:11:32
J'ai regardé vos solutions, j'ai fait quelques modification en effet j'avais des tabulations, j'ai supprimé tout ça et j'ai toujours des erreurs:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /var/www/vhost/arborescences.net/home/html/index.php:4) in /var/www/vhost/arborescences.net/home/html/wp-content/themes/greenie-10/header.php on line 1
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/vhost/arborescences.net/home/html/index.php:4) in /var/www/vhost/arborescences.net/home/html/wp-content/themes/greenie-10/header.php on line 1
La ligne 4 de mon index correspond à du js:
document.valeur.submit();
Une idée? ca me bloque tout cette histoire, en plus la valeur n'est pas transmise aux autres pages. Est ce que ca peut venir du serveur d'hébergement qui bloquerais la création de cookies ou un truc du genre?
Marsh Posté le 09-06-2010 à 10:15:30
Elooodie a écrit : J'ai regardé vos solutions, j'ai fait quelques modification en effet j'avais des tabulations, j'ai supprimé tout ça et j'ai toujours des erreurs: |
Salut,
Comment ça du JS ?
Tu n'as pas le droit de transmettre du JS ou du HTML avant de faire un session_start. Le problème vient de là.
Montre nous le début du fichier index.php ce sera plus simple...
Bon courage
Marsh Posté le 09-06-2010 à 10:24:43
Merci, en effet je viens de me rendre compte de ma boulette
J'ai donc fait démarrer le session dans l'index:
<?php session_start(); ?>
<script type="text/javascript">
function myLoad() {
document.getElementById('resolution').value=screen.width;
document.valeur.submit(); }
</script>
et le début de mon header:
<?php
if(isset($_POST['resolution']) && !isset($_SESSION['resolution'])) {
$_SESSION['resolution'] = $_POST['resolution'];
}
?>
Alors là, le problème change, le message d'erreur s'affiche brievement sur l'index (brievement car la page recharge seule), mon site s'affiche presque correctement, mais quand je passe aux pages suivantes problème, j'ai l'impression qu'il n'y plus rien dans le $_SESSION['resolution']!
Je précise que ce header est chargé sur toutes les pages sauf l'index.
Marsh Posté le 09-06-2010 à 11:06:56
Elooodie a écrit : [...] |
Houla c'est un peu confus tout ça
"Le message d'erreur s'affiche brièvement sur l'index" => quel message d'erreur ? C'est peut-être lié à tes problèmes... Mets en commentaire ton document.valeur.submit() pour avoir le temps de noter le message.
"quand je passe aux pages suivantes il n'y a plus rien dans $_SESSION['resolution']" => est-ce que tu as refait un session_start ? Tant que session_start n'est pas fait, tu ne peux accéder au contenu du tableau $_SESSION
Marsh Posté le 09-06-2010 à 11:22:22
Alors, le message d'erreur sur l'index c'est le warning, les mêmes que j'ai cité plus haut, ils ont juste changé de pages, en fait ils se trouvent toujours sur la page où il y a le session_start().
Ensuite, non je n'avais pas refait session_start, je viens d'essayer et le problème est toujours le même et il me rajoute les warnings au dessus.
Je sais pas si je suis très claire je suis assez despespérée là lol
Marsh Posté le 09-06-2010 à 11:45:06
Elooodie a écrit : Alors, le message d'erreur sur l'index c'est le warning, les mêmes que j'ai cité plus haut, ils ont juste changé de pages, en fait ils se trouvent toujours sur la page où il y a le session_start(). |
Bon on la refait moins stressé
1. Tu as ton fichier index dont le seul but apparemment est de récupérer la résolution de l'écran pour la transmettre en POST à la page suivante (j'imagine...). Donc déjà là tu n'as pas besoin de faire de session_start, puisque sur cette petite page d'index, tu n'accèderas pas à la session.
2. Ensuite tu arrives dans une 2e page, on va dire "page" (j'imagine... tu m'en as pas dit assez pour ça ). Je suppose que "page" commence par faire un include de "header". Avant de faire quoi que ce soit d'autre, pas de retour chariot, ni de tabulation.
3. Après donc on arrive dans le fichier "header" qui doit commencer par le session_start() avant de faire quoi que ce soit d'autre. Alors seulement tu peux te mettre à écrire et lire dans la session.
Est-ce que tu suis bien ce cheminement ? N'hésite pas à poster davantage de code (et d'utiliser les balises [code=php][/code])
Marsh Posté le 09-06-2010 à 11:56:11
Tout d'abord merci de prendre de ton temps pour m'aider
Pour le 1. c'est bon j'ai supprimé le session_start()
Pour le 2. en effet dans ma page (une page classique avec du texte et photos qui présente une entreprise) je fais :
Code :
|
C'est la toute première ligne, pas de retour chariot, espace, ni rien avant.
3. Le header commence bien par session_start :
Code :
|
J'ai regardé pas mal de posts d'utilisateurs qui avaient ce soucis et ils ont réussi à regler en supprimant les espaces etc. Moi ce n'est pas le cas. J'ai entendu parler des BOM, mais je ne vois pas à quoi ca correspond
Marsh Posté le 09-06-2010 à 12:02:06
Elooodie a écrit : Pour le 2. en effet dans ma page (une page classique avec du texte et photos qui présente une entreprise) je fais :
|
Y a un truc que je comprends pas dans ta page :
- tu appelles get_header() : c'est quoi cette fonction ? Elle est où ?
- tu fais pas include "header.php", comment le code peut faire pour arriver dans ton fichier header ?
Marsh Posté le 09-06-2010 à 12:07:00
Alors get_header est une fonction prédéfinie dans wordpress qui me permet d'appeler le contenu du fichier header.php
Je n'ai jamais utilisé include ( je débute tu l'auras surement compris ^^ ), est ce que l'utiliser à la place du get_header pourrait résoudre le problème?
A savoir que visiblement le header est bien pris en compte puisque ma feuille de style fonctionne.
Marsh Posté le 09-06-2010 à 13:15:42
Elooodie a écrit : Alors get_header est une fonction prédéfinie dans wordpress qui me permet d'appeler le contenu du fichier header.php |
Je connais pas wordpress. Après recherche effectivement la fonction get_header() devrait faire ce que tu attends d'elle. Donc oublie l'histoire d'include..
Il doit y avoir un autre problème quelque part mais j'avoue que c'est pas facile de t'aider car tu donnes pas beaucoup d'infos
Bon, histoire d'y voir un peu plus clair, on en est où là ? Décris exactement le comportement et le message d'erreur que tu vois.
Au pire, colle le code complet de tes fichiers pour que je puisse comprendre ce que t'essaies de faire.
Marsh Posté le 09-06-2010 à 16:42:50
Merci pour toute ton aide, mais là j'arrivais pas à m'en sortir alors aux grands maux les grands remèdes.
En fait il s'agissait d'un script qui se lançait dans l'index pour détecter la résolution d'écran du visiteur et qui envoyait la valeur par formulaire à la page suivante qui en fait se trouve être la première page du site vu que le visiteur ne voit pas la première.
On m'avait demandé d'adapter la résolution du site en fonction de la résolution = à 800*600 ou supérieur, je n'avais pas réussi en CSS donc je m'étais lancé dans un truc un peu fouilli et compliqué.
Ne m'en sortant pas, j'ai viré tout ça, la résolution d'écran sera la même pour tous, après tout, quasiment personne n'utilise le 800*600 je vais pas passer des heures à me tuer à la tache pour ca
Marsh Posté le 09-06-2010 à 18:36:29
Elooodie a écrit : Merci pour toute ton aide, mais là j'arrivais pas à m'en sortir alors aux grands maux les grands remèdes. |
OK, c'est vrai que tu m'avais l'air partie dans une usine à gaz, comme on dit.. Tant mieux que tu puisses t'abstenir sur ce coup-là parce que c'était quand même pas super élégant de balancer la résolution au serveur via du javascript (bien que fonctionnel)
Bon courage pour la suite en tout cas !
Marsh Posté le 08-06-2010 à 16:01:06
Bonjour à tous,
Me voila enfin au bout du site internet que j'avais a réalisé. J'ai testé tout mon site en local il fonctionne parfaitement, seulement voila quand je met le site en ligne chez mon hébergeur (Arsys) et que je me rend sur la page d'accueil j'ai de message qui s'affiche:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /var/www/vhost/arborescences.net/home/html/index.php:4) in /var/www/vhost/arborescences.net/home/html/wp-content/themes/greenie-10/header.php on line 2
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/vhost/arborescences.net/home/html/index.php:4) in /var/www/vhost/arborescences.net/home/html/wp-content/themes/greenie-10/header.php on line 2
Et ensuite mon site s'affiche mais mal, le CSS est mal pris en compte, etc.
Je ne sais absolument pas de quoi ça vient, je précise que j'utilise wordpress si ça a une importance quelconque...
Si quelqu'un pouvait m'aider à comprendre le problème et me donner des pistes pour le résoudre
Merci d'avance