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

时间:2013-10-14 16:18:44

标签: php session user-permissions

首先,我必须原谅我的英语不好。我需要帮助我的代码登录login.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>

事先我感谢你的回答。

1 个答案:

答案 0 :(得分:0)

数据库中的信息是否正确?确保改变......

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

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

我认为正在发生的是你的mysqli_real_escape_string和htmlentities正在改变用户字符串,因此它不再匹配。

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

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