Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用不同角色登录(根据用户类型重定向到不同页面)_Php_Html_Mysqli - Fatal编程技术网

Php 使用不同角色登录(根据用户类型重定向到不同页面)

Php 使用不同角色登录(根据用户类型重定向到不同页面),php,html,mysqli,Php,Html,Mysqli,我是php新手。我无法从用户或管理员处登录。如何使用户可以登录并重定向到index.php,一旦管理员登录,将重定向到admin.php 我在youtube上做了一些研究,没有找到任何对我有帮助的东西 <form action="login.php" method="post"> <input class="space" name="username" type="text" placeholder="Username/E- mail" required=

我是php新手。我无法从用户或管理员处登录。如何使用户可以登录并重定向到index.php,一旦管理员登录,将重定向到admin.php

我在youtube上做了一些研究,没有找到任何对我有帮助的东西

  <form action="login.php" method="post">

  <input class="space" name="username" type="text" 
  placeholder="Username/E- 
  mail" required="required"></input>

  <br />

  <input class="space" name="password" type="password" 
  placeholder="Password" required="required"></input>

  <br />

  <input type="submit" class="log-btn" value="Login" />

  <button type="button" class="log-btn" onclick="return 
  abc(1,'reg.html')">Register</button>

  </form>



登记
这是数据库表:

我还包括了管理员用户名和密码在数据库中,所以管理员不必注册

<?php
include ("conn.php");
session_start();

$sql="SELECT * FROM user WHERE email = '".$_REQUEST['username']."' and 
    password = '".$_REQUEST['password']."' or username = 
    '".$_REQUEST['username']."' and password = '".$_REQUEST['password']."' 
    LIMIT 1";
$result=mysqli_query($con,$sql);

if (mysqli_num_rows($result) <= 0) {
    $cred = mysqli_fetch_row($result);
    $_SESSION['user'] = $cred[1];
    echo "<script>window.location.href='index.php';</script>";
} else {
    echo "<script>window.location.href='index.php?msg=Invalid+Credential'; 
        </script>";
}
if ($row=mysqli_fetch_array($result)) {
    $_SESSION['role']=$row['user_role'];
}
if ($row['user_role']==="1"]) {
    echo "<script>alert('Welcome back admin!');";
    echo "window.location.href='admin.html';</script>";
}

您的login.php应该是这样的:

<?php

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "root", "dbpass", "dbname"); // make seperate file

if($_POST){
    $stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
    $stmt->bind_param("ss", $_POST['username'], $_POST['password']);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows > 0) {
        session_start();
        while($row = $result->fetch_assoc()) {
            if($row['role'] == 1){
                $_SESSION['message'] = $row['username'];
                header("Location: admin.php");exit();
            }else{
                $_SESSION['message'] = $row['username'];
                header("Location: index.php");exit();
            }
        }
    }else{
        echo "Wrong Credentials";
    }
    $stmt->close();
}
?>



<form action="login.php" method="post">

  <input class="space" name="username" type="text" 
  placeholder="Username/E- 
  mail" required="required"></input>

  <br />

  <input class="space" name="password" type="password" 
  placeholder="Password" required="required"></input>

  <br />

  <input type="submit" class="log-btn" value="Login" />

  <button type="button" class="log-btn" onclick="return 
  abc(1,'reg.html')">Register</button>

  </form>



登记
对于page admin.php和index.php,您可以使用
$\u session['message']
检查活动会话

这样,您将获得用户的名称


注意:请不要使用存储纯文本密码!请使用PHP的密码安全性。

说了解的语句。即使是这样也不安全!永远不要存储纯文本密码!请使用PHP来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用
密码\u hash()
。在散列之前,不需要对它们执行任何操作或使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。您的查询中不需要OR。您的代码充满漏洞。您是否考虑过使用某种框架(如Laravel)来安全地处理用户注册和登录?不确定为什么在可以更轻松地使用PHP的情况下使用JavaScript重定向。@dharman是的,我理解SQL注入,但代码不完全正确,我只是尝试用最少的文字解决编码问题,没别的了,更新Thanks我想这会解决的。让我们来看看。但从我看到的是,SELECT sql语句中只有2个实体,那么如何确定登录了哪个用户角色?仍然没有完全理解代码。