0

次のスクリプトを自分のマシンでローカルにテストしましたが、すべてが希望どおりに完全に機能します。ただし、1and1でサーバーにファイルをアップロードすると、ログインスクリプトで[送信]ボタンをクリックすると、ログイン画面に表示されたままになります。

よくわかりませんが、おそらく問題はセッションではなく、ヘッダー関数の使用にあります。

<?php
    session_start();
    require ("login.php");
    include ("header.php");
    include ("subnav.php");

    if ((isset($_SESSION['user'])) && (isset($_SESSION['admin'])))
        header('Location: admin/index.php' );

    if ((isset($_SESSION['user'])) && (!isset($_SESSION['admin'])))
        header('Location: customer/index.php' );

    if ((isset($_GET['logout'])) == 1) {
        session_destroy();
        header('Location: index.php');
    }

    if (isset($_POST['submit'])) 
        if($_POST['username'] == 'jay') {
            $_SESSION['user'] = 'jay';
            $_SESSION['admin'] = 1;
            header('Location: admin/index.php' );
        }
        else if ($_POST['username'] == 'william'){
            $_SESSION['user'] = 'william';
            header('Location: customer/index.php' );
        }
        else {
            header('Location: http://www.google.com' );
        }
?>

    <h2>System Log-In</h2>

    <form action="" method="post">
        <ul id="login">
            <li>
                Username: <br>
                <input type="text" name="username"></li>
            <li>
                Password: <br>
                <input type="password" name="password">
            </li>
            <li>
                <input type="submit" value="Log-In" name ="submit" id="submit">
            </li>
            <li>
                <br><a href=#>Register Here.</a>
            </li>
            <li>
                If you are having problems with the log-in process, please send us an <a href="mailto:here@here.us">e-mail</a>.
            </li>
        </ul>
    </form>


<?php   
    include ("footer.php");
?>

ここに画像の説明を入力してください

4

2 に答える 2

1

コードのこの時点で中括弧を入れて、コードのブロックを適切に完成させます。

if( isset( $_POST['submit'] ) )

一般に、1行であっても、すべてのifステートメントには常に中括弧を使用するのが最善です。これは、このような混乱の問題を防ぐのに役立ちます。

于 2013-02-28T03:03:30.000 に答える
0

それは役立つかもしれないし、役に立たないかもしれませんが、あなたが順番に取得する必要があるいくつかのことがあります:

  1. Location:ヘッダーを使用する場合は、常に。を使用してスクリプトを終了する必要がありますdie()。それ以外の場合、スクリプトの残りの部分は実行を続けます。header('Location: ...'); die;

  2. また、Location:ヘッダーに関連して、パスの前にスラッシュを配置する必要があります。例Location: /index.php

  3. コードが練習用であることを願っています。POST変数の値に基づいてユーザーに管理者ステータスを与えることは、必ずしも安全ではありません。

于 2013-02-28T03:02:35.820 に答える