ログインして、パスワードが合っているればtest.phpに飛ぶようになっております。
fromはpostです。
//アカウントが一致 if($row = $statement->fetch()){ $password_hash = $row[password]; //パスワードが一致 if (password_verify($password, $password_hash)) { //セッションハイジャック対策 session_regenerate_id(true); $_SESSION['mail'] = $mail; header("Location: test.php"); exit();
下記のようにheader("Location: test.php".$123);などで試しましたが、
ログイン画面亜押せない状態です。
login.php → login_check.php
↑
ここからボタンが押せません。
$_SESSION['mail'] = $mail; $123 = 123; $url = "http://example.com/?123={$123}"; header("Location: test.php". $url); exit();
ご教授いただけないでしょうか?
よろしくお願いします。
login.php
<?php session_start(); header("Content-type: text/html; charset=utf-8"); ?> <!DOCTYPE html> <html> <head> <title>ログイン画面</title> <meta charset="utf-8"> </head> <body> <h1>ログイン画面</h1> <form action="login_check.php" method="post"> <p>アカウント:<input type="text" name="account" size="50"></p> <p>パスワード:<input type="text" name="password" size="50"></p> <input type="hidden" name="token" value="<?=$token?>"> <input type="submit" value="ログインする"> </form> </body> </html>
login_check.php
<?php session_start(); header("Content-type: text/html; charset=utf-8"); //データベース接続 require_once("db.php"); $dbh = db_connect(); //前後にある半角全角スペースを削除する関数 function spaceTrim ($str) { // 行頭 $str = preg_replace('/^[ ]+/u', '', $str); // 末尾 $str = preg_replace('/[ ]+$/u', '', $str); return $str; } //エラーメッセージの初期化 $errors = array(); if(empty($_POST)) { header("Location: index.php"); exit(); }else{ //POSTされたデータを各変数に入れる $mail = isset($_POST['mail']) ? $_POST['mail'] : NULL; $password = isset($_POST['password']) ? $_POST['password'] : NULL; //前後にある半角全角スペースを削除 $mail = spaceTrim($mail); $password = spaceTrim($password); //アカウント入力判定 if ($mail == ''): $errors['mail'] = "アカウントが入力されていません。"; elseif(mb_strlen($mail)>50): $errors['mail_length'] = "アカウントは50文字以内で入力して下さい。"; endif; //パスワード入力判定 if ($password == ''): $errors['password'] = "パスワードが入力されていません。"; elseif(!preg_match('/^[0-9a-zA-Z]{5,30}$/', $_POST["password"])): $errors['password_length'] = "パスワードは半角英数字の5文字以上30文字以下で入力して下さい。"; else: $password_hide = str_repeat('*', strlen($password)); endif; } //エラーが無ければ実行する if(count($errors) === 0){ try{ //例外処理を投げる(スロー)ようにする $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //アカウントで検索 $statement = $dbh->prepare("SELECT * FROM member WHERE mail=(:mail) AND flag =1"); $statement->bindValue(':mail', $mail, PDO::PARAM_STR); $statement->execute(); //アカウントが一致 if($row = $statement->fetch()){ $password_hash = $row[password]; //パスワードが一致 if (password_verify($password, $password_hash)) { //セッションハイジャック対策 session_regenerate_id(true); $_SESSION['mail'] = $mail; header("Location: test.php"); exit(); }else{ $errors['password'] = "メールアドレス及びパスワードが一致しません。"; } }else{ $errors['mail'] = "メールアドレス及びパスワードが一致しません。"; } //データベース接続切断 $dbh = null; }catch (PDOException $e){ print('Error:'.$e->getMessage()); die(); } } ?> <!DOCTYPE html> <html> <head> <title>ログイン確認画面</title> <meta charset="utf-8"> </head> <body> <h1>ログイン確認画面</h1> <?php if(count($errors) > 0): ?> <?php foreach($errors as $value){ echo "<p>".$value."</p>"; } ?> <input type="button" value="戻る" onClick="history.back()"> <?php endif; ?> </body> </html>