Problème de redirection

Snipefire
Invité n'ayant pas de compte PHPfrance

19 févr. 2007, 14:11

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 !

Mammouth du PHP | 1029 Messages

19 févr. 2007, 14:31

Bonjour,

proposer_news.php est bien à la racine, sinon que retourne l'erreur?
L'expérience est la somme de toutes nos erreurs.

Snipefire
Invité n'ayant pas de compte PHPfrance

19 févr. 2007, 14:45

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é.

Mammouth du PHP | 1029 Messages

19 févr. 2007, 15:10

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"; 
L'expérience est la somme de toutes nos erreurs.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 févr. 2007, 15:19

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

19 févr. 2007, 15:34

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 !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 févr. 2007, 17:04

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 !!! ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 206 Messages

19 févr. 2007, 18:08

Et voila, inscrit.