OVH Cloud OVH Cloud

Probleme WARNING sur script PHP

6 réponses
Avatar
Pierre
Bonjour,

Voici mon problème.
Je m'entraîne à créer un site de vente avec choix de produits dans un
catalogue, puis mémorisation dans un panier virtuel.
Jusque là tout va bien !

Ensuite depuis le panier l'internaute clique sur un bouton COMMANDER et
bascule sur un fichier commande.php qui teste dans un premier temps si
l'utilisateur est déjà identifié sur le site.
Si tel n'est pas le cas, le scipt commande.php fait ouvrir le script
login.php. Et je pense que c'est là que j'ai un problème.
Ce script est composé d'un formulaire avec un champ pour entrer son email
(login) et un champ pour le mot de passe.

Normalement une fois ces éléments entrés, soit l'utilisateur n'est pas
inscrit et s'enregistre via un formulaire d'inscription, soit le script
login.php retourne sur le script commande.php.

Mais lorsque je valide sous login.php après avoir entré l'email et le mot de
passe (ces deux éléments sont déjà intégrés dans une table spécifique de ma
base de données), sous EasyPHP il ne se passe rien ! Je reste sur le
formulaire de login.php

Lorsque j'envois sous Free, j'ai les 2 messages suivants :

-1-
"Warning: session_start(): Cannot send session cache limiter - headers
already sent (output started at
/var/www/free.fr/0/4/bjorken/auger/bancoG_FR/login.php:9) in
/var/www/free.fr/0/4/bjorken/auger/bancoG_FR/login.php on line 28"

A la ligne 28 j'ai : session_start();

-2-
Warning: Cannot modify header information - headers already sent by (output
started at /var/www/free.fr/0/4/bjorken/auger/bancoG_FR/login.php:9) in
/var/www/free.fr/0/4/bjorken/auger/bancoG_FR/login.php on line 35

A la ligne 35 j'ai : header("Location:commande.php");


Voici le script total :
----------------------------------------------------------------------------
<?php
//initialisation des variables
if (!isset($HTTP_POST_VARS['valider'])) $HTTP_POST_VARS['valider']="";
if (!isset($HTTP_POST_VARS['pass'])) $HTTP_POST_VARS['pass']="";
if (!isset($HTTP_POST_VARS['email']))$HTTP_POST_VARS['email']="";
if (!isset($erreurlog)) $erreurlog=0;
?>

<?php require_once('../Connections/id.php'); ?> // paramètres de connexion à
la base

<?php
$colpass_rsLogin = "0";
if (isset($HTTP_POST_VARS['pass'])) {
$colpass_rsLogin = (get_magic_quotes_gpc()) ? $HTTP_POST_VARS['pass'] :
addslashes($HTTP_POST_VARS['pass']);
}
$colemail_rsLogin = "0";
if (isset($HTTP_POST_VARS['email'])) {
$colemail_rsLogin = (get_magic_quotes_gpc()) ? $HTTP_POST_VARS['email'] :
addslashes($HTTP_POST_VARS['email']);
}
mysql_select_db($database_id, $id);
$query_rsLogin = sprintf("SELECT clients.email, clients.pass,
clients.statut, clients.ID FROM clients WHERE email='%s' AND pass='%s'",
$colemail_rsLogin,$colpass_rsLogin);
$rsLogin = mysql_query($query_rsLogin, $id) or die(mysql_error());
$row_rsLogin = mysql_fetch_assoc($rsLogin);
$totalRows_rsLogin = mysql_num_rows($rsLogin);
?>

<?php
if ($HTTP_POST_VARS['valider']=="ok")
{
session_start(); // Ca c'est la ligne 35!
$statut=$row_rsLogin['statut'];
$clientID=$row_rsLogin['ID'];
if ($row_rsLogin['statut']=="client")
{
$HTTP_SESSION_VARS['statut']=$row_rsLogin['statut'];
$HTTP_SESSION_VARS['clientID']=$row_rsLogin['ID'];
header("Location:commande.php"); // Et ca la ligne 38
}
else
{
$erreurlog=1;
}
}
?>
----------------------------------------------------------------------------

Quelqu'un pourrait-il m'expliquer ce que signifie ces messages d'erreurs ?
Je n'y comprends plus rien !

Merci d'avance !!
Pierre

6 réponses

