1

これが私のindex.phpの内容です。これをローカルホストでテストしたところ、意図したとおりに動作しました。ユーザーがユーザー名とパスワードを送信すると、ページが更新され、新しいページが表示されます。ログイン時に何らかの理由でサーバーにアップロードすると、ページがヘッダーだけでロードされます。戻るボタンを押すか、更新ボタンをクリックすると、ログイン後に表示されるはずだった html が表示されます。ログインが成功し、ユーザーが同じページにリダイレクトされた直後に機能しない理由は何ですか? これが私のコードです:

<?php

session_start();

include_once('../includes/connection.php');
include_once('header.php');

if (isset($_SESSION['logged_in'])) {
//display index
?>
<div id="inner-wrap">
    <div class="page_title" onclick="window.location = 'index.php';">Admin</div>

    <div class="admin">
        <div class="admin_sec">
        <u>Manage Works</u><br>
        <a href="img_upload.php">upload image</a><br>
        <a href="img_delete.php">delete image</a>
        </div>

        <div class="admin_sec">
        <u>Manage Bio</u><br>
        <a href="bio_edit.php">edit bio</a>
        </div>

        <div class="admin_sec">
        <u>Manage Blog</u><br>
        <a href="../blog/wp-login.php">login to blog</a>
        </div>

        <div class="admin_sec">
        <u>Manage Links</u><br>
        <a href="link_add.php">add link</a><br>
        <a href="link_delete.php">delete link</a>
        </div>
    </div>

    <div class="logout">
        <div class="page_title" onclick="window.location='logout.php';">Logout</div>    
    </div>
 </div> 
  </body>
 </html>
 <?php
} else {
//display login
if (isset($_POST['username'], $_POST['password'])) {
    $username = $_POST['username'];
    $password = md5($_POST['password']);

    if (empty($username) or empty($password)) {
        $error = 'All fields are required.';        
    } 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) {
            //user entered correct details
            $_SESSION['logged_in'] = true;
            header('Location: index.php');
            exit();
        } else {
            //user entered incorrect username and/or password
            $error = 'The username and/or password are incorrect.';
        }
    }
}
?>

<div id="inner-wrap">
<div class="page_title" onclick="window.location = 'index.php';">Login</div>
<div class="admin_sec"> 
    <form action="index.php" method="post" autocomplete="off">
        <input type="text" name="username" placeholder="Username">
        <input type="password" name="password" placeholder="Password">
        <input type="submit" class="button" value="Login">
    </form>

    <?php if (isset($error)) { ?>
        <small style="color:#aa0000"><?php echo $error; ?></small>
    <?php } ?>
</div>
</div>  

</body>
</html>

<?php } ?>
4

2 に答える 2

1

最も簡単な修正は、ログイン ロジックを最初に配置することです。

session_start();

include_once('../includes/connection.php');
include_once('header.php');

if (!isset($_SESSION['logged_in'])) {
//display login
if (isset($_POST['username'], $_POST['password'])) {
        $username = $_POST['username'];
        $password = md5($_POST['password']);

        if (empty($username) or empty($password)) {
                $error = 'All fields are required.';        
        } 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) {
                        //user entered correct details
                        $_SESSION['logged_in'] = true;
                } else {
                        //user entered incorrect username and/or password
                        $error = 'The username and/or password are incorrect.';
                }
        }
}
}
if (isset($_SESSION['logged_in'])) {
//display index
?>
<div id="inner-wrap">
        <div class="page_title" onclick="window.location = 'index.php';">Admin</div>

        <div class="admin">
                <div class="admin_sec">
                <u>Manage Works</u><br>
                <a href="img_upload.php">upload image</a><br>
                <a href="img_delete.php">delete image</a>
                </div>

                <div class="admin_sec">
                <u>Manage Bio</u><br>
                <a href="bio_edit.php">edit bio</a>
                </div>

                <div class="admin_sec">
                <u>Manage Blog</u><br>
                <a href="../blog/wp-login.php">login to blog</a>
                </div>

                <div class="admin_sec">
                <u>Manage Links</u><br>
                <a href="link_add.php">add link</a><br>
                <a href="link_delete.php">delete link</a>
                </div>
        </div>

        <div class="logout">
                <div class="page_title" onclick="window.location='logout.php';">Logout</div>    
        </div>
 </div> 
    </body>
 </html>
 <?php
}else{?>
<div id="inner-wrap">
<div class="page_title" onclick="window.location = 'index.php';">Login</div>
<div class="admin_sec"> 
        <form action="index.php" method="post" autocomplete="off">
                <input type="text" name="username" placeholder="Username">
                <input type="password" name="password" placeholder="Password">
                <input type="submit" class="button" value="Login">
        </form>

        <?php if (isset($error)) { ?>
                <small style="color:#aa0000"><?php echo $error; ?></small>
        <?php } ?>
</div>
</div>  

</body>
</html>
<?php
}
于 2013-05-16T22:02:41.533 に答える
0

これに変更header(Location: index.php)してみheader(Location: ./index.php)てください。問題が解決するはずです

于 2013-05-16T21:42:27.140 に答える