PHP初心者です。現在ログイン機能をPHPで作成しており、ログイン状態ならば、ログインユーザーのハンドルネーム表示、ログイン状態でなければ「ゲスト」として表示するようなものを作りたいです。
<?php session_start(); // $_SESSION['id']という値を持っているかどうかでログインの有効性を判断 if (!empty($_SESSION['id'])) // もしidがあれば { header('Location: index.html'); // indexに飛ばす! } require_once('php/config.php'); require_once('php/functions.php'); $clean = array(); // サニタイズ if( !empty($_POST) ) { foreach( $_POST as $key => $value ) { $clean[$key] = htmlspecialchars( $value, ENT_QUOTES); } } // submitボタンで送信された情報が「POST」だったらの処理 if ($_SERVER['REQUEST_METHOD'] == 'POST'){ $email =$clean['email']; $pass =$clean['pass']; $errors = array(); // バリデーションのエラーメッセージ // バリデーション if ($email == '') // もしemailが空だったら { $errors['email'] = '※ メールアドレスが未入力です'; } if ($pass == '') // もしpassが空だったら { $errors['pass'] = '※ パスワードが未入力です'; } // バリデーション突破後 if (empty($errors)) // $errorsが空だったら(=エラーが無かったら) { $dbh = connectDb(); $sql = "select * from users where email = :email and pass = :pass"; // テーブルの中に該当レコードがあるか $stmt = $dbh->prepare($sql); $stmt->bindParam(":email", $email); $stmt->bindParam(":pass", $pass); $stmt->execute(); $row = $stmt->fetch(); // レコードの取り出し // var_dump($row); if ($row) // 該当レコードがあったら { $_SESSION['id'] = $row['id']; // セッションのidにレコードのidを持たせる $_SESSION['name'] = $row['name']; // ログイン成功に飛ばす echo ' <script type="text/javascript"> setTimeout("redirect()", 0); function redirect() { location.href="login-success.php"; } </script>'; exit; } else // もし該当レコードがなかったら { $errors['fales'] = '※ メールアドレスかパスワードが間違っています'; } } } ?> <?php include 'header.php'; ?> <div class="main-wrap"> <main> <div class="main-content"> <div class="content-title">ログイン</div> <div class="contentbox"> <?php if( !empty($errors) ): ?> <ul class="error_list"> <?php foreach( $errors as $value ): ?> <li><?php echo $value; ?></li> <?php endforeach; ?> </ul> <?php endif; ?> <form action="" method="post"> <div class="formbox"> <div class="inputname"> <p>メールアドレス</p><span class="red">(※必須)</span> </div> <input type="text" name="email" class="input"> </div> <div class="formbox"> <div class="inputname"> <p>パスワード</p><span class="red">(※必須)</span> </div> <input type="password" name="pass" class="input"> </div> <input type="submit" class="btn act" value="ログイン"> <a href="register.html"><div class="tac">新規登録はこちらから!</div></a> </form> </div>
このようなコードで、xammpを使用したローカル環境では動作していたのですが、ロリポップレンタルサーバーにアップロードして動作を確認したところ、うまく機能していませんでした。
一連の処理後、ログイン成功の画面にまでは飛んだので、処理自体はされたと思うのですが、肝心のログイン状態を判定する$_SESSION['id']に値を持たすことに失敗しているらしく、ユーザーネームも変化しませんでした。
ローカルでは動いたのになぜレンタルサーバーでは動かなくなるのか分からず、よろしければ御助力お願い致します
あなたの回答
tips
プレビュー