Page 1 sur 1

Problème de redirection

Posté : 19 févr. 2007, 14:11
par Snipefire
Bonjour à tous,
Après plusieurs heures de recherche je reste au point mort.
Dans mon script qui permet au membre de se connecter (qui vérifie login etc). Il y a une redirection. Mais celle la ne se fait pas.

j'ai vérifié toutes les conditions, et elles sont bien acceptées. Le problème vient de la redirection qui ne se fait pas.

J'ai mis dans ma premiere include et avant tout HTml
ob_start();
ob_end_flush();.

Mais cela ne change rien.

Voici le code en question
<?php 
include("haut.php");
include("en_tete.php");
include("barre_menu.php");
include("menu.php");
 ?>
 
		<!–– VERIFICATION DE CONNEXION ––!>

		
<?php //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.
require("config.inc.php");
mysql_connect($host,$username,$password);
mysql_select_db($bdd_name);
//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 (!empty($_POST['pseudo']) && !empty($_POST['mot_passe']))
        {
                //Vérification du pseudo.
                $pseudo = htmlspecialchars($_POST['pseudo']);
                $mot_passe = htmlspecialchars($_POST['mot_passe']);
               
                //Requête comptant le nombre de pseudos $_POST['pseudo']
                $sql = mysql_query("SELECT COUNT(*) AS nb_pseudo FROM membres WHERE pseudo='".$pseudo."'");
               
                //Si le pseudo existe.
                if (mysql_result($sql,0,'nb_pseudo') == 1)
                {
                        //Vérification du mot de passe
                        //Information sur le compte du membre.
                        $sql_infos = mysql_query("SELECT id, mot_passe, confirmation FROM membres WHERE pseudo='".$pseudo."'");
                        $donnees = mysql_fetch_array($sql_infos);
                       
                        //Hashage du mot de passe.
                        $mot_passe_hash = md5($mot_passe);
                       
                        //Comparaison du mot de passe.
                        if ($mot_passe_hash == $donnees['mot_passe'])
                        {
                                //On vérifie que le compte est confirmé.
                                //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('pseudo', $pseudo, $expire);
                                            setcookie('mot_passe', $mot_passe_hash, $expire);
                                        }

                                      //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['pseudo'] = $pseudo; //Pseudo du membre.
									  echo $_SESSION['id'];
                                       
                                        //Redirection vers la page membre.
                                        header("location: proposer_news.php");
                                }
                                else
                                        echo 'Erreur : le compte n\'est pas confirmé !';
                        }
                        else
                                echo 'Erreur : le mot de passe est incorrect !';
                }
                else
                        echo 'Erreur : le pseudo n\'existe pas !';
        }
        else
                echo 'Erreur : veuillez remplir tous les champs !';
}

//Déconnection de la base de données.
mysql_close();
?>
A savoir le formulaire pour se connecter est dans le fichier menu.php et pointe vers index.


Merci d'avance !

Posté : 19 févr. 2007, 14:31
par Maitrepylos
Bonjour,

proposer_news.php est bien à la racine, sinon que retourne l'erreur?

Posté : 19 févr. 2007, 14:45
par Snipefire
proposer_news est dans le même dossier que index.php (page ou il y a ce code).

Sinon aucune erreur n'est retourné justement. La page index est juste rechargé.

Posté : 19 févr. 2007, 15:10
par Maitrepylos
As-tu essayé de remplacé le header par un echo pour voir si tu arrive là où il faut
//header("location: proposer_news.php");
echo  "je suis au bon endroit"; 

Posté : 19 févr. 2007, 15:19
par Ryle
Les header() comme les setcookie() doivent être appellés avant tout envoi de données au navigateur, ceci inclu du code html, des espaces ou des retours charriots... Or ici :
 ?> 
 
  
        <!–– VERIFICATION DE CONNEXION ––!> 

         
<?php
tu envois retour à la ligne, espaces et commentaire html au navigateur. Les headers ne pourront donc pas fonctionner après...

Essaye comme ceci :
<?php  
include("haut.php"); 
include("en_tete.php"); 
include("barre_menu.php"); 
include("menu.php"); 

// VERIFICATION DE CONNEXION
         
//Si la variable $_SESSION['logged'] n'existe pas on la créée. 
if (!isset($_SESSION['logged'])) $_SESSION['logged'] = false; 
...
Et assure toi qu'aucun des fichiers inclus ne renvoi d'espace ou de retour au navigateur (ie : les premiers caractères sont <?php, les derniers sont ?> et il n'y a ni print, ni echo, etc.)

Il y a donc de grandes chances pour que ta verif de connexion doive se faire avant l'inclusion de l'entête et du menu :)

Posté : 19 févr. 2007, 15:34
par Invité
Tout d'abord, merci de ta réponse.
Mais gràce à ob_start();
ob_end_flush();.

J'ai réussi à régler mon problème. Ta réponbse m'a permis de voir que avant le ob_start il y avait un commentaire ..
Maintenant ça marche !
Merci !

Posté : 19 févr. 2007, 17:04
par Ryle
Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton [Mettre Résolu] qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)

Posté : 19 févr. 2007, 18:08
par Snipy
Et voila, inscrit.