2014-10-06 62 views
0

我想使用Apache和MySQL XAMPP數據庫爲我的論壇構建登錄頁面,但它多次返回echo字符串,我知道它會遍歷數據庫中的所有行,檢查它是否不管它是否爲真,它將返回爲「無效的用戶名或密碼!」直到找到正確的登錄信息,然後返回「歡迎」可能。PHP返回多個字符串

while($rows = mysql_fetch_row($result)) { 
    //echo $rows; 
    if($name==$rows[1]) { 
     if($pass==$rows[2]) { 
      echo "Welcome!"; 
     } 
    } 
    else if ($name!==$rows[1]) { 
     echo "Invalid Username or Password!"; 
     if($pass!==$rows[2]) { 
      echo "Invalid Username or Password!"; 
     } 
    } 
    $row = $row + 1; 
} 

這裏是我的輸出:!!!!

無效的用戶名或密碼無效的用戶名或密碼無效 用戶名或密碼無效的用戶名或口令歡迎!

它是如何完成的,因此它只返回錯誤和正確的字符串?

+0

$ row是一個整數類型,但您將其用作數組。編輯:代碼的最後一行$ rows = $ row + 1.「$ row」永遠不會變成「$ rows」。所以它應該是$ rows = $ rows +1 – lukescomputers 2014-10-06 11:09:13

+0

不要使用mysql庫使用mysqli,因爲mysql已折舊。 http://php.net/manual/en/book.mysqli.php – 2014-10-06 11:50:10

回答

1

保持外循環的代碼返回一行

$rows = mysql_fetch_row($result); 
    //echo $rows; 
    if($name==$rows[1]) { 
     if($pass==$rows[2]) { 
      echo "Welcome!"; 
     } 
    } 
    else if ($name!==$rows[1]) { 
     echo "Invalid Username or Password!"; 
     if($pass!==$rows[2]) { 
      echo "Invalid Username or Password!"; 
     } 
    } 
3

我要對此從不同的角度。首先,mysql_*擴展在PHP 5.5.0以下版本中已棄用,因此不鼓勵使用。

接下來的事情是我認爲你對此有錯誤的方式。爲什麼要循環訪問整個表以獲得憑據,只需檢查是否存在具有該用戶名和密碼的記錄?這是非常低效的。

$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? && password = ?"); 
$stmt->bind_param("ss", $name, $pass); 
$stmt->execute(); 
$stmt->store_result(); 
$stmt->close(); 

// we found a record so the username and password match 
if ($stmt->num_rows > 0) { 
    echo 'Welcome!'; 
// no records so either the username or password doesn't match 
} else { 
    echo 'Invalid Username or Password!'; 
}