header (Location) non fonctionnel...

Mammouth du PHP | 959 Messages

31 mai 2008, 15:03

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

Mammouth du PHP | 19672 Messages

31 mai 2008, 15:51

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 ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 959 Messages

31 mai 2008, 17:10

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 !

Mammouth du PHP | 19672 Messages

31 mai 2008, 17:56

Un détail qui m'avait échappé : vire l'espace entre "Location" et ":".
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 959 Messages

31 mai 2008, 18:00

Ah !!!! s'été donc ce fichu espace qui faisait tout foiré !
Ahhh ben pas cool PHP ^^

Merci ! :D