私は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としてラップすることでした。これにより、エラーが発生した場合はユーザーをログインページに戻し、ログインに成功した場合はインデックスページに戻すことができました。それだけです。これが将来他の人に役立つことを願っています。