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

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

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Q&A

解決済

1回答

1945閲覧

phpでログイン機能を作りたい

aynsi

総合スコア7

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

0グッド

0クリップ

投稿2016/05/10 14:53

###前提・実現したいこと
PHPでログインフォームを作っています。
http://stackoverflow.com/questions/26592629/using-pdo-and-sessions-to-create-a-login-form?answertab=votes#tab-top
上記のサイトを参考に作ってみました。

###発生している問題・エラーメッセージ

Notice: Undefined index: name in******/session.php on line 10 Warning: Cannot modify header information - headers already sent by (output started at ******/session.php:10) in *******/session.php on line 24

###該当のソースコード

【loginform.html】 <!doctype html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Loginform</title> </head> <body> <form role="form" class="omb_loginForm" action="login.php" autocomplete="off" method="POST"> <div class="input-group"> <span class="input-group-addon"><i class="fa fa-user"></i></span> <input type="email" class="form-control" name="email" placeholder="Email"> </div> <span class="help-block"></span> <div class="input-group"> <span class="input-group-addon"><i class="fa fa-lock"></i></span> <input type="password" class="form-control" name="password" placeholder="Password"> </div> <span class="help-block"></span> <button class="btn btn-lg btn-primary btn-block" name="submit" type="submit">Login</button> </form> </body> </html> 【dashboard.php】 <?php include('session.php'); ?> <!DOCTYPE html> <html> <head> <title>Your Home Page</title> <link href="style.css" rel="stylesheet" type="text/css"> </head> <body> <div id="profile"> <b id="welcome">Welcome : <i><?php echo $login_session; ?></i></b> <b id="logout"><a href="logout.php">Log Out</a></b> </div> </body> </html> 【session.php】 <?php $dbhost = "localhost"; $dbname = "abc"; //(←仮です) $dbuser = "root"; $dbpass = "wood"; //(←仮です) $conn = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass); session_start(); $user_check=$_SESSION['login_user']; $result = $conn->prepare("SELECT * FROM abc WHERE email= :usercheck"); $result->execute(array(":usercheck"=>$user_check)); $row = $result->fetch(PDO::FETCH_ASSOC); $login_session =$row['email']; $user_id =$row['id']; $user_passwords = $row['password']; if(!isset($login_session)) { $conn = null; header('Location: loginform.html'); } ?>

###疑問
session.phpの
$user_check=$_SESSION['login_user'];
の”login_user”がどこからきているのかがわかりません。

###補足情報(言語/FW/ツール等のバージョンなど)
言語 php : 5.6.10
エディタ phpstorm : 10.0.3

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

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

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

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

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

guest

回答1

0

ベストアンサー

投稿2016/05/10 16:12

gik

総合スコア152

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

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

aynsi

2016/05/10 16:59

