我使用php编写了注册表单和登录表单的代码。但是每次运行此代码时,如果用户名无效,或者表示您的帐户未被批准,则表示该用户名无效。可以请某人使用告诉我如何在用户登录时为用户提供管理员批准。我希望我的用户得到管理员的批准。通知管理员必须以与用户相同的形式登录。这是我的注册表:< / p>
这是我的登录表单:
<html >
<head>
<title></title>
</head>
<body>
<?php
print ("<form action='logincontroltest.php' method='post'>
<p>Username
<input type='text' name='username' />
</p>
<p>Password
<input type='password' name='password' >
<p/>
<input type='submit' value='Log In'/>
</form>");
if( !($database=mysql_connect("localhost","root",""))||!(mysql_select_db("st_login",$database)) )
print("Could not connect");
if(isset($_POST['username'])&&isset($_POST['password']) )
{
$username=$_POST['username'];
$password=$_POST['password'];
if ( !empty($username) &&!empty($password) )
{
$query = " SELECT * FROM `login` WHERE `username`='$username' AND `password`='$password' ";
if($result=mysql_query($query,$database))
{
$user=mysql_fetch_assoc($result);
if($user==false){
echo "invalid username";
}
elseif($user['admin']==1) {
echo"admin is logged in";
header("Location: admin.php");
}
elseif($user['approval']==1) {
$_POST['user']=$user['username'];
echo "user is logged in";
header("Location: faqja2.php");
}
else{
echo "Your account is'nt approved by admin yet";
}
}
die (mysql_error());
}
else echo "Fill in all blank fields";
}
?>
</body>
</html>
答案 0 :(得分:1)
如果我理解正确,那么您可以使用&#34;批准&#34; column作为0|1
boolean(int)标志。
然后将其添加到WHERE
子句中
( NOTA:必须首先在INSERT中创建它才可以工作)。
即:
$query = "INSERT INTO login
(firstname, lastname, username, password, cv, email, approval)
VALUES ('$firstname', '$lastname', '$username','$password','$cv','$email', 0)";
然后,对于您的SELECT :(旁注:1
表示已批准,因此分别设置您的消息)。
$query = "SELECT *
FROM `login` WHERE `username`='$username'
AND `password`='$password' AND `approval` = 1"; // or 0, depending on the query.
$result = mysql_query($query, $database);
// You may have to use the following instead
// if your present method of checking does not work
// which has been commented out
/*
if(mysql_num_rows($result) > 0){
echo "Your account has been approved.";
}
else{
echo "Your account isn't approved by an admin yet.";
}
*/
if($result=mysql_query($query, $database)){...}
同时检查查询错误。
将or die(mysql_error())
添加到mysql_query()
并报告错误。
您可以将代码的其他部分添加到我提供的内容中。
我建议你看一下这个答案:https://stackoverflow.com/a/29778421/
有关SQL注入和密码存储的说明。
您目前的代码向SQL injection开放。使用mysqli_*
with prepared statements或PDO与prepared statements。
<强>密码强>
我还注意到您可能以纯文本格式存储密码。不建议这样做。
使用以下其中一项:
crypt()
bcrypt()
scrypt()
password_hash()
功能。其他链接:
关于列长的重要说明:
如果您决定使用password_hash()
,兼容包或加密,请务必注意,如果您当前的密码列长度低于60,则需要改为(或更高)。手册建议长度为255。
您需要更改列的长度并重新开始使用新哈希才能使其生效。否则,MySQL将无声地失败。