-1

私はphpログインページを作成しています。$_SESSION 変数 "success" が渡されたときに、ページを (この場合は index.php に) リダイレクトすることができません。成功メッセージが機能するようになるので、フォームとクエリは問題ないと思います。ここで何が欠けていますか?

フォーム (login.php) は次のとおりです。

<? $page = "login-page";//body tag class

$title = "Log in to your Bloggr Account";//title tag text

session_start();

require_once('includes/header.php');

print_r($_SESSION); ?>

<p class="errors" id="errors">

<? if(!empty($_SESSION['errors'])){ ?>

     <script type="text/javascript"> $(function() {

           setTimeout(function(){

          $("#errors").fadeIn(500);}, 500)});

     <script>

<? foreach($_SESSION['errors'] as $error){
        echo $error;}
        session_unset($_SESSION['errors']);
    } ?>
</p> <? if(!empty($_SESSION['success'])){

    header("Location: index.php");
    echo $success;
    session_unset($_SESSION['success']); } ?>
<form action="login-post2.php" method="post" class="admin-form login">
<label for="userName">User Name <label>
<input type="text" name="userName" class="user-name" value="" />
<label for="password">Password</label>
<input type="password" name="password" class="password" />
<input type="submit" class="submit" name="register-submit" value="Log In!" />
</form>

これが投稿ファイルです(login-post2.php)

<? if($_SERVER["REQUEST_METHOD"] == "POST"){
    session_start();
    require_once('../_db_connect.php');
    $errors = array();
    $success = "You're logged in!";
    if(empty($_POST['userName'])){
    $errors[] = "Please enter a user name.";
    }else[
    $userName = $_POST["userName"];
}

if(empty($errors)){
    $query = "SELECT userName, password FROM users WHERE userName = '$userName' and password = SHA1('$password')";
    $result = mysqli_query($dbconnect, $query);
    if(!result){
        $errors[] = "Please try again!";
} else{
    $success;
}
}

$_SESSION['errors'] = $errors;
$_SESSION['success'] = $success;

exit();
} ?>

フォーマットの一部が少しずれている場合は申し訳ありません。

*編集 [解決済み] 将来これに出くわす人のために、私がしたことは次のとおりです。ここに私の問題の最大の部分がありました:

if(empty($errors)){
        $query = "SELECT userName, password FROM users WHERE userName = '$userName' and password = SHA1('$password')";
        $result = mysqli_query($dbconnect, $query);     
        if(mysqli_num_rows($result) == 1){//if username and password match;
            $row = mysqli_fetch_array($result);
            $_SESSION['loggedIn'] = $loggedIn;      
            header("Location: index.php");
            exit();
        }                   
    } else{
        $_SESSION['errors'] = $errors;
        header("Location: login.php");
        exit();
    }

$errors 用に if/else ステートメントをうまくフォーマットできませんでした。私の問題の一部は、その時点でわかっていましたが、理解できませんでしたが、ヘッダーを 2 回送信する方法が必要だったということでした。$errors がある場合は 1 つの方法で、そうでない場合は別の方法です。以前の方法では、条件なしで 2 回送信しようとしていました。私の解決策は、ステートメントの最後のビットをelseとしてラップすることでした。これにより、エラーが発生した場合はユーザーをログインページに戻し、ログインに成功した場合はインデックスページに戻すことができました。それだけです。これが将来他の人に役立つことを願っています。

4

2 に答える 2

1

header() 他のコンテンツを送信する前に呼び出す必要があります(PHPのようなもの、echoまたはvar_dump()PHPタグ間のHTMLのみ)。

あなたが送っている:

<p class="errors" id="errors">
<script type="text/javascript"> $(function() {
    setTimeout(function(){
    $("#errors").fadeIn(500);}, 500)});
<script>

echo $error;}

</p> 

ヘッダーを送信する前に。コードをリファクタリングして、呼び出しをheader()これらの前に移動します。

于 2012-10-28T01:33:25.927 に答える
0

header("Location: login.php);

引用符がないことは問題になる可能性があります。

于 2012-10-28T01:27:21.437 に答える