加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 检查数据库上的用户名和密码(包含脚本)

发布时间:2020-12-13 13:20:09 所属栏目:PHP教程 来源:网络整理
导读:我发布了我的问题 here,在我编辑帖子之前它已经关闭,因为这不是一个真正的问题! 我有一个这样的登录表单: html head titlePassword Checking Script/title /head body form action="check_user-pass.php" method="POST" h3Please Login/h3 User Name: inpu
我发布了我的问题 here,在我编辑帖子之前它已经关闭,因为这不是一个真正的问题!

我有一个这样的登录表单:

<html>
  <head>
    <title>Password Checking Script</title>
  </head>
  <body>
    <form action="check_user-pass.php" method="POST">
      <h3>Please Login</h3>

      User Name: <input type="text" name="user_name"><br>
      Password: <input type="password" name="password">

      <input type="submit" name="submit" value="Login!">
    </form>
  </body>
</html>

如您所见,此表单通过check_user-pass.php对用户进行身份验证.
它在我的数据库中查找这些凭据;如果它们存在,则返回OK,否则返回NO值.

所以我的问题是:我应该在check_user-pass.php中包含哪些代码?
我试图添加更多代码,但也不能这样做!我目前的代码是:

<?php
ob_start();
$host=""; // Host name 
$username=""; // Mysql username 
$password=""; // Mysql password 
$db_name=""; // Database name 
$tbl_name=""; // Table name

// Connect to server and select databse.
mysql_connect("$host","$username","$password") or die(mysql_error());
echo "Connected to MySQL<br />";
mysql_select_db("$db_name") or die(mysql_error());
echo "Connected to Database<br />";
// Check $username and $password 
/*
if(empty($_POST['username']))
{
    echo "UserName/Password is empty!";
    return false;
}
if(empty($_POST['password']))
{
    echo "Password is empty!";
    return false;
}
*/

// Define $username and $password 
$username=$_POST['username']; 
$password=md5($_POST['pass']);


// To protect MySQL injection (more detail about MySQL injection)
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);

$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $username and $password,table row must be 1 row
if ($count==1) {
    echo "Success! $count";
} else {
    echo "Unsuccessful! $count";
}

ob_end_flush();
?>
您的表单中的名称是user_name,但在您的脚本中,您需要查找用户名
$username=$_POST['username'];

应该

$username=$_POST['user_name'];

编辑:
如果在将密码放入数据库之前使用crypt加密密码,请尝试使用此密码

$sql="SELECT * FROM $tbl_name WHERE username='$username'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $username and $password,table row must be 1 row
if($count==1){
    $row = mysql_fetch_assoc($result);
    if (crypt($password,$row['password']) == $row['password']){
        session_register("username");
        session_register("password"); 
        echo "Login Successful";
        return true;
    }
    else {
        echo "Wrong Username or Password";
        return false;
    }
}
else{
    echo "Wrong Username or Password";
    return false;
}

编辑:
myBB似乎使用了大量的md5哈希密码,试试这个

$sql="SELECT * FROM $tbl_name WHERE username='$username'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $username and $password,table row must be 1 row
if($count==1){
    $row = mysql_fetch_assoc($result);
    if (md5(md5($row['salt']).md5($password)) == $row['password']){
        session_register("username");
        session_register("password"); 
        echo "Login Successful";
        return true;
    }
    else {
        echo "Wrong Username or Password";
        return false;
    }
}
else{
    echo "Wrong Username or Password";
    return false;
}

此外,散列是一种方法,因此您无法获取数据库中已有的密码,您只需让用户更改/更新其密码即可.如果以上工作,那么你就不必关闭加密,一切都应该没问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读