1

私がやろうとしていること

ログインフォームを備えた単一ページのメンバーエリアを作成しています。

ログイン時に (この段階で) ユーザーに表示されるのは、ログアウトするためのボタンだけです。

何が問題なの

データベースに一致するものがあれば (たとえば、ユーザー名が正しい、またはユーザー名とパスワードの両方が正しい) 500 Server Error、.

パスワードが一致するかどうかに関係なく、ページを更新すると、ユーザーはログインします。

ユーザーがログアウト リンクをクリックすると、500 Server Error.

コード

<?php 
session_start();

if(isset($_GET['logout'])&&$_GET['logout']==='true'){
    logout();
    header('location: ./');
}

if(isset($_POST['submit'])) {
    $email = $_POST['email'];
    $password = $_POST['password'];

    $hostname = 'REDACTED';
    $username = 'REDACTED';
    $password = 'REDACTED';
    $dbname   = 'REDACTED';

    try {
        $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
    }

    catch(PDOException $e){
        echo($e->getMessage());
    }


    $stmt=$dbh->prepare('SELECT `password`, `id` FROM `tap_users` WHERE `email`=?');
    $stmt->execute(array($email));

    if($stmt->rowCount()==0){
        //incorrect username
        header('location: ./?error=user');
        exit();
    }
    $userData = $stmt->fetch(PDO::FETCH_ASSOC);

    if($password != $userData['password']) {
        //incorrect password
        header('location: ./?error=pass');
        exit();
    } else {
        validateUser($userData['id']);
        header('location: ./');
    }
}

?>

<head></head>

<body>

<?php
if(!isLoggedIn()) {
    show_login();
    exit();
}
?>

<a href="?logout=true">Logout</a>

</body>

</html>

<?php
//Show login form
function show_login(){
    echo    '<form method="post">
                <input type="text" name="email" placeholder="Email Address" />
                <input type="password" name="password" placeholder="Password" />
                <input type="submit" value="Submit" name="submit" />
            </form>

            </body>

            </html>';
}

//Check if a user is logged in
function isLoggedIn(){
    if(isset($_SESSION['valid']) && $_SESSION['valid'])
        return true;
    return false;
}

//validate the user
function validateUser($userid){
    //this is a security measure
    session_regenerate_id();
    $_SESSION['valid'] = 1;
    $_SESSION['userid'] = $userid;
}

//logout the user
function logout(){
    //destroy all of the session variables
    $_SESSION = array();
    session_destroy();
}
?>
4

2 に答える 2

1

あなたがしていることは、ユーザーのログインが正しい場合、header('location: ./'); にリダイレクトしていることです。おそらく、index.php がないか、ディレクトリ インデックスが apache 構成でオフになっています。

1つのことをして、それをに変更します

header('location:index.php');

それが動作します。

これは php や mysql とは関係ありません。サーバーの構成エラーです。

于 2015-01-15T16:53:07.140 に答える
0

私はあなたのコードを実行しました: online php code validator構文に問題はないようです。この問題は、ファイルのアクセス許可エラーが原因である可能性があります。ファイルにはユーザーの実行権限がありますか。ftp でパーミッションが 755 に設定されていることを確認してください。これにより、誰もが php コードを読み取って実行できるようになります。それが問題でない場合は、ホストに連絡してエラーを尋ねてください。ホストはその情報を提供できるはずです。もう 1 つのオプションは、PHP で独自のエラー ログを作成することです。これに関するこの古いスタック オーバーフローの投稿を見て、すべてのエラーを別のファイルに表示し続けることができます。

于 2015-01-15T16:53:40.620 に答える