2014-10-06 60 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!'; 
}