Avatar
Daedalus
-1-
"Warning: session_start(): Cannot send session cache limiter - headers
already sent (output started at
/var/www/free.fr/0/4/bjorken/auger/bancoG_FR/login.php:9) in
/var/www/free.fr/0/4/bjorken/auger/bancoG_FR/login.php on line 28"


Problème avec la session ligne 28 car un header à déjà été envoyer, et il te
pointe la sortie en ligne 9. Voici ce qu'il y a en ligne 9:
7:?>
8:
9:<?php require_once('../Connections/id.php'); ?> // paramètres de connexion
à
la base

Tu as un line-feed en html entre ?> et <?. D'ailleurs je ne vois pas très
bien pourquoi tu a fermé ton tag php pour l'ouvrir tout de suite après avec
un simple line-feed entre les deux !?! Et ceci: "?> // paramètres de
connexion"... tu ferme ton tag php avant ton commentaire ?

Enlève tout c'est tag (<? et ?>) qui sont completement inutile. Ouvre un tag
php et ne le ferme que lorsque le php est finit. Ou alors (si vraiment tu
tiens à tout ces tags inutiles) n'insère rien entre les tags de fermeture et
d'ouverture si tu veux éviter d'envoyer un header involontairement.


-2-
Warning: Cannot modify header information - headers already sent by
(output

started at /var/www/free.fr/0/4/bjorken/auger/bancoG_FR/login.php:9) in
/var/www/free.fr/0/4/bjorken/auger/bancoG_FR/login.php on line 35

A la ligne 35 j'ai : header("Location:commande.php");



Encore la même chose, il ne peut envoyer le header car il déjà été envoyer.
Il te pointe encore la sortie en ligne 9


Dae

Avatar
Da Bourz
Cela dit que quelque chose a écrit vers le navigateur avant la ligne
35, et ce n'est pas possible de modifier les HEADERS lorsque l'on a
commencer à les envoyer.

Il y a quoi dans ton include ? (le id.php) ?
Avatar
laurent vilday
Pierre 29/12/2004 <41d25ee4$0$1321$

"Warning: session_start(): Cannot send session cache limiter -
headers already sent (output started at


Les entêtes (headers) on déjà (already) été envoyées (sent).

dans ton script on a plein de

<?php
// code
?>

<?php
//code
?>

Ca signifie que entre chaque ?> et <?php tu y places des sauts de
lignes soit un espace HTML. Donc pour pouvoir écrire cet espace dans
le corps de la réponse, il faut d'abord envoyer les entetes. Hors une
fois les entetes envoyées, on ne peut plus y retoucher, donc pas de
session_start() ni autre header();

?>

<?php


remplaces ca plutot par ?><?php
ce qui en gros se remplace par du vide, bref ne passe pas d'un
contexte à un autre quand ce n'est pas nécessaire
(PHP -> HTML -> PHP).

<?php require_once('../Connections/id.php'); ?> // paramètres de
connexion à la base


La c'est encore pire, tu écris carrément un commentaire PHP en dehors
du contexte PHP (tu as fermé le ?>) donc tu écris en HTML le texte
HTML "// paramètres de connexion à la base" en permanence.

--
laurent
http://mokhet.com/

Avatar
Missions courtes
"Pierre" a écrit dans le message news:
41d25ee4$0$1321$
Bonjour,

Voici mon problème.

Lorsque j'envois sous Free, j'ai les 2 messages suivants :

-1-
"Warning: session_start(): Cannot send session cache limiter - headers
already sent (output started at
/var/www/free.fr/0/4/bjorken/auger/bancoG_FR/login.php:9) in
/var/www/free.fr/0/4/bjorken/auger/bancoG_FR/login.php on line 28"


Bonjour,
il faut que ton script *débute absolument* par :
<?php
session_start();
// Niveau de report d'erreur :
error_reporting(0); // Désactiver le rapport d'erreurs
// error_reporting(E_ALL); // Repporter toutes les erreurs PHP

*** Suite de ton code ***
Cordialement.
Michel
Site : Missions-courtes

Avatar
Da Bourz
Cela dit que quelque chose a écrit vers le navigateur avant la ligne
35, et ce n'est pas possible de modifier les HEADERS lorsque l'on a
commencer à les envoyer.

Il y a quoi dans ton include ? (le id.php) ?
Avatar
Pierre
Merci pour ces réponses !
J'ai dégagé toutes les lignes vides et le problème a disparu !
Idem dans le id.php

Cecit dit, un problème s'en va ! Un autre arrive ! Bou !!
C'est l'objet d'un autre post !

Encore merci !
Pierre