我的会话忽略数据库结果并且不起作用


My session ignore database results and not working

首先,我必须原谅我的英语不好。我需要有关登录代码的帮助.php因为我正在执行权限系统低谷会话,但此名为"$_SESSION['perms']"的会话不接受数据库值。我正在寻找几周来寻找答案,但没有成功。所以我在这里呼吁。

这是我登录的代码:

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=windows-1250">
    <title></title>
    <style>
    .odstavec {
    margin-top: 0px;
    margin-bottom: 0px;
    }
    </style>
    <?php
    $dbc = mysqli_connect('localhost','root','root') or 
           die('could not connect: '. mysqli_connect_error());
    mysqli_select_db($dbc, 'loginsystem') or die('no db connection');
    session_start();
    if(isset($_POST['go'])){
      $usr = mysqli_real_escape_string($dbc, htmlentities($_POST['u_name']));
      $psw = ($_POST['u_pass']);
      $q = "SELECT * FROM members WHERE username='$usr' AND password='$psw' ";  
      $res = mysqli_query($dbc, $q);
      if(mysqli_num_rows($res) == 1){
        $_SESSION['log'] = 'in';
        $_SESSION['username'] = $_POST['u_name'];
        $_SESSION['perms'] = "SELECT $usr FROM members WHERE perms='".$_SESSION['perms']."'";
        header('location:novinky.php');
      } 
      elseif(!$_POST['u_name'] || !$_POST['u_pass']){
      $error = 'Všechna pole musí být vyplněná!';
      }else{    //create an error message
      $error = 'Chybné jméno nebo heslo. Prosím zkuste to znovu';
      }  
    }  //end of isset go
    ?>
  </head>
  <body>
   <form method="post" action="#">
    <p class="odstavec"><label for="u_name">Uživatlské jméno:</label></p>
    <p class="odstavec"><input type="text" name="u_name" value=""></p>
    <p class="odstavec"><label for="u_pass">Heslo:</label></p>
    <p class="odstavec"><input type="password" name="u_pass" value=""></p>
    <p><button type="submit" name="go">Přihlásit</button></p>
   </form>
<!-- A paragraph to display eventual errors -->

我尝试了很多方法。但没有任何效果。还有我的政府.php可能是一个错误,但我看到了这方面的进步。

<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <title>Administrace</title>
 </head>
 <?php
   session_start();
   if (isset($_SESSION['log']) && ($_SESSION['perms']=="3")){
     echo '<body>';
     echo '<div class="up_div">';
     echo '<img style="position: absolute; top: 0px; left: 0px" src="../images/admin_up_div.png">';
     echo '<p style="position: absolute; top: 0px; left: 0px">Vítej '.$_SESSION["username"].'</p>';
     echo '</div>';
     echo '</body>';
   }
   elseif (isset($_SESSION['log']) && ($_SESSION['perms']=="1")){
     echo 'Omlouvám se, ale pro tuto sekci nemáte dostatečná oprávnění'; //Sorry message if they haven´t permissons
   header('location: novinky.php');
   }else{
   header('location: login.php');
   }
 ?>   
</html>

事先,我感谢您的回答。

数据库中的信息是否正确? 为了确保更改...

 $res = mysqli_query($dbc, $q);

 echo $usr."<br/>";
 echo $psw."<br/>";
 echo $q;
 exit();
 $res = mysqli_query($dbc, $q);

我认为正在发生的事情是您的mysqli_real_escape_string和 html实体正在更改用户字符串,因此它不再匹配。

如果它不明显,请尝试在命令行或phpmyadmin中运行$q,看看是否弹出任何错误。

也像 orique 说的那样,您需要清理密码。