首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用php登录用户时请求管理权限

问在使用php登录用户时请求管理权限
EN

Stack Overflow用户
提问于 2016-01-16 19:03:35
回答 1查看 4.6K关注 0票数 1

每次运行此代码时,我都会使用php.But编写注册表单和登录表单的代码,其中写的是无效的用户名,或者它说您的帐户未经管理员yet.Can批准,请告诉我如何使用户在登录时获得管理员的批准成为可能。我希望我的用户得到admin.Notice的批准,管理员必须与user.Here以相同的形式登录,这就是我的注册表单:

这是我的登录表格:

​

代码语言:javascript
复制
<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数据库:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-16 19:40:00

如果我理解正确,那么您可以使用“批准”列作为0|1布尔(int)标志。

然后将其添加到WHERE子句中。

(NOTA:它必须首先在插入中创建才能工作)。

即:

代码语言:javascript
复制
$query = "INSERT INTO login 
          (firstname, lastname, username, password, cv, email, approval) 
           VALUES ('$firstname', '$lastname', '$username','$password','$cv','$email', 0)"; 

然后,对于SELECT:(sidenote:1表示已批准,因此分别设置您的消息)。

代码语言:javascript
复制
$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/
  • 它使用PDO和一个准备好的语句和一个安全的密码哈希函数。

关于SQL注入和密码存储的注释.

您现在的代码对SQL injection开放。使用with prepared statements或PDO和prepared statements。

密码

我还注意到,您可能正在以纯文本存储密码。这是不建议的。

使用下列之一:

其他链接:

关于列长的重要侧边:

如果您确实决定使用password_hash()、兼容性包或密码,那么重要的是要注意,如果您当前密码列的长度小于60,则需要将其更改为此(或更高)。手册显示长度为255。

您将需要更改列的长度,并重新使用新的散列以使其生效。否则,MySQL将悄悄地失败。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34830929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档