布尔值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条评论
登录后参与评论

相关文章

来自分类Dev

用于日期和布尔值的Rspec验证测试

来自分类Dev

布尔值和提交

来自分类Dev

CodePrimitiveExpression和布尔值

来自分类Dev

CodePrimitiveExpression和布尔值

来自分类Dev

布尔值和返回

来自分类Dev

PHP翻转布尔值

来自分类Dev

布尔值和布尔值的区别?

来自分类Dev

nullptr和布尔值之间的比较

来自分类Dev

空列表和布尔值

来自分类Dev

查询布尔值和 if 语句

来自分类Dev

LINQ to SQL布尔值的评估顺序

来自分类Dev

从SQL函数返回布尔值

来自分类Dev

布尔值的SQL CASE语句

来自分类Dev

Spark SQL JSON布尔值评估

来自分类Dev

如何通过SQL导出布尔值

来自分类Dev

通过PHP GET传递布尔值

来自分类Dev

PHP INSERT 布尔值到 mysql

来自分类Dev

AJAX和PHP返回布尔值和字符串

来自分类Dev

PHP和Oracle-通过php将布尔值绑定到oracle函数调用失败

来自分类Dev

Rails范围内的验证与多个布尔值

来自分类Dev

perl LibXML:针对dtd验证文档,返回布尔值

来自分类Dev

如何在Rails中验证布尔值

来自分类Dev

在Python中验证CSV文件的布尔值

来自分类Dev

C#中的布尔值和布尔值之间的区别?

来自分类Dev

易失性布尔值和布尔值之间的区别

来自分类Dev

从SQL Server中的SELECT获取布尔值到C#中的布尔值?

来自分类Dev

布尔值不会作为 PHP 上的布尔值上传到 DynamoDB

来自分类Dev

MS Access布尔值字段和默认(真)值

来自分类Dev

布尔值和连续值之间的相关性