[php]problème de HEADER..($RACINE???)

Résolu/Fermé
maxime_B Messages postés 788 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 15 juin 2010 - 23 juil. 2006 à 21:02
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 - 26 juil. 2006 à 09:44
salut

un code qui en théorie fonctionne bien je pense, mais en pratique pas du tout.
il s'agit d'un header qui redirige le visiteur selon qu'il est connecté ou pas.si il envoie le formulaire il est connecté...mais il reste sur la même page!!!
donc ce sont les headers qui ne fonctionnent pas...

quelqu'un aurait une solution à ce problème??

merci

ps:il y a aussi un problème avec la variable $RACINE, dans la page pour les membres.
celui qui est connecté voit la page et l'autre:
<?php
}
else
{
 echo "Tu dois être connecté pour accéder à cette page !<br> Va <a href=\"$RACINE/index.php\">ici</a> pour te connecter.";
}
?>

merci
A voir également:

5 réponses

maxime_B Messages postés 788 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 15 juin 2010 55
24 juil. 2006 à 16:59
eh bien voilà l code ou le header pose problème, mais je n'ai pas très bien comprit ta deuxième explication :(

if (isset($_POST['connexion']) && $_SESSION['logged'] == false)
{
        //Vérification des autres variables.
        if (isset($_POST['login'],$_POST['mot_de_passe']) && !empty($_POST['login']) && !empty($_POST['mot_de_passe']))
        {
                $login = htmlspecialchars($_POST['login']);
                $mot_de_passe = htmlspecialchars($_POST['mot_de_passe']);
                //Requête comptant le nombre de pseudos $_POST['pseudo']
                $sql = mysql_query("SELECT COUNT(*) AS nb_login FROM site_membres WHERE login='".$login."'");
                //Si le pseudo existe.
                if (mysql_result($sql,0,'nb_login') == 1)
                {
                        //Information sur le compte du membre.
                        $sql_infos = mysql_query("SELECT id, mot_de_passe, confirmation, niveau FROM site_membres WHERE login='".$login."'");
                        $donnees = mysql_fetch_array($sql_infos);
                        //Hashage du mot de passe.
                        $mot_de_passe_hash = md5($mot_de_passe);
                        //Comparaison du mot de passe.
                        if ($mot_de_passe_hash == $donnees['mot_de_passe'])
                        {
                                //Si $donnees['confirmation'] vaut 1.
                                if ($donnees['confirmation'] == 1)
                                {
                                        if (isset($_POST['souvenir']) && $_POST['souvenir'] == 'on')
                                        {
                                            //Temps d'expiration des cookies (1 an).
                                            $expire = time() + 3600 * 24 * 365;
                                            setcookie('login', $login, $expire);
                                            setcookie('mot_de_passe', $mot_de_passe, $expire);
                                        }
                                        $_SESSION['logged'] = true;                     
                                        $_SESSION['id'] = $donnees['id']; 
                                        $_SESSION['login'] = $login; 
										$_SESSION['niveau'] = $donnees['niveau'];
                                        header("location: /membres/index_membres.php");
1
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
24 juil. 2006 à 10:55
Salut. Ton code est un peu bizarre pour une nouvelle page, tu pourrais mettre aussi celui de la page avec les header() ?
0
maxime_B Messages postés 788 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 15 juin 2010 55
24 juil. 2006 à 12:06
ok la voilà.
c'est la page index.php
je te mets le code en entier, vu qu'il n'y a pas trop de lignes en plus des gros codes.
<?php
//Démarrage de la session (à mettre avant tout code xhtml)
session_start();
//Si la variable $_SESSION['logged'] n'existe pas on la créée.
if (!isset($_SESSION['logged']))
{
$_SESSION['logged'] = false;
}
//Inclusion du fichier contenant les identifiants de connexion à la base de données.
$RACINE = "." ;
require($RACINE."/config/config_db.php");
//Connexion à la base de données.
mysql_connect($serveur, $utilisateur, $password);
mysql_select_db($base);
if ($_SESSION['logged'] == false)
{
   if (isset($_COOKIE['login'], $_COOKIE['mot_de_passe']))
   {
      //Vérification du pseudo.
      $login = htmlspecialchars($_COOKIE['login']);
      $mot_de_passe = htmlspecialchars($_COOKIE['mot_de_passe']);
      //Requête comptant le nombre de pseudos $_POST['pseudo']
      $sql = mysql_query("SELECT COUNT(*) AS nb_login FROM site_membres WHERE login='".$login."'");
       //Si le pseudo existe.
       if (mysql_result($sql,0,'nb_login') == 1)
       {
             //Vérification du mot de passe
             //Information sur le compte du membre.
             $sql_infos = mysql_query("SELECT id, mot_de_passe, confirmation, niveau FROM site_membres WHERE login='".$login."'");
             $donnees = mysql_fetch_array($sql_infos);
             //Comparaison du mot de passe et vérification que le compte est confirmé.
             if ($mot_de_passe == $donnees['mot_de_passe'] && $donnees['confirmation'] == 1)
             {
                   //Tout est bon, on connecte le membre.
                   $_SESSION['logged'] = true;
                   //Création de 2 variables de session, contenant des informations sur le membre.
                   $_SESSION['id'] = $donnees['id']; //Id du membre.
                   $_SESSION['login'] = $login; //Pseudo du membre.
				   $_SESSION['niveau'] = $donnees['niveau']; //récupère le niveau du membre
                   //Redirection vers la page membre.
                   header("location: /membres/index_membres.php");
              }
        }
   }
}
//Si la variable $_POST['connexion'] (bouton submit du formulaire) et la variable $_SESSION['logged'] vaut false (déconnecté) existent.
if (isset($_POST['connexion']) && $_SESSION['logged'] == false)
{
        //Vérification des autres variables.
        if (isset($_POST['login'],$_POST['mot_de_passe']) && !empty($_POST['login']) && !empty($_POST['mot_de_passe']))
        {
                $login = htmlspecialchars($_POST['login']);
                $mot_de_passe = htmlspecialchars($_POST['mot_de_passe']);
                //Requête comptant le nombre de pseudos $_POST['pseudo']
                $sql = mysql_query("SELECT COUNT(*) AS nb_login FROM site_membres WHERE login='".$login."'");
                //Si le pseudo existe.
                if (mysql_result($sql,0,'nb_login') == 1)
                {
                        //Information sur le compte du membre.
                        $sql_infos = mysql_query("SELECT id, mot_de_passe, confirmation, niveau FROM site_membres WHERE login='".$login."'");
                        $donnees = mysql_fetch_array($sql_infos);
                        //Hashage du mot de passe.
                        $mot_de_passe_hash = md5($mot_de_passe);
                        //Comparaison du mot de passe.
                        if ($mot_de_passe_hash == $donnees['mot_de_passe'])
                        {
                                //Si $donnees['confirmation'] vaut 1.
                                if ($donnees['confirmation'] == 1)
                                {
                                        if (isset($_POST['souvenir']) && $_POST['souvenir'] == 'on')
                                        {
                                            //Temps d'expiration des cookies (1 an).
                                            $expire = time() + 3600 * 24 * 365;
                                            setcookie('login', $login, $expire);
                                            setcookie('mot_de_passe', $mot_de_passe, $expire);
                                        }
                                        $_SESSION['logged'] = true;                     
                                        $_SESSION['id'] = $donnees['id']; 
                                        $_SESSION['login'] = $login; 
										$_SESSION['niveau'] = $donnees['niveau'];
                                        header("location: /membres/index_membres.php");
                                }
                                else
								{
								$erreur = "Le compte n'est pas confirmé !";
								}
                        }
                        else
						{
                        $erreur = "Le mot de passe est incorrect !";
						}
                }
                else
				{
                $erreur = "Le login n'existe pas !";
				}
        }
        else
		{
        $erreur = "Tous les champs doivent être remplis !";
		}
}
else
{
$erreur = "Tu n'as pas soumis le formulaire ou tu es déjà connecté !";
}
?>

<?php
$RACINE="." ;

include( $RACINE."/banniere/haut.php" ) ;
?>

<?php
$RACINE="." ;

include( $RACINE."/menu/menu1/menu.php" ) ;
?>

<div id="corps">

index

<?php

if(isset($erreur))
{
echo $erreur ;
}
?>

</div>

<?php
$RACINE="." ;

include( $RACINE."/pieddepage/bas.php" ) ;
?>

<?php
//Déconnection de la base de données.
mysql_close();
?>
0
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
24 juil. 2006 à 13:24
Bon, j'avoue ne pas avoir eu le courage de regarder la source de près ...

Par contre, quelques erreurs aperçues par ci par la :
- redéfinir $RACINE à chaque fois ne sert à rien, une fois que tu l'a fait sur ta page, la variable est visible sur toute ta page.
- faire include reviens à dire au server de copier le fichier en question, et de coller tout son contenu à la place de "include". Donc si tu fais <BODY>Coucou ! <? include('Truc.php'); ?> </BODY> et que "Truc.php" contient <BODY> <? echo "Salut !"; ?>, au final le code de ta page une fois appellée sera <BODY> Coucou ! <BODY> Salut ! </BODY> Tu ne peux donc pas faire <? } ?> comme tu le fais, le navigateur ne comprend pas d'où vient cette accolade fermante.

Et si peux, mets juste la source concernée et je jetterai un oeil de près ;)
0
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
25 juil. 2006 à 09:16
Hum, le code m'a l'air correct mais en tout cas tu ne peux pas faire } dans ton fichier include ou ton header ...

Concernant ma deuxième explication, c'était pour t'expliquer qu'en fait PHP va juste foutre tout le code source sans réfléchir la où tu lui a dit de le mettre, c'est un copier/coller brut du fichier. Donc faut faire un minimum attention, ça peut être dangeureux dans certains cas.

Bref, ce qu'il faut faire :
1) Ne PAS mettre de header autre part qu'avant toute ligne de code HTML/PHP
2) Ne PAS définir polusieurs fois la même variable (surtout si c'est pour lui affecter la même valeur)
3) Mettre include à la place de ton header, ça devrait passer ;)
0
maxime_B Messages postés 788 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 15 juin 2010 55
25 juil. 2006 à 19:58
ok merci
en fait ce que j'ai fait, je me demandait si c'était possible de rediriger les headers avec "$RACINE" et oui ça fonctionne. Merci pour ton aide.
j'ai bien pensé utiliser ta méthode, maiscomme la page ou on devait être redirigé contenait aussi des session_start, je ne sais pas si ça aurait fonctionné...

a+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Darshu Messages postés 303 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 avril 2008 64
26 juil. 2006 à 09:44
Oui tu peux avec header(), ça sert entre autres à ça. Quand au session_start() ce n'est pas du tout un problème, puis que justement il faut mettre session_start() dans toutes tes pages :)

Enfin si j'ai pu t'aider, tant mieux.
0