une erreur dans le script de session

pascal den
Invité n'ayant pas de compte PHPfrance

16 oct. 2005, 16:19

Bonjour,

lorsque j'execute ce script j'ai deux erreurs:
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home.2/xxxx/www/xxxx/index.php:7) in /home.2/xxxx/www/xxxxxxx/index.php on line 18

Warning: Cannot modify header information - headers already sent by (output started at /home.2/xxxxx/www/xxxxxx/index.php:7) in /home.2/xxxxx/www/xxxxxx/index.php on line 24
je rame depuis deux jours dessus. merci pour votre aide.
<?php
// On définit un login et un mot de passe de base pour tester notre exemple. Cependant, vous pouvez très bien interroger votre base de données afin de savoir si le visiteur qui se connecte est bien membre de votre site

$a=" ";
$login_valide = "test";
$passe_valide = "123456";
echo  $_POST['login'];
echo $a;
echo  $_POST['passe'];
// on teste si nos variables sont définies
if (isset($_POST['login']) && isset($_POST['passe'])) {

        // on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe
        if ($login_valide == $_POST['login'] && $passe_valide == $_POST['passe']) {
                // dans ce cas, tout est ok, on peut démarrer notre session

                // on la démarre :)
                session_start ();
                // on enregistre les paramètres de notre visiteur comme variables de session ($login et $pwd) (notez bien que l'on utilise pas le $ pour enregistrer ces variables)
                $_SESSION['login'] = $_POST['login'];
                $_SESSION['passe'] = $_POST['passe'];

                // on redirige notre visiteur vers une page de notre section membre
                header ('location: membre.php');
        }
        else {
            // Le visiteur n'a pas été reconnu comme étant membre de notre site. On utilise alors un petit javascript lui signalant ce fait
            echo '<body onLoad="alert(\'Membre non reconnu...\')">';
            // puis on le redirige vers la page d'accueil
            echo '<meta http-equiv="refresh" content="0;URL=htpp://www.xxxxx.com/">';
        }
}
else {
        echo 'Les variables du formulaire ne sont pas déclarées.';
}
?>

Mammouth du PHP | 1311 Messages

16 oct. 2005, 16:23

salut
tout est dans ton message d'erreur :D
il faut mettre session_start avant toute autre sortie, c'est a dire avant du html ou des echo, print....

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 oct. 2005, 16:45

salut
tout est dans ton message d'erreur :D
il faut mettre session_start avant toute autre sortie, c'est a dire avant du html ou des echo, print....
... et aussi tout espace

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

pascal denn
Invité n'ayant pas de compte PHPfrance

16 oct. 2005, 16:45

merci pour ta reponse

mais comment faire la verif du login et du passe apres l'ouverture de la session

merci

pascal denn
Invité n'ayant pas de compte PHPfrance

16 oct. 2005, 16:59

merci

kel espace ?

Mammouth du PHP | 19672 Messages

16 oct. 2005, 17:02

La session n'est qu'un contenant et n'a rien à voir avec le login ni le mot de passe: éventuellement tu peux enregistrer le login dans une variable de session puorl le suivi de l'internaute, mais c'est indépendant: tu peux parfaitement lancer la session en début de script, ça ne donnera ni n'enlèvera aucune permission à qui que ce soit: il faudra toujours passer par l'indentification.

Donc mets le session_start() en début de script, en première instruction avant tout le reste et sourtout avant d'envoyer la moindre information vers le navigateur. Ensuite dans ton script d'identification, tu peux ajouter des variables de session ou les modifier à la session en cours.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

pascal denn
Invité n'ayant pas de compte PHPfrance

16 oct. 2005, 17:08

merci

