前提・実現したいこと
PHPで、ログイン機能の実装を行っています。
作りたいものとしましては、ログイン完了後に、ログインページに入る直前のページに画面遷移できるようにしたいです。
試したこと
$_SERVER['HTTP_REFERER']を使って、ログインページに入る直前のページのURLの値を取得し、それを、header('location:' . $_SERVER['HTTP_REFERER']);という形で、ログイン後の遷移先を設定しました。
発生している問題
このようなことを試した結果、ログイン完了後に画面が遷移せず、ログイン画面から動かない状態になりました。
ログインが成功した際に、ログインページに入る直前のページのURLに移動できるようにするためのアドバイスをいただけますと幸いです。
該当のソースコード
PHP
1<!--login.php--> 2<?php 3//SQL文関連は、db.phpで行う。 4require_once("db.php"); 5$logonSuccess = false; 6//$_SERVER['HTTP_REFERER']で、前のページのURLを取得 7$url = $_SERVER['HTTP_REFERER']; 8 9//ユーザーの資格情報を確認する 10if ($_SERVER['REQUEST_METHOD'] == "POST") { 11 //ログイン成功時の動作 12 $logonSuccess = (WishDB::getInstance()->verify_wisher_credentials($_POST['user'], $_POST['userpassword'])); 13 if ($logonSuccess == true) { 14 session_start(); 15 $_SESSION['user'] = $_POST['user']; 16 { 17 //前のページのURLをログイン後の遷移先に設定 18 header('location:' . $url); 19 exit(); 20 } 21 } 22} 23?> 24<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 25<html> 26 <head> 27 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 28 <link rel="stylesheet" type="text/css" media="screen" href="style.css" /> 29 <title>ログイン画面</title> 30 </head> 31 <body> 32 <!--ログイン入力フォーム--> 33 <form name="logon" action="login.php" method="POST" > 34 名前: <input type="text" name="user"/> 35 パスワード: <input type="password" name="userpassword"/><br> 36 <!--ログイン失敗時の動作--> 37 <?php 38 if ($_SERVER['REQUEST_METHOD'] == "POST") { 39 if (!$logonSuccess) 40 echo "名前かパスワードが一致していません。"; 41 } 42 ?> 43 <input type="submit" value="ログイン"/><br> 44 45 </form> 46 </body> 47</html>
PHP
1<!--db.php--> 2<?php 3 4class WishDB extends mysqli { 5 6 // すべてのインスタンス間で共有される自己の単一インスタンス 7 private static $instance = null; 8 //db接続構成変数 9 private $user = "phpuser"; 10 private $pass = "phpuserpw"; 11 private $dbName = "wishlist"; 12 private $dbHost = "localhost"; 13 14/* 15 * このメソッドは静的でなければならず、オブジェクトがまだ存在しない場合は 16 */ 17// オブジェクトのインスタンスを返す必要がある。 18 public static function getInstance() { 19 if (!self::$instance instanceof self) { 20 self::$instance = new self; 21 } 22 return self::$instance; 23 } 24 25 /* 26 * cloneおよびwakeupメソッドは、Singletonクラスのコピーの外部インスタンス化を 27 * 防ぎ、オブジェクトの重複の可能性を排除する。 28 */ 29 30 public function __clone() { 31 trigger_error('Clone is not allowed.', E_USER_ERROR); 32 } 33 34 public function __wakeup() { 35 trigger_error('Deserializing is not allowed.', E_USER_ERROR); 36 } 37 38 // プライベートコンストラクタ 39 private function __construct() { 40 parent::__construct($this->dbHost, $this->user, $this->pass, $this->dbName); 41 if (mysqli_connect_error()) { 42 exit('Connect Error (' . mysqli_connect_errno() . ') ' 43 . mysqli_connect_error()); 44 } 45 parent::set_charset('utf-8'); 46 } 47 48 49 /*アカウント作成*/ 50 public function create_wisher($name, $password) { 51 $name = $this->real_escape_string($name); 52 $password = $this->real_escape_string($password); 53 $this->query("INSERT INTO wishers (name, password) VALUES ('" . $name 54 . "', '" . $password . "')"); 55 } 56 57 /*ユーザ資格情報を確認*/ 58 public function verify_wisher_credentials($name, $password) { 59 $name = $this->real_escape_string($name); 60 $password = $this->real_escape_string($password); 61 $result = $this->query("SELECT 1 FROM wishers WHERE name = '" 62 . $name . "' AND password = '" . $password . "'"); 63 return $result->data_seek(0); 64 } 65 66} 67 68 69?> 70
###テーブルの構成
wishersテーブル(ユーザを管理するテーブル)
id
name(ユーザ名)
password(パスワード)
補足情報(FW/ツールのバージョンなど)
XAMPP、 NetBeans IDE 8.2を使用
PHPのバージョンは、PHP7.0
回答1件
あなたの回答
tips
プレビュー