前提・実現したいこと
PHP、MySQLを使い自作システムを作っています。
会員制にするためにログイン機能(Login.php)を付けたいのですが、ログイン画面だけがうまくいきません。
会員新規登録画面(signin.php)はDBにもちゃんと登録できています。
発生している問題・エラーメッセージ
実行画面自体にエラーメッセージはなし。
ソースの55行目、”ユーザーIDあるいはパスワードに誤りがあります。”が表示されます。
MAMPを使ってローカルで動作させた時は問題ありませんでしたが、レンサバを借りてサイトを立ち上げると今の状態に陥ってしまいました。
該当のソースコード
↓こちらのLogin.php 丸コピしました。(勿論、DB名など変えています)
参考にしたサイト
=================
PHP
1 2<?php 3require 'password.php'; // password_verfy()はphp 5.5.0以降の関数のため、バージョンが古くて使えない場合に使用 4// セッション開始 5session_start(); 6$db['host'] = "localhost"; // DBサーバのURL 7$db['user'] = "hogeUser"; // ユーザー名 8$db['pass'] = "hogehoge"; // ユーザー名のパスワード 9$db['dbname'] = "loginManagement"; // データベース名 10// エラーメッセージの初期化 11$errorMessage = ""; 12// ログインボタンが押された場合 13if (isset($_POST["login"])) { 14 // 1. ユーザIDの入力チェック 15 if (empty($_POST["userid"])) { // emptyは値が空のとき 16 $errorMessage = 'ユーザーIDが未入力です。'; 17 } else if (empty($_POST["password"])) { 18 $errorMessage = 'パスワードが未入力です。'; 19 } 20 if (!empty($_POST["userid"]) && !empty($_POST["password"])) { 21 // 入力したユーザIDを格納 22 $userid = $_POST["userid"]; 23 // 2. ユーザIDとパスワードが入力されていたら認証する 24 $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']); 25 // 3. エラー処理 26 try { 27 $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)); 28 $stmt = $pdo->prepare('SELECT * FROM userData WHERE name = ?'); 29 $stmt->execute(array($userid)); 30 $password = $_POST["password"]; 31 if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 32 if (password_verify($password, $row['password'])) { 33 session_regenerate_id(true); 34 // 入力したIDのユーザー名を取得 35 $id = $row['id']; 36 $sql = "SELECT * FROM userData WHERE id = $id"; //入力したIDからユーザー名を取得 37 $stmt = $pdo->query($sql); 38 foreach ($stmt as $row) { 39 $row['name']; // ユーザー名 40 } 41 $_SESSION["NAME"] = $row['name']; 42 header("Location: Main.php"); // メイン画面へ遷移 43 exit(); // 処理終了 44 } else { 45 // 認証失敗 46 $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。'; 47 } 48 } else { 49 // 4. 認証成功なら、セッションIDを新規に発行する 50 // 該当データなし 51 $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。'; 52 } 53 } catch (PDOException $e) { 54 $errorMessage = 'データベースエラー'; 55 //$errorMessage = $sql; 56 // $e->getMessage() でエラー内容を参照可能(デバッグ時のみ表示) 57 // echo $e->getMessage(); 58 } 59 } 60} 61?>
=================
何が間違っているのか全く見当もつきません。
質問に対し情報足らずであれば申し訳ございません。
回答お待ちしております。
回答1件
あなたの回答
tips
プレビュー