voila le scipt nouveau :
<?php
session_start ();
// On définit un login et un mot de passe de base pour tester notre exemple. Cependant, vous pouvez très bien interroger votre base de données afin de savoir si le visiteur qui se connecte est bien membre de votre site
$a=" ";
$login_valide = "test";
$passe_valide = "123456";
echo  $_POST['login'];
echo $a;
echo  $_POST['passe'];
// on teste si nos variables sont définies
if (isset($_POST['login']) && isset($_POST['passe'])) {
        // on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe
        if ($login_valide == $_POST['login'] && $passe_valide == $_POST['passe']) {
                // dans ce cas, tout est ok, on peut démarrer notre session
                // on enregistre les paramètres de notre visiteur comme variables de session ($login et $pwd) (notez bien que l'on utilise pas le $ pour enregistrer ces variables)
                $_SESSION['login'] = $_POST['login'];
                $_SESSION['passe'] = $_POST['passe'];
                // on redirige notre visiteur vers une page de notre section membre
                header ('location: membre.php');
        }
        else {
            // Le visiteur n'a pas été reconnu comme étant membre de notre site. On utilise alors un petit javascript lui signalant ce fait
            echo '<body onLoad="alert(\'Membre non reconnu...\')">';
            // puis on le redirige vers la page d'accueil
            echo '<meta http-equiv="refresh" content="0;URL=htpp://www.123pronos.com/">';
        }
}
else {
        echo 'Les variables du formulaire ne sont pas déclarées.';
}
?>

j'ai encore une erreur : sur la fonction header ('location: membre.php');

Warning: Cannot modify header information - headers already sent by (output started at /home.2/pronos/www/xxxx/index.php:7) in /home.2/xxxx/www/sectioncession/index.php on line 19

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 oct. 2005, 17:18

utilise les balises
 pour mettre du code la prochaine fois, c'est plus lisible.

sinon il y a un espace juste apres header, l'erreur vient certainement de la
  [code] header ('location: membre.php');   [/code]
remplace par:
  [code]header('location: membre.php');[/code]  

EDIT; évidement c'est quand je me plaind des [php] pas moyen de l'utiliser il me met *php a la place :-k

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Invité
Invité n'ayant pas de compte PHPfrance

16 oct. 2005, 17:23

desole mais cela ne fonctionne tjr pas
<?php
session_start ();
// On définit un login et un mot de passe de base pour tester notre exemple. Cependant, vous pouvez très bien interroger votre base de données afin de savoir si le visiteur qui se connecte est bien membre de votre site
$a=" ";
$login_valide = "xxxxx";
$passe_valide = "xxxxx";
echo  $_POST['login'];
echo $a;
echo  $_POST['passe'];
// on teste si nos variables sont définies
if (isset($_POST['login']) && isset($_POST['passe'])) {
        // on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe
        if ($login_valide == $_POST['login'] && $passe_valide == $_POST['passe']) {
                // dans ce cas, tout est ok, on peut démarrer notre session
                // on enregistre les paramètres de notre visiteur comme variables de session ($login et $pwd) (notez bien que l'on utilise pas le $ pour enregistrer ces variables)
                $_SESSION['login'] = $_POST['login'];
                $_SESSION['passe'] = $_POST['passe'];
                // on redirige notre visiteur vers une page de notre section membre
                header('location: membre.php');
        }
        else {
            // Le visiteur n'a pas été reconnu comme étant membre de notre site. On utilise alors un petit javascript lui signalant ce fait
            echo '<body onLoad="alert(\'Membre non reconnu...\')">';
            // puis on le redirige vers la page d'accueil
            echo '<meta http-equiv="refresh" content="0;URL=htpp://www.123pronos.com/">';
        }
}
else {
        echo 'Les variables du formulaire ne sont pas déclarées.';
}
?>

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 oct. 2005, 17:51

c'est aussi discret que vicieux ... :lol:
tu affiche un espace en faissant:
echo $a;
enleve cette ligne :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 19672 Messages

16 oct. 2005, 18:00

Non, maintenant que le session_start est au bon endroit, l'ereur vient d'ailleurs : je soupçonne que ce fichier est lui-même inclus dans une page index : C'est dans cette page index qu'il doit y avoir d'autres données envoyées vers le navigateur, des choses du genre:
<html>
<head>
<title>etc.....
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 oct. 2005, 18:03

