2016-10-02 38 views
-2

我有一個名爲admin的表(用戶)的列,其數據類型是布爾值。兩個用戶都設置爲「真」布爾SQL和PHP驗證

我的目標是當這兩個日誌中,他們已經接取到後臺,但到目前爲止,代碼是不工作:

<?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");  
    }?> 

有人能告訴我爲什麼不工作?語法?如果我比較字段「名稱」,限制工作...提前致謝!

+0

取決於您如何設置該會話。顯示該代碼,它與問題相關。 – Qirel

+0

試着'echo $ _SESSION ['admin'];'來測試它的值。難道它是在你的代碼中的其他地方被賦予一個字符串值嗎? –

+0

我不這麼認爲,值已直接在數據庫中分配... – icenine

回答

0

問題是,您在SELECT查詢中未選擇admin列,您只選擇了idname列。此外,您無法檢查登錄用戶是否爲admin。

因此,解決辦法是,在你的SELECT查詢選擇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 

旁註:瞭解有關prepared statements,因爲現在您的查詢容易受到SQL注入的影響。另見how you can prevent SQL injection in PHP

+0

謝謝你的幫助Rajdeep和其他人 – icenine

+0

@icenine你'歡迎!:-) –