Page 1 sur 1

header (Location) non fonctionnel...

Posté : 31 mai 2008, 15:03
par chrislabricole
Bonjour,

Je suis en train de faire un espace membre et je ne vois pas pourquoi ce script ne marche pas :s
<?php
// Ouverture d'une session
session_start();

// Redirection à FALSE au cas ou...
$redirection = FALSE;

// Vérification des variables POST
if( !isset($_POST['password']) || !isset($_POST['date']) ) {
	// Si elles n'existent pas, on redirige vers l'accueil
	header('Location: ./index.php');
} else {
	// Inclusion du fichier de fonctions...
	include('./functions.php');
	// Connexion à la base de données
	connect_db();

	// protections des variables
	$year = mysql_real_escape_string(intval($_POST['year']));
	$date = mysql_real_escape_string($_POST['date']);
	$password = mysql_real_escape_string($_POST['password']);
	// Création de la requête
	$requete = mysql_query('SELECT * FROM tableau_mariages WHERE annee="'.$year.'" AND date_brute="'.$date.'" AND password="'.$password.'"') or die(mysql_error());
	
	// Condition pour savoir si le couple existe...
	if($donnees = mysql_fetch_array($requete)){
		// Si le couple existe on creer des variables à vérifier sur les pages à protéger...
		$_SESSION['date'] = $date;
		$_SESSION['year'] = $year;
		$_SESSION['password'] = $password;
		// On active la redirection
		$redirection = TRUE;
	} else {
		// Creation des variaables mais VIDES
		$_SESSION['date'] = '';
		$_SESSION['year'] = '';
		$_SESSION['password'] = '';
		// On enlève la redirection
		$redirection = FALSE;
	}

}

// Si c'est valide, on redirige vers la page protégé, si Non, on redirige vers l'index...
if( $redirection == TRUE ) {
	header('Location : ./gallery/');
} else {
	header('Location : ./index.php');
}
?>
En fait, que le mot de passe sois valide ou non, il redirige pas...

Alors, j'ai fais le fameux test du echo 'oui'; et echo 'non'; que j'ai mis dans ma condition (celle qui vérifie si le couple est bon...)
Et ça, sa marche... Il m'affiche "oui" quand c'est bon (et qu'il devrai me rediriger) et "non" quand c'est pas bon et que j'ai fais exprès de me "tromper" de mot de passe...

Voilà...
Merci à vous !
PS: j'ai aussi essayé de mettre l'opérateur === au lieu de ==, dans la toute dernière condition, mais ça ne change rien...
d'ailleurs, j'ai toujours pas compris se que ça changé réellement :oops: :P

Posté : 31 mai 2008, 15:51
par Cyrano
On va simplifier un peu :
<?php
// Ouverture d'une session
session_start();

// Redirection à FALSE au cas ou...
$redirection = './index.php';

// Vérification des variables POST
if(isset($_POST['password']) && isset($_POST['date']) ) 
{
    // Inclusion du fichier de fonctions...
    include('./functions.php');
    // Connexion à la base de données
    connect_db();

    // protections des variables
    $year     = mysql_real_escape_string(intval($_POST['year']));
    $date     = mysql_real_escape_string($_POST['date']);
    $password = mysql_real_escape_string($_POST['password']);
    // Création de la requête
    $sql = "SELECT * ".
           "FROM tableau_mariages ".
           "WHERE annee='".$year."' ".
           "AND date_brute='".$date."' ".
           "AND password='".$password."'";
    // Vérification de la requête pour débogage : (à supprimer une fois que ça marche bien sur)
    echo('<pre style="font-size: 11px; text-align: left;">Requête SQL' . "\n");
    print_r($sql);
    echo("</pre>\n");
    $requete = mysql_query($sql) or die(mysql_error());

    // Condition pour savoir si le couple existe...
    if($donnees = mysql_fetch_array($requete))
    {
        // Si le couple existe on creer des variables à vérifier sur les pages à protéger...
        $_SESSION['date']     = $date;
        $_SESSION['year']     = $year;
        $_SESSION['password'] = $password;
        // On active la redirection
        $redirection = './gallery/';
    } 
    else 
    {
        // Creation des variaables mais VIDES
        $_SESSION['date'] = '';
        $_SESSION['year'] = '';
        $_SESSION['password'] = '';
    }
}
// Vérification de débogage :
echo('<pre style="font-size: 11px; text-align: left;">Page de redirection :' . "\n");
print_r($redirection);
echo("</pre>\n");

// Si c'est valide, on redirige vers la page protégé, si Non, on redirige vers l'index...
// On commente la ligne à cause des print_r qui précèdent, sinon on aura une erreur fatale "header allready sent..."
// header('Location : '. $redirection);
?>
Teste ça et si ça marche, essaye de comprendre pourquoi ;)

Posté : 31 mai 2008, 17:10
par chrislabricole
Bizarre !

Avec un mauvais mot de passe :
Requête SQL
SELECT * FROM tableau_mariages WHERE annee='2007' AND date_brute='sam_10_mars' AND password='gbgvbvb'

Page de redirection :
./index.php
un bon :
Requête SQL
SELECT * FROM tableau_mariages WHERE annee='2007' AND date_brute='sam_10_mars' AND password='vapi'

Page de redirection :
./gallery/
Jusque là ça marche comme prévu...
Et quand je commente tes echo() et print_r(), et que je décommente le header à la fin, je reste sans redirection sur la page blanche...
La requête SQL se porte bien a parement...

Je vois pas se qui cloche là :roll: :roll: :roll:

Merci à toi !

Posté : 31 mai 2008, 17:56
par Cyrano
Un détail qui m'avait échappé : vire l'espace entre "Location" et ":".

Posté : 31 mai 2008, 18:00
par chrislabricole
Ah !!!! s'été donc ce fichu espace qui faisait tout foiré !
Ahhh ben pas cool PHP ^^

Merci ! :D