Non, maintenant que le session_start est au bon endroit, l'ereur vient d'ailleurs
oui il n'y a plus d'erreur concernant la session mais le header et...
$a=" ";
...
$login_valide = "xxxxx";
$passe_valide = "xxxxx";
echo $_POST['login'];
echo $a;
...
Il y aura donc bien un espace
:wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 19672 Messages

16 oct. 2005, 18:12

Décidément, je crois que je vais faire la sieste, je l'ai pas vu :oops:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

pascal denn
Invité n'ayant pas de compte PHPfrance

16 oct. 2005, 18:56

merci pour vos reponses

mais cela ne change rien
<?php
session_start ();
// On définit un login et un mot de passe de base pour tester notre exemple. Cependant, vous pouvez très bien interroger votre base de données afin de savoir si le visiteur qui se connecte est bien membre de votre site
$login_valide = "xxxxx";
$passe_valide = "9xxxxx";
echo  $_POST['login'];
echo  $_POST['passe'];
// on teste si nos variables sont définies
if (isset($_POST['login']) && isset($_POST['passe'])) {
        // on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe
        if ($login_valide == $_POST['login'] && $passe_valide == $_POST['passe']) {
                // dans ce cas, tout est ok, on peut démarrer notre session
                // on enregistre les paramètres de notre visiteur comme variables de session ($login et $pwd) (notez bien que l'on utilise pas le $ pour enregistrer ces variables)
                $_SESSION['login'] = $_POST['login'];
                $_SESSION['passe'] = $_POST['passe'];
                // on redirige notre visiteur vers une page de notre section membre
header('location:membre.php');
        }
        else {
            // Le visiteur n'a pas été reconnu comme étant membre de notre site. On utilise alors un petit javascript lui signalant ce fait
            echo '<body onLoad="alert(\'Membre non reconnu...\')">';
            // puis on le redirige vers la page d'accueil
            echo '<meta http-equiv="refresh" content="0;URL=htpp://www.xxxxx.xxx/">';
        }
}
else {
        echo 'Les variables du formulaire ne sont pas déclarées.';
}
?>
oui c une page d'index.php sans rien de plus.

mais j'ai tjrs le message suivant

Warning: Cannot modify header information - headers already sent by (output started at /home.2/pronos/www/sectioncession/index.php:6) in /home.2/xxxxx/www/xxxxxx/index.php on line 17

merci pour votre aide

Mammouth du PHP | 19672 Messages

16 oct. 2005, 19:07

oui c une page d'index.php sans rien de plus.
On doit traduire ça comment ? C'est ça la page index ou c'est un fichier inclu ailleurs ?

Je viens de tester ton script en local: j'y ai fait juste une ou deux modifs mineures, mais il fonctionne très bien :
<?php
session_start ();
// On définit un login et un mot de passe de base pour tester notre exemple. Cependant, vous pouvez très bien interroger votre base de données afin de savoir si le visiteur qui se connecte est bien membre de votre site
$login_valide = "xxxxx";
$passe_valide = "9xxxxx";
$login = isset($_POST['login']) ? $_POST['login'] : "";
$passe = isset($_POST['passe']) ? $_POST['passe'] : "";
echo  $login;
echo  $passe;
// on teste si nos variables sont définies
if (!empty($login) && !empty($passe))
{
    // on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe
    if ($login_valide == $login && $passe_valide == $passe) 
    {
        // dans ce cas, tout est ok, on peut démarrer notre session
        // on enregistre les paramètres de notre visiteur comme variables de session ($login et $pwd) (notez bien que l'on utilise pas le $ pour enregistrer ces variables)
        $_SESSION['login'] = $login;
        $_SESSION['passe'] = $passe;
        // on redirige notre visiteur vers une page de notre section membre
        header("location:./membre.php");
    }
    else
    {
        // Le visiteur n'a pas été reconnu comme étant membre de notre site. On utilise alors un petit javascript lui signalant ce fait
        echo '<body onLoad="alert(\'Membre non reconnu...\')">';
        // puis on le redirige vers la page d'accueil
        echo '<meta http-equiv="refresh" content="0;URL=htpp://www.xxxxx.xxx/">';
    }
}
else
{
    echo 'Les variables du formulaire ne sont pas déclarées.';
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: