Проблема с пустыми отправленными значениями и возвращенным MySQL запросом - PullRequest
0 голосов
/ 17 марта 2011
<?php
$link = mysql_connect('127.0.0.1', 'ilhan', 'password123');
if(!$link)
    {
        die('Could not connect: ' . mysql_error());
    }
mysql_select_db("metu", $link);
mysql_set_charset('utf8',$link);

if(isset($_POST["email"])) // AND strlen($_POST["email"])>1 solves the problem
//  but I didn't get why the page is redirected...
    {
        $email = mysql_real_escape_string($_POST["email"]);
        $password = mysql_real_escape_string($_POST["password"]);

        $result = mysql_query("SELECT password, id FROM users WHERE email = '$email'");

        if (!$result)
            {
                die('Invalid query: ' . mysql_error());
            }

        $row = mysql_fetch_assoc($result);

        if($row['password'] == $password) 
            {
                $_SESSION['valid_user'] = $row['id'];
                mysql_close($link);
                header("Location: http://www.example.com");
            }
        else $login = false;


        mysql_close($link);
    }
else $login = false;
?>

Считаете ли вы, что страница будет перенаправлена, если пользователь отправит пустой адрес электронной почты и пустой пароль? Это не должно, но страница перенаправлена. Это почему? Ошибка?

Ответы [ 3 ]

2 голосов
/ 17 марта 2011

Сначала я пропустил проблему. вот оно:

if($row['password'] == $password) 

empty $row['password'] равно пустому $password. оценивается в true

вот что я бы сделал

<?php
include 'db.php';    
if(isset($_POST["email"]))
{
    $sql = "SELECT id FROM users WHERE email='%s' AND password='%s'";
    $id  = dbGetOne($sql,$_POST["email"],MD5($_POST["email"].$_POST["password"]));
    if($id) 
    {
        $_SESSION['valid_user'] = $row['id'];
        header("Location: http://www.example.com");
        exit;
    }
}
0 голосов
/ 17 марта 2011

Используйте функцию mysql_num_rows, чтобы найти количество возвращаемых строк.mysql_query вернет FALSE при ошибке, но в вашем случае ваш SQL по-прежнему является действительным SQL, если адрес электронной почты пуст.Он просто вернет пустой набор результатов.

0 голосов
/ 17 марта 2011
  if(isset($_POST["email"])) 
 // AND strlen($_POST["email"])>1 solves the problem 
 // but I didn't get why the page is redirected...

если $ _POST ["email"] - пустая строка -> isset вернет true

РЕДАКТИРОВАТЬ: добавьте if ( isset($_POST["email"]) && isset ($_POST["password"]) ), чтобы избежать пустых паролей и убедитесь, что $row не пусто, когда `if ($ row ['password'] == $ password) '

...