布尔值SQL和PHP验证

冰镇

我在名为admin的表(用户)中有一列,其数据类型为boolean。将两个用户设置为“ true”

我的目标是,当这两个登录时,它们就可以访问后台,但是到目前为止,代码无法正常工作:

   <?php

    session_start();

    $error="";
    $successMessage="";



    if ($_POST){
    if(!isset($_POST["salada"]) || $_POST["salada"]===""){
    $error = "PHP: An email is required <br>";
    }



    if(!isset($_POST["arroz"]) || $_POST["arroz"]===""){
    $error .= "PHP: A password is required";
    }

    if ($error !=""){
    $error = '<div class="error-login">'.$error.'</div>';


    }else {

    require("MGconfig.php");


    $email = mysqli_real_escape_string($connection, $_POST["salada"]);
    $pwd = md5(mysqli_real_escape_string($connection, $_POST["arroz"]));


    $result = mysqli_query($connection, "select name, id from users where     email = '".$email."' and password = '".$pwd."'");


    if (mysqli_num_rows($result) !==1){
        $error='<div class="error-login">PHP: Invalid email or   password</div>';
        header("Location:index.php?error=".$error);

    }else {

            $nome = mysqli_fetch_row($result);

            $_SESSION["name"] = $nome[0];
            $_SESSION["id"]=$nome[1];



            header ("Location: main.php");
        }
      }


    }

   ?>

 <?php

  if($_SESSION['admin'] !=0){

        header ("Location:admin.php");       
    }?>

有人可以告诉我为什么不工作吗?是语法吗?如果我将“名称”字段进行比较,则该限制有效...谢谢!

拉吉普(Rajdeep Paul)

问题是,您没有选择查询中的admin列,SELECT仅选择了idname列。另外,您无需检查登录的用户是否为admin。

因此解决方案是,adminSELECT查询中选择列,然后利用该列值来检查登录用户是否为admin,如下所示:

// your code

$result = mysqli_query($connection, "select name, id, admin from users where email = '".$email."' and password = '".$pwd."'");

if (mysqli_num_rows($result) !== 1){
    $error='<div class="error-login">PHP: Invalid email or   password</div>';
    header("Location:index.php?error=".$error);
}else{
    $nome = mysqli_fetch_row($result);
    $_SESSION["name"] = $nome[0];
    $_SESSION["id"] = $nome[1];
    if($nome[2]){
        // logged in user is admin
        $_SESSION["admin"] = true;
    }else{
        // logged in user is not admin
        $_SESSION["admin"] = false;
    }
    header ("Location: main.php");
    exit();
}

// your code

旁注:了解准备好的语句,因为现在您的查询容易受到SQL注入的影响。另请参阅如何防止在PHP中进行SQL注入

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章