2

ログイン フォームを完成させましたが、WAMP サーバーで 100% 動作します。ただし、ライブサーバーで実行すると、ログインするときを除いて、すべてが 100% 動作します。ページが本来のページにリダイレクトされません (空白の HTML ページが表示されるだけです)。ただし、ページのURLを入力すると、表示されるはずのように表示されるため、ログインしています。ファイルへのパスは正しいです。私の問題が明確であることを願っています。ログインフォームのコードは次のとおりです。

<?php 
include_once "includes/scripts.php";
session_start();
include_once ("includes/connect.php");

if(isset($_SESSION['logged_in'])) {
    header('location: admin_cms.php');
    exit();
} else {
    if(isset($_POST['username'], $_POST['password'])) {
        $username = $_POST['username'];
        $password = md5($_POST['password']);

        if(empty($username) or empty($password)) {
             $error = '<p>NOTE: Fields are blank</p>';  
        } else {
             $query = $pdo->prepare("SELECT * FROM users WHERE user_name = ? AND user_password =?");
             $query->bindValue(1, $username);
             $query->bindValue(2, $password);
             $query->execute();
             $num = $query->rowCount();

             if($num == 1) {
                 $_SESSION['logged_in'] = true;
                 header('location: admin_cms.php');
                 exit();
             } else {
                 $error = "<p>NOTE: The username or password is incorrect</p>";     
             }
        }
    }
?>
    <div id="login_container">
        <br><img src="images/camelhorst_logo_full.png" style="margin-top:38px;">
        <h1>LOGIN<img src="images/three_column_grid_line.png" alt="line"></h1>
        <form  acton = "admin.php" method="post" autocompleate="off">
            <label>Username:</label>
            <input type="text" name="username" placeholder="Your Username" required autocomplete="off">
            <label>Password:</label>
            <input type="password" name="password" placeholder="Your Password" required autocomplete="off">
            <input type="submit"  value="Login" name="submit_login">
        </form>
<?php 
      if(isset($error)) {
          echo $error;
      }
?>
      <p id="copyright_admin"> © CAMELHORSE CREATIVE STUDIO 2013 </p>
    </div><!--login_container-->
<?php 
 } 
?>
</body>
</html>
4

4 に答える 4

3

まず、

session_start() 

ページの一番上にある必要があります。その前に空白はありません。

第二に、

if (empty($username) or empty($password)){

これに置き換える必要があります

if (empty($username) || empty($password)){

それを試して、それが機能するかどうかを確認してください

また、これは少し話題から外れており、問題の原因ではないと確信していますが、 md5() は非常に時代遅れです。使ってみて

sha1();

代わりに暗号化します。sha1() も少し古いですが、md5() よりは優れています。

これもまた、ちょっとネタバレです。しかし、それは注目に値するようです。あなたが持っている

if(isset($_POST['username'], $_POST['password'])) {
    $username = $_POST['username'];
    $password = md5($_POST['password']);

    if(empty($username) or empty($password)){
        $error = '<p>NOTE: Fields are blank</p>';   
    }

デフォルトでは、暗号化されているものの値が空であっても、md5 は 32 文字の 16 進数を返します。というわけで、条件は

empty($password)

一種の冗長です。持っている方が良いのはこれです:

if(isset($_POST['username'], $_POST['password'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $pass_enc = md5($_POST['password']);

    if(empty($username) || empty($password)){
        $error = '<p>NOTE: Fields are blank</p>';   
    }
于 2013-09-28T20:13:23.097 に答える
1

これにリダイレクトを変更します。

echo "<script>window.location='admin_cms.php'<script>";
于 2013-09-28T20:09:58.923 に答える
0

イクバル・マリクは正しい。echo "window.location='admin_cms.php'"; を使用する必要があります。

ただし、リダイレクトのために header() を保持したい場合は、入れなければなりません

 ob_start()

ページの一番上、すぐ下

 session_start()

それは魅力のように機能します。

編集:md5 / sha1のことについて、私はちょうど使い始めました:

 hash("sha512", md5($password))

私のパスワード暗号化のために。

于 2013-09-28T20:50:45.157 に答える
0

ほとんどの場合、header() リダイレクトが失敗するのは、以前の出力があったためです (ここでは空白も重要です)。そのため、ファイルまたは含まれているファイルに以前の出力がないことを確認する必要がある場合があります。

<?php include_once "includes/scripts.php"; ?>

include_once ("includes/connect.php");

注意: <?php ?> タグの外側のスペースはすべて出力と見なされます。例えば

<?php ...some php code... '
  //space below causes output to be written to html
?>

<?php
   ...more php code here...
?>
于 2013-09-28T20:16:58.050 に答える