0

まず、私の英語が下手であることを言い訳しなければなりません。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 -->

私は多くの方法を試しています。しかし、何も機能しません。また、administration.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>

事前に私は答えてくれてありがとう。

4

1 に答える 1

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 が言ったように、パスワードをサニタイズする必要があります。

于 2013-10-14T20:10:37.163 に答える