我正在创建一个连接到我的数据库的登录表单(全部通过 localhost、mysql、phpmyadmin)。 我在登录时遇到问题。
当我登录时,它会要求我输入用户名和密码,如果我在数据库中提供用户名和任何随 secret 码 - 它仍然会让我登录。但是,如果我输入任何随机用户名,它就不会登录。
我通过我的 php 上网查看过,我很挣扎! (我已经看了好几个小时了,我的眼睛都瞪大了。
感谢任何帮助。 谢谢。
这是我的login.php代码:
<?php
if ($username && $userid){
echo "You are already logged in as <b>$username</b>. <a href='admin.php'> Click here </a>";
} else {
$form= "<form action='login.php' method='POST'>
<table>
<tr>
<td> Username: </td>
<td><input type='text' name='user' /></td>
</tr>
<tr>
<td> Password: </td>
<td><input type='password' name='password' /></td>
</tr>
<tr>
<td> </td>
<td><input type='submit' name='loginbtn' value='login' /></td>
</tr>
</table>
</form>";
if ($_POST['loginbtn']) {
$user= $_POST['user'];
$password = $_POST['password'];
if ($user) {
if ($password) {
require ("connect.php");
$password= ('password');
echo "$password";
$query = mysql_query("SELECT * FROM users WHERE username='$user'");
$numrows = mysql_num_rows($query);
if ($numrows ==1) {
$row= mysql_fetch_assoc($query);
$dbid = $row['id'];
$dbuser = $row['username'];
$dbpass = $row['password'];
$dbactive = $row['active'];
if ($password == $dbpass) {
if ($dbactive == 1) {
$_SESSION['userid']= $dbid;
$_SESSION['username'] = $dbuser;
echo "You have been logged in as <i> $dbuser </i>. Click <a href='admin.php'> here </a> to go to the members page.";
} else {
echo "You must activate your account to login. $form";
}
} else {
echo "You did not enter the correct password. $form";
}
} else {
echo "the username you entered was not found. $form";
}
mysql_close();
} else {
echo "You must enter your password. $form";
}
} else {
echo "You must enter your username. $form";
}
} else {
echo $form;
}
?>
最佳答案
问题是,您可以在密码字段中写入任何内容,稍后,您将使用以下代码对其进行硬编码:
$password = ('password');
因此,如果您的实际密码是password
,那么您在字段中写入的内容并不重要。
注释
不要使用 mysql_* 函数,因为它们已被弃用。请改用 mysqli 或 PDO。
让我们转义来自外部的变量,或者使用准备好的语句来避免 SQL 注入(inject)。
关于PHP 登录表单可以使用任何密码,但不能使用用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27906064/