PHP 初心者です。
現在XAMPPを利用し、下記のサイトを開発しています。
index.php にあるgoボタンをクリックすると、
ログインしている場合 → bbb.phpへ遷移する。
ログインしていない場合 → login.phpへ遷移する。
login.php にてid,pw を入力し、loginボタンをクリック>bbb.php へ遷移する。
*id,pwに間違いがある場合は、login.phpが再度表示される。→問題なし
■トラブル■
login.php にて正確なid,pw を入力し、loginボタンをクリックすると、
「このページは動作していません localhostでリダイレクトが繰り返し行われました」
「Cookieを消去してみてください」
と表示されます。
■試したこと■
①cookieを削除したが、loginボタンをクリックすると、また同じメッセージが表示されます。
②bbb.phpをbbb.htmlにすると問題なく表示されます
たびたび失礼しました。
コードを追記します。
<?php
session_start(); //セッション開始
if(isset($_SESSION['id'])){
//セッションにユーザーIDがある=ログインしている
//トップページに遷移する
header('Location: bbb.php');
} else if(isset($_POST['name']) && isset($_POST['password'])){
//ログインしていないがユーザー名とパスワードが送信されたとき
//データベースに接続
$dsn = 'mysql:host=localhost;dbname=msqdata;charset=utf8';
$user = 'name';
$password = 'password';//nameに設定したパスワード
try {
$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $db->prepare("SELECT * FROM user WHERE name=:name AND password=:password");
//パラメータを割り当て
$stmt->bindParam(':name', $_POST['name'], PDO::PARAM_STR);
$stmt->bindParam(':password', sha1($_POST['password']), PDO::PARAM_STR);
//クエリの実行
$stmt->execute();
if($row = $stmt->fetch()){
//ユーザーが存在していたのでセッションにユーザーIDをセット
$_SESSION['id']=$row['id'];
header('Location: bbb.php');
exit();
} else {
//1レコードも取得できなかった時
//ユーザー名・パスワードが間違っている可能性あり
//もう一度ログインフォームを表示
header('Location: login.php');
exit();
}
} catch(PDOException $e) {
die('エラー:'.$e->getMessage());
}
} else {
//ログインしていない場合はログインフォームを表示する
?>
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>login form</title>
</head>
<body>
<h1>Login Form</h1>
<h2>Register your information</h2>
<form action="login.php" method="post">
<p>Username: <input type="text" name="name"></p>
<p>Password : <input type="password" name="password"></p>
<p><input type="submit" value="Login"></p>
</form>
</body>
</html>
<?php } ?>
追記です。
bbb.phpのトップに
<?php
include 'includes/login.php';
?>
というコードがあります。
*直接URLを入力された際、未ログインの場合にはlogin画面へ遷移するためです。
includes/login.phpのコードは、
<?php
session_start;
if(!isset($_SESSION['id'])) {
header('Location: login.php');
exit();
}
?>
となります。