8796 sujets

Développement web côté serveur, CMS

bonjour, j'ai un petit soucis en php. le soucis est que le code que j'ai mis en place ne me permet pas de faire un accès a certaines pages qui devront être accessible seulement pour les personnes autorisées. au fait j'ai déja posté dans ce forum, le topic "etait acces a la base de donnée en php". il est résolu. j'ai ajouté session_start() et $_SESSION['login'] une fois que le login et le mot de passe étaient corrects pour sauvegarder en session le login et le mot de passe pour pouvoir les recuperer par la suite. j'ai 5 pages qui doivent etres accessible seulement avec la session qui lui correspond . pour chaque page j'ai fait :

<?php
session_start();
if( empty($_SESSION['login']))
// je donne acces a la page
else
header('location:index.html');
?>

sauf que ça ne marche pas comme je l'ai voulu. j'accede a chaque page meme si j'ai pas le login saisi.
le code est :

<?php 
// Initialisation ou récupération des variables 
$login = !empty($_POST['login']) ? trim($_POST['login']) : ''; 
$pwd = !empty($_POST['pwd']) ? trim($_POST['pwd']) : ''; 
 
$erreurs = array(); 
 
if($_SERVER['REQUEST_METHOD']=='POST') { 
    // login obligatoire 
    if(empty($login)) { 
        $erreurs[] = 'Le login est requis.'; 
    } 
    // password obligatoire 
    if(empty($pwd)) { 
        $erreurs[] = 'Le password est requis.'; 
    } 
    // pas d'erreur 
    if(empty($erreurs)) { 
        // Vérification du couple login / password 
        require 'connexion.php'; 
        $sql = sprintf("SELECT url FROM utilisateurs Natural Join roles WHERE login='%s' AND password='%s'", 
            mysql_real_escape_string($login), 
            mysql_real_escape_string($pwd)); 
        $result = mysql_query($sql) or die(mysql_error()); 
        if(mysql_num_rows($result) < 1) { 
            $erreurs[] = 'Login et/ou Password incorrect(s).'; 
        } else { 
       //c 'est ici que je fait $SESSION
            session_start();
            $_SESSION['pseudo']=$login;
            header('Location: '. mysql_result($result, 0) ); // acceder a la page correspondante 
        } 
    } 
} 
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Connexion</title> 
<style type="text/css" media="screen"> 
.alerte { 
    color: #FF0033; 
    font-weight: bold; 
} 
</style> 
</head> 
<body> 
<?php 
if(!empty($erreurs)) { 
    foreach($erreurs as $erreur) { 
        echo '<p class="alerte">'.$erreur."</p>\n"; 
    } 
} 
?> 
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post"> 
    <p> 
        <label for="login">Login : </label> 
        <input type="password" name="login" id="login" value="<?php echo htmlspecialchars($login); ?>" /> 
    </p> 
    <p> 
        <label for="pwd">Password : </label> 
        <input type="password" name="pwd" id="pwd" value="<?php echo htmlspecialchars($pwd); ?>" /> 
    </p> 
    <p> 
        <input type="submit" value="Se connecter" /> 
    </p> 
</form> 
</body> 
</html>

merci de m'aider.
Modifié par brainsplit (28 Sep 2010 - 12:53)
Déjà il y a un soucis. Tu testes un variable session "login" alors que tu créé un variable "pseudo" dans ton code de connexion. Donc déjà je ne vois pas comment ça peut marcher ^^

Ensuite je te conseil de faire un var_dump() de ta variable SESSION['login'] avant de la tester pour voir quelle est sa valeur et ainsi comprendre le comportement de ton code.
A savoir dans ton cas que isset() contrôle si la variable existe. Or si celle-ci est vide ou null la fonction renvoie true quand même. Il est donc peut-être judicieux de la remplacer par !empty(). Smiley cligne