使用php

时间:2016-01-16 19:03:36

标签: php html mysql css database

我使用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>

代码正常运行!这是我创建的phpmyadmin数据库:The database

1 个答案:

答案 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/

  • 它使用带有预准备语句和安全密码哈希函数的PDO。

有关SQL注入和密码存储的说明。

您目前的代码向SQL injection开放。使用mysqli_* with prepared statementsPDOprepared statements

<强>密码

我还注意到您可能以纯文本格式存储密码。不建议这样做。

使用以下其中一项:

其他链接:

关于列长的重要说明:

如果您决定使用password_hash(),兼容包或加密,请务必注意,如果您当前的密码列长度低于60,则需要改为(或更高)。手册建议长度为255。

您需要更改列的长度并重新开始使用新哈希才能使其生效。否则,MySQL将无声地失败。