質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
HP ProLiant

HP ProLiantは、ヒューレット・パッカード(HP)社が開発・販売を行っているx86サーバのシリーズ名。アジリティ・セキュリティに対する機能も豊富で、最適なコンピュート基盤を提供します。HPE ProLiantと表記されることもあります。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

1回答

2323閲覧

PHPでログイン機能を完成させたいです。

scoco

総合スコア5

HP ProLiant

HP ProLiantは、ヒューレット・パッカード(HP)社が開発・販売を行っているx86サーバのシリーズ名。アジリティ・セキュリティに対する機能も豊富で、最適なコンピュート基盤を提供します。HPE ProLiantと表記されることもあります。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2019/10/10 10:41

編集2019/10/10 11:20

前提・実現したいこと

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?>

=================

何が間違っているのか全く見当もつきません。
質問に対し情報足らずであれば申し訳ございません。
回答お待ちしております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

scoco

2019/10/10 10:58 編集

ご指摘ありがとうございました!
退会済みユーザー

退会済みユーザー

2019/10/10 11:01 編集

55行目の他60行目でも同じメッセージを詰めているようですが、それでも55行目と特定できた理由は何でしょうか。
scoco

2019/10/10 11:02

はい、60行目のメッセージを変えて実行してみたので特定できたと思いました!
退会済みユーザー

退会済みユーザー

2019/10/10 11:09

丸コピーじゃなくなってるし、ソースコードを読みに行くのが面倒だから、質問文中にphpコードを掲載したほうが良いよ。 それと、レンタルサーバー上のDBはどうやって構築したのだろう。CREATE TABLEとかINSERT INTOとかやった上で動かしているよね?
m.ts10806

2019/10/10 11:09

自身のコードとして質問に提示してください。
guest

回答1

0

ベストアンサー

回答に自信はないですけど、やや当てずっぽうで。

実行環境のphpのバージョンが5.5以降や7以降であれば、

require 'password.php';

の行はコメントアウトした方がよいかも。

それと、password_verify()を駆使する前に、念の為
PHP: パスワードのハッシュ - Manual
あたりをチェックして、
DBに保存しておくパスワードをpassword_hash()でそのサーバー上で生成したものを使うとよいかも。

投稿2019/10/10 12:03

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

scoco

2019/10/10 12:13

ありがとうございます!参考にして頑張ります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問