登录 php 脚本


Login php script

我这里有一个登录脚本。我从中删除了数据库用户名/密码以将其发布在堆栈上。我的问题是,每次我写用户名和密码(即使它们是正确的)时,它都会告诉我密码和用户名无效。我显然使用了选择 *from .....然后放一个变量$rows来计算受影响的行,但它的值每次都是0,我无法登录。

<h1>Log in</h1>
<form action="" method="post">
    Username:<input type="text" name="username" placeholder="username" value=""/> <br />
    Password:<input type="password" name="password" placeholder="*******" value=""/> <br />
    <input type="submit" name="submit" value="Log In" />
             <br />

</form>


    <?php
    $error=''; 
    if (isset($_POST['submit'])) {
    if (empty($_POST['username']) || empty($_POST['password'])) {
    $error = "Username or Password is empty";
    echo $error;
    }
    else
    {
    $username=$_POST['username'];
    $password=$_POST['password'];
    $connection = mysql_connect("mysql.hostinger.ro", "_patr0", "  ");
    $username = stripslashes($username);
    $password = stripslashes($password);
    $username = mysql_real_escape_string($username);
    $password = mysql_real_escape_string($password);
    $db = mysql_select_db("_ppl", $connection);

    $query = mysql_query("select * from people where pw='$password' AND username='$username'", $connection);

    $rows=mysql_num_rows($query);
    if ($rows==1) {

    /*$_SESSION['login_user']=$username;*/ // Initializing Session

    echo 'You are logged in';
    } else {
    $error = "Username or Password is invalid";
    }
    echo $error;
    mysql_close($connection); // Closing Connection
    }
    }
    ?>

是的,我确定。大卫一世使用aes_encrypt("$password","文本")存储密码

这可能是您的问题,当您在此处运行mysql查询时,您正在尝试匹配用户输入中的纯文本密码,但将它们存储为加密字符串。您需要在 SQL 查询中加密密码。

查看您的代码(同时跳过不重要的部分):

$username=$_POST['username'];
$password=$_POST['password'];
...
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
...
$query = mysql_query("select * from people where pw='$password' AND username='$username'", $connection);

您实际要做的是将用户名和密码转换为纯文本格式的格式,并将其转换为一种格式,如果将奇数格式字符用于纯文本,则数据库不会损坏,然后将其与数据库中的值进行比较。

在做任何其他事情之前,运行phpmyadmin,mysql命令行服务器或实际上可以拉出人员表内容的东西。

然后输入此 sql 查询:

select * from people;

或者选择显示人员表中的所有记录选项(如果数据库管理器中存在)。

上下滚动屏幕,并在用户名和密码字段中查找项目以查看它们是什么。

如果它看起来像乱码,那么表中放置的信息很可能是编码的。

更改数据库数据,使用户名和密码为纯文本,并在表单上的文本框中使用相同的相应值,以确保一切都以纯文本样式工作。

一旦工作正常,则需要为表中的数据创建某种编码。

试试这个(并假设 $imported_username 和 $imported_password 具有数据库友好格式的用户名和密码字段中的值(就像您在代码顶部附近所做的那样)):

在注册脚本中插入以下语句以创建记录:

$user=$imported_username;
$pass=md5($imported_password);
$query = mysql_query("insert into people (username,pw) values('$user','$pass')", $connection);

然后在登录处理脚本中,更改:

$query = mysql_query("select * from people where pw='$password' AND username='$username'", $connection);

自:

$query = mysql_query("select * from people where pw='".md5($password)."' AND username='$username'", $connection);

这样,您将用户名存储在数据库中,并对密码进行编码。