ご返信いただき、ありがとうございます。 紹介いただいたサイトを真似して作ってみたのですが、 passwordのハッシュ化の部分でエラーが出ました。 *ハッシュ化のためにGithub(https://github.com/ircmaxell/password_compat)でpassword_compatをダウンロードし,フォルダにlib/password.phpを入れました。 ご回答をいただけるとありがたいです。 err Notice: Undefined variable: db_hashed_pwd in ***/login.php on line 57 "ユーザIDあるいはパスワードに誤りがあります。" 【login.php】 <?php require 'lib/password.php'; // セッション開始 session_start(); $db['host'] = "localhost"; // DBサーバのurl $db['user'] = "root"; $db['pass'] = "****"; $db['dbname'] = "****"; // エラーメッセージの初期化 $errorMessage = ""; // ログインボタンが押された場合 if (isset($_POST["login"])) { // 1.ユーザIDの入力チェック if (empty($_POST["userid"])) { $errorMessage = "ユーザIDが未入力です。"; } else if (empty($_POST["password"])) { $errorMessage = "パスワードが未入力です。"; } // 2.ユーザIDとパスワードが入力されていたら認証する if (!empty($_POST["userid"]) && !empty($_POST["password"])) { // mysqlへの接続 $mysqli = new mysqli($db['host'], $db['user'], $db['pass']); if ($mysqli->connect_errno) { print('<p>データベースへの接続に失敗しました。</p>' . $mysqli->connect_error); exit(); } // データベースの選択 $mysqli->select_db($db['dbname']); // 入力値のサニタイズ $userid = $mysqli->real_escape_string($_POST["userid"]); // クエリの実行 $query = "SELECT * FROM gs_an_table WHERE name = '" . $userid . "'"; $result = $mysqli->query($query); if (!$result) { print('クエリーが失敗しました。' . $mysqli->error); $mysqli->close(); exit(); } while ($row = $result->fetch_assoc()) { // パスワード(暗号化済み)の取り出し $db_hashed_pwd = $row['password']; } // データベースの切断 $mysqli->close(); // 3.画面から入力されたパスワードとデータベースから取得したパスワードのハッシュを比較します。 //if ($_POST["password"] == $pw) { if (password_verify($_POST["password"], $db_hashed_pwd)) { // 4.認証成功なら、セッションIDを新規に発行する session_regenerate_id(true); $_SESSION["USERID"] = $_POST["userid"]; header("Location: main.php"); exit; } else { // 認証失敗 $errorMessage = "ユーザIDあるいはパスワードに誤りがあります。"; } } else { // 未入力なら何もしない } } ?> <!doctype html> <html> <head> <meta charset="UTF-8"> <title>サンプルアプリケーション</title> </head> <body> <h1>ログイン機能 サンプルアプリケーション</h1> <!-- $_SERVER['PHP_SELF']はXSSの危険性があるので、actionは空にしておく --> <!--<form id="loginForm" name="loginForm" action="<?php print($_SERVER['PHP_SELF']) ?>" method="POST">--> <form id="loginForm" name="loginForm" action="" method="POST"> <fieldset> <legend>ログインフォーム</legend> <div><?php echo $errorMessage ?></div> <label for="userid">ユーザID</label> <!--<input type="text" id="userid" name="userid" value="<?php echo htmlspecialchars($_POST["userid"], ENT_QUOTES, 'UTF-8'); ?>">--> <input type="text" id="userid" name="userid"> <br> <label for="password">パスワード</label><input type="password" id="password" name="password" value=""> <br> <input type="submit" id="login" name="login" value="ログイン"> </fieldset> </form> </body> </html>
gik

2016/05/10 17:17 編集

PHP5.5から使える暗号化「password_hash」を「password_compact」を使って以前のバージョンで利用すると書いてあり、 errNotice: Undefined variable: db_hashed_pwd in ***/login.php on line 57 "ユーザIDあるいはパスワードに誤りがあります。" *ハッシュ化のためにGithub(https://github.com/ircmaxell/password_compat)でpassword_compatをダウンロードし,フォルダにlib/password.phpを入れました。 は必要ないのでは。 php5.6ですよね? あと環境を教えてください。
aynsi

2016/05/11 12:52

ご返信ありがとうございます。 お返事できていなかったようで、遅れてしまいすみません。 php5.6.10なので、password_compatは必要ないようです。 passwordのハッシュ化の方法が理解できず、同じエラーがでている状況です。 環境というのはブラウザのことでしょうか? ブラウザはChromeです。 また使用エディタはphpstormです。 違っておりましたらすみません。 よろしくお願い致します。
gik

2016/05/11 13:21 編集

環境はosです。 あとデータベースの設定とかできていますか? http://516.jp/2827 こちらのほうが詳しくのっているので、こちらを使ってみてください。 デモ画面もあります。 すいません
aynsi

2016/05/12 17:39

何度もご返信ありがとうございます。 OSはYosemiteのバージョンが10.10.4です。 リンクを拝見したりしてみたところ、phpの理解が全然足りておらず、 意味が分からない部分が多くあったので、 基礎を勉強してからまたトライしたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問