每次运行此代码时,我都会使用php.But编写注册表单和登录表单的代码,其中写的是无效的用户名,或者它说您的帐户未经管理员yet.Can批准,请告诉我如何使用户在登录时获得管理员的批准成为可能。我希望我的用户得到admin.Notice的批准,管理员必须与user.Here以相同的形式登录,这就是我的注册表单:
这是我的登录表格:
<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>
代码正常工作!下面是我创建的phpmyadmin数据库:

发布于 2016-01-16 19:40:00
如果我理解正确,那么您可以使用“批准”列作为0|1布尔(int)标志。
然后将其添加到WHERE子句中。
(NOTA:它必须首先在插入中创建才能工作)。
即:
$query = "INSERT INTO login
(firstname, lastname, username, password, cv, email, approval)
VALUES ('$firstname', '$lastname', '$username','$password','$cv','$email', 0)"; 然后,对于SELECT:(sidenote: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()和错误报告中。
关于SQL注入和密码存储的注释.
您现在的代码对SQL injection开放。使用with prepared statements或PDO和prepared statements。
密码
我还注意到,您可能正在以纯文本存储密码。这是不建议的。
使用下列之一:
crypt()bcrypt()scrypt()password_hash()函数。其他链接:
关于列长的重要侧边:
如果您确实决定使用password_hash()、兼容性包或密码,那么重要的是要注意,如果您当前密码列的长度小于60,则需要将其更改为此(或更高)。手册显示长度为255。
您将需要更改列的长度,并重新使用新的散列以使其生效。否则,MySQL将悄悄地失败。
https://stackoverflow.com/questions/34830929
复制相似问题