Probleme dans un espace membre

Eléphanteau du PHP | 45 Messages

04 sept. 2005, 12:40

bonjour,

j'ai crée un espace membre, si le login + pass sont correct l'utilisateur pas se loguer sinon il ne peut pas accéder a la page, le probleme c'est que je peux pas me loguer dans les 2 cas, toujours me donne le message d'echec, voila le code:
<?php

$host = 'localhost'; 
$user = 'root'; 
$pass = ''; 
$db_name = 'test'; 
$table_name = 'admin'; 

if(isset($_POST['date'])) $date = $_POST['date']; 
else $date = ''; 
if(isset($_POST['hour'])) $hour = $_POST['hour']; 
else $hour = ''; 
if(isset($_POST['login'])) $login = $_POST['login']; 
else $login = ''; 
if(isset($_POST['passwd'])) $passwd = $_POST['passwd']; 
else $passwd = ''; 

$login = strtolower(trim(htmlentities($_POST['login'], ENT_QUOTES))); 
$passwd = strtolower(trim(htmlentities($_POST['passwd'], ENT_QUOTES))); 

if ($login == ''){ //nom du champ1 
echo("<font face=verdana size=2>Username field is empty</font><br>"); //message qui s'affiche si le visiteur n'a pas rempli ce champ 
echo("<a href=\"javascript:history.back()\" class=navfont> Return </a>"); 
} 

elseif ($passwd == ''){ //nom du champ1 
echo("<font face=verdana size=2>Password field is empty</font><br>"); //message qui s'affiche si le visiteur n'a pas rempli ce champ 
echo("<a href=\"javascript:history.back()\" class=navfont> Return </a>"); 
} 
else 
{ 
$connection = mysql_connect($host, $user, $pass) or die(mysql_error()); 
$db = mysql_select_db($db_name, $connection) or die(mysql_error()); 
$sql = 'SELECT * FROM admin WHERE login = "$login" AND passwd = "$passwd"'; 
$result = mysql_query($sql,$connection) or die(mysql_error()); 
//get the number of rows in the result set 
$num = mysql_num_rows($result); 
//print a message or redirect elsewhere, based on result 
if ($num != 0) { 
$_SESSION['login'] = $login; 
$_SESSION['passwd'] = $passwd; 
echo 'Welcome'.$login; 
} 
else 
{ 
echo 'Go Out'; 
} 
//if (!isset($_SESSION['login'])) { 
  //echo 'Vous n\'êtes pas autoriser à acceder à cette zone'; 
//} 
} 

?> 


Eléphanteau du PHP | 28 Messages

04 sept. 2005, 13:41

Bonjour,

le problème (ou en tout cas, un problème) se situe là :
$sql = 'SELECT * FROM admin WHERE login = "$login" AND passwd = "$passwd"';
$login et $password sont "fondus" ici dans la chaîne de caractères. Autrement dit, un echo de $sql donnera :

Code : Tout sélectionner

SELECT * FROM admin WHERE login = "$login" AND passwd = "$passwd"
Cela se produit car tu utilises des guillemets simples, avec lesquels il faut utiliser la concaténation :
$sql = 'SELECT * FROM admin WHERE login = "'.$login.'" AND passwd = "'.$passwd.'"';
Ou utiliser des guillemets doubles :
$sql = "SELECT * FROM admin WHERE login = '$login' AND passwd = '$passwd";
D'une manière générale, pour controler tes données, fais un "echo" de tes requêtes...

Mammouth du PHP | 19672 Messages

04 sept. 2005, 13:48

Tiens, quelques modifications et une petite optimisation en prime :
<?php
$host = 'localhost';
$user = 'root';
$pass = '';
$db_name = 'test';
$table_name = 'admin';

$date   = (isset($_POST['date']))   ? $_POST['date']   : '';
$hour   = (isset($_POST['hour']))   ? $_POST['hour']   : '';
$login  = (isset($_POST['login']))  ? $_POST['login']  : '';
$passwd = (isset($_POST['passwd'])) ? $_POST['passwd'] : '';

$login = strtolower(trim(htmlentities($login, ENT_QUOTES)));
$passwd = strtolower(trim(htmlentities($passwd, ENT_QUOTES)));

if ($login == '')
{
    //nom du champ1
    //message qui s'affiche si le visiteur n'a pas rempli ce champ
?>
<font face=verdana size=2>Username field is empty</font><br>
<a href=\"javascript:history.back()\" class=navfont> Return </a>
<?php
}

elseif ($passwd == '')
{
    //nom du champ1
    //message qui s'affiche si le visiteur n'a pas rempli ce champ
?>
<font face=verdana size=2>Password field is empty</font><br>
<a href=\"javascript:history.back()\" class=navfont> Return </a>
<?php
}
else
{
    $connection = mysql_connect($host, $user, $pass) or die(mysql_error());
    $db = mysql_select_db($db_name, $connection) or die(mysql_error());
    $sql = "SELECT login FROM ". $table_name ." WHERE passwd = '". $passwd ."'";
    $result = mysql_query($sql,$connection) or die(mysql_error());
    //get the number of rows in the result set
    $num = mysql_num_rows($result);
    //print a message or redirect elsewhere, based on result
    if ($num != 0)
    {
        while($ligne = mysql_fetch_assoc($result))
        {
            if($ligne['login'] == $login)
            {
                $_SESSION['login'] = $login;
                $_SESSION['passwd'] = $passwd;
            }
        }
        echo 'Welcome'.$login;
    }
    else
    {
        echo 'Go Out';
    }
    //if (!isset($_SESSION['login'])) {
    //echo 'Vous n\'êtes pas autorisé à accéder à cette zone';
    //}
}
?>
Mais il reste une question : les mots de passe ne sont pas cryptés ou hachés dans ta base ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: