2011-03-17 42 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。它只會返回一個空的結果集。