PHP mySQL检查用户名和密码是否在数据库中

时间:2014-10-06 18:33:16

标签: php mysql database

我希望我的代码检查我的数据库中是否存在用户名和密码。 它确实工作硬编码,但我想用数据库来做。现在这就是我所拥有的:

if(isset($_POST["name"], $_POST["password"])) 
        {     

            $name = $_POST["name"]; 
            $password = $_POST["password"]; 

            $result1 = mysql_query("SELECT password FROM Users WHERE username = '".$name."'");
            $result2 = mysql_query("SELECT username FROM Users WHERE password = '".$password."'");

            if($name == $result2 && $password == $result1) 
            { 
                $_SESSION["logged_in"] = true; 
                $_SESSION["naam"] = $name; 
            }
            else
            {
                echo'The username or password are incorrect!';
            }
    } 

我认为问题出现在result1/2部分,因为当我在我的网站中使用正确的用户名和密码时,它会给出不正确的消息。

哦,是的,查询也有效,在PHPmyAdmin中尝试了但是没有$name部分,我将其替换为用户名

4 个答案:

答案 0 :(得分:6)

您可以使用mysql_num_rows()并结合您的查询 - 查看脚注

if(isset($_POST["name"], $_POST["password"])) 
    {     

        $name = $_POST["name"]; 
        $password = $_POST["password"]; 

        $result1 = mysql_query("SELECT username, password FROM Users WHERE username = '".$name."' AND  password = '".$password."'");

        if(mysql_num_rows($result1) > 0 )
        { 
            $_SESSION["logged_in"] = true; 
            $_SESSION["naam"] = $name; 
        }
        else
        {
            echo 'The username or password are incorrect!';
        }
}

为了使您现有的代码更安全,请使用:

$name = stripslashes($_POST["name"]); 
$name = mysql_real_escape_string($_POST["name"]);

$password = stripslashes$_POST["password"]); 
$password = mysql_real_escape_string($_POST["password"]); 

但请查看下面有关使用预准备语句和密码哈希的链接。


<强> 脚注:

您目前的代码向SQL injection开放。使用prepared statementsPDO with prepared statements。请访问这些链接以获取更多信息。

我注意到您可能以纯文本格式存储密码。如果是这种情况,则非常气馁。

如果你是,这是一个LIVE网站,你最终会被黑客攻击。

我建议您使用CRYPT_BLOWFISH或PHP 5.5的password_hash()函数。对于PHP&lt; 5.5使用password_hash() compatibility pack


mysql_*函数弃用通知:

http://www.php.net/manual/en/intro.mysql.php

从PHP 5.5.0开始,不推荐使用此扩展,不建议用于编写新代码,因为将来会删除它。相反,应使用mysqliPDO_MySQL扩展名。在选择MySQL API时,另请参阅MySQL API Overview以获得进一步的帮助。

这些功能允许您访问MySQL数据库服务器。有关MySQL的更多信息,请访问»http://www.mysql.com/

可以在»http://dev.mysql.com/doc/找到MySQL的文档。


修改以帮助OP(请查看我提供的有关密码哈希的链接)。

尝试替换

        if(mysql_num_rows($result1) > 0 )
        { 
            $_SESSION["logged_in"] = true; 
            $_SESSION["naam"] = $name; 
        }
        else
        {
            echo 'The username or password are incorrect!';
        }

使用:

while($row=mysql_fetch_assoc($result1))
{
$check_username=$row['username'];
$check_password=$row['password'];
}

if($username == $check_username && $password == $check_password){
echo "Matches.";
}

else{
echo "No match found.";
}

答案 1 :(得分:1)

尝试一下:(我曾经使用过面向对象的mysql,如果您想使用其他版本的话)

if(isset($ _ POST [“ name”],$ _POST [“ password”])){

        $name = $_POST["name"]; 
        $password = $_POST["password"];


        $select1 = "SELECT password FROM USERS WHERE username = '".$name."'";

        $result1=$conn->query($select1);
        $row1=$result1->fetch_assoc();

        $select2 = "SELECT username FROM USERS WHERE password = '".$password."'";

        $result2=$conn->query($select2);
        $row2=$result2->fetch_assoc();


        if($name == $row2["username"] && $password == $row1["password"]) 
        { 
             $_SESSION["logged_in"] = true; 
            $_SESSION["naam"] = $name; 

        }
        else
        {
            echo'The username or password are incorrect!';
        }

答案 2 :(得分:-1)

$name$password可能是字符串。如果您的查询正在进行并正确完成,它们将作为对象返回。

为了实现这一点,您只需从$name ==条件中删除$password ==if()

为简单起见,您还可以合并这些查询。

<?php

$result = mysql_query("SELECT username, password FROM Users WHERE username = '".$name."' && password = '".$password."'");

if ($result && mysql_num_rows($result) > 0) {
    // Login
} else {
    // Failed!
}

如果你不在乎知道哪一个失败了,那将会完成同样的事情。

答案 3 :(得分:-1)

 error_reporting(E_ALL);  
ini_set('display_errors', 1);
session_start();
if(count($_POST)>0) 
{
    include'includePhp.php';
    $sql="SELECT * FROM admin WHERE username='" . $_POST['username'] . "' AND password = '". $_POST['password']."'";
    $result = $con->query($sql);
if ($result->num_rows > 0) 
    {
  while($row = $result->fetch_assoc()) 
            {
        if(!empty($row) && !empty($row['username']) AND !empty($row['password']))
            {
                $_SESSION['username'] = $row['username'];
                echo "SUCCESSFULLY LOGIN ";
                header("Location: inDhanush.php");
            }
        else 
        {
        echo "Try again";
        }
    }
}

}