2011-03-17 84 views
0
<?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; 
?> 

如果用户提交空白电子邮件和空密码,您认为该页面将被重定向吗?它不应该,但页面被重定向。这是为什么?错误?空白提交的值和返回的mysql查询的问题

回答

2

我首先忽略了这个问题。 那就是:

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

$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

我知道空白不是“未设置”,但MySQL返回密码是什么?和我的表中的空白对应行是什么,以便它返回空白密码?它没有任何意义。 – ilhan 2011-03-17 12:08:58

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

如果$ _POST [ “电子邮件”]为空字符串 - > isset将返回true

编辑:添加if (isset($_POST["email"]) && isset ($_POST["password"]))以避免空的密码,并确保$row当'if($ row ['password'] == $ password)不为空''

+0

我知道,然后它不应该通过if($ row ['password'] == $ password)。重定向在其中。 – ilhan 2011-03-17 12:11:17

0

使用mysql_num_rows函数来查找大量的行返回。 mysql_query将在错误时返回FALSE,但在您的情况下,如果电子邮件为空白,您的SQL仍然是有效的SQL。它只会返回一个空的结果集。