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

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

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

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

PHP

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

ログイン

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

3回答

373閲覧

php ログイン機能作成

mochio_o7

総合スコア17

MySQL

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

PHP

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

ログイン

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/12/17 07:36

編集2017/12/19 06:46

PHPにてログイン機能を作成中です。

登録フォームで名前とパスワードを登録し、ユーザーIDを適当に生成しています。(DBに保存)
ログインにはユーザーIDとパスワードの入力が必要です。

ログイン機能を作成したいのですが、できません。。

〈新規登録〉

kadai31.php

1 2<?php 3 4if(isset($_POST["name"],$_POST["pass"])){ 5 6 7$dsn = ''; 8$user = ''; 9$password = ''; 10 11$pdo = new PDO($dsn, $user, $password); 12 13 14$sql = 'CREATE TABLE articles 15( 16number INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 17name VARCHAR(100) NOT NULL, 18pass VARCHAR(100) NOT NULL, 19id VARCHAR(100) NOT NULL 20)'; 21 22$result = $pdo->query($sql); 23 24 25 26$name = ($_POST["name"]); 27$pass = ($_POST["pass"]); 28$id = uniqid(); 29 30 31$stm = $pdo -> prepare("INSERT INTO articles (number,name,pass,id) VALUES ('', :name, :pass, :id)"); 32$stm -> bindParam(':name', $name, PDO::PARAM_STR); 33$stm -> bindParam(':pass', $pass, PDO::PARAM_STR); 34$stm -> bindParam(':id', $id, PDO::PARAM_STR); 35$stm -> execute(); 36 37} 38 39?> 40 41

kadai3.php

1 2<html> 3<head> 4 <title>登録フォーム</title> 5</head> 6<body> 7 8 9<p><h2>登録フォーム</h2></p> 10 11<fieldset> 12 13<p><h4>名前とパスワードを記入してください</h4></p> 14<form action="kadai31.php" method="post"> 15<dl> 16<dt>名前</dt> 17<dd> 18<input type="text" name="name"> 19</dd> 20<dt>パスワード</dt> 21<dd> 22<input type="password" name="pass"> 23</dd> 24</dl> 25<div><dd><input type="submit" value="登録"></div></dd> 26 27</fieldset> 28 29</form> 30</body> 31</html> 32 33

〈ログイン〉

kadai.php

1 2<?php 3session_start(); 4 5$errorMessage = ""; 6 7if (isset($_POST["login"])) { 8 9if (empty($_POST["userid"])) { 10$errorMessage = 'ユーザーIDが未入力です。'; 11} else if (empty($_POST["password"])) { 12$errorMessage = 'パスワードが未入力です。'; 13} 14 15if (isset($_POST["userid"]) && isset($_POST["password"])) { 16 17$dsn = ''; 18$user = ''; 19$pas = ''; 20 21$pdo = new PDO($dsn, $user, $pas); 22 23$sql = "SELECT * FROM articls"; 24$res = $dbh -> query($sql); 25foreach($res as $row){ 26 27if($row['id'] == $_POST["userid"] && $row['pass'] == $_POST["password"]){ 28 29$login_url = "keiziban.php"; 30header("Location: {$login_url}"); 31exit(); 32 33$_POST["userid"] = $_SESSION["userid"]; 34$_POST["password"] = $_SESSION["pass"]; 35 36}else{ 37$errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。'; 38} 39} 40} 41} 42 43?> 44 45
<html> <head> <title>ログイン画面</title> </head> <body> <h2>ログイン</h2> <?php if ($errorMessage) { print '<font color="red">'.$errorMessage.'</font>'; } ?> <form action="kadai.php" method="POST"> <fieldset> <dl> <dd> ユーザID:</label><input type="text" name="userid" value=""> </dd> <br> <dd> パスワード:</label><input type="password" name="password" value=""> </dd> <br> </dl> <dd> <input type="submit" name="login" value="ログイン"> </dd> </fieldset> </form> <form action="kadai3.php"> <fieldset> <legend>新規登録フォームはこちら</legend> <input type="submit" value="新規登録"> </fieldset> </form> </body> </html>

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

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

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

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

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

masaya_ohashi

2017/12/18 01:17

ユーザの登録時の処理も記載されないと答えようがありません。あと、articleという単語は「記事」という意味であり、userを管理しているものとは思えないのですが、ユーザ名やパスワードがarticlesというテーブルに保存してあるという認識で正しいですか?
guest

回答3

0

そもそも、会員のデータを預かるシステムに耐えうる php のバージョンではないので、見直すべきです。。。
また、提示されたコードは全体的に突っ込みどころがあるので、触れません。

以下、参考資料となりますが、crypt 関数を使用したハッシュの比較方法は、マニュアルにサンプルが提示されています。

crypt

php

1 2<?php 3$hashed_password = crypt('mypassword'); // saltを自動的に生成させます 4 5/* 異なったハッシュアルゴリズムが使用された際の問題を避けるために 6 crypt()の結果全体をパスワード比較用のsaltとして渡す必要があります。 7 (上記のように標準DESに基づくパスワードハッシュは2文字のsaltを使用します 8 が、MD5に基づくハッシュは12文字のsaltを使用します) */ 9if (hash_equals($hashed_password, crypt($user_input, $hashed_password))) { 10 echo "Password verified!"; 11}

salt に注目してコードを見直してみてください。

投稿2017/12/19 04:24

編集2017/12/19 04:49
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

問題を切り分けるとよいでしょう
まずパスワードの暗号/ハッシュなしならユーザー登録が可能なところまで
作り込んで下さい
その上でデータを暗号化し、ユーザーからのログイン要求のパスワードに
対して、暗号化をしたものと整合性をチェックします

投稿2017/12/18 00:55

yambejp

総合スコア114775

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

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

0

ログインの部分で質問ということは既に登録画面があるということですかね?

まず、登録のときに、入力されたパスワードはcrypt関数で暗号化されていると思います!
そして、暗号化したパスワードをデータベースへ登録していると思います。

//登録する時のデータの流れ 入力したパスワード「abcd1234」 ↓ 暗号化したパスワード「aaFUCs.r.39dY」 ↓ 暗号化した値をデータベースに登録する

つまり、パスワードの値は入力した値と、データベースの値は違う文字列になります!

今度はログインの時ですが
まずは普通にIDとパスワードを入力してもらいます。
ここで入力してもらうパスワードは「abcd1234」が期待されます。
IDをキーとしてデータベースからレコードを取り出した時
データベースに登録されているパスワードの値は「aaFUCs.r.39dY」です。

ですので、単純に比較すると結果はNGとなります!

「abcd1234」と「aaFUCs.r.39dY」はイコールではありません!

このままですと、正しいパスワードをいれてもログインできないので
正しいかどうかチェックするために、入力されたパスワードを暗号化してから比較します。

「abcd1234」を暗号化する →「aaFUCs.r.39dY」が得られる パスワードが正しいか確認する 「aaFUCs.r.39dY」と「aaFUCs.r.39dY」はイコール!

すみません、うまく説明できた自信ないんですが
登録の時は「A」を「B」に変換して登録している
チェックする時は変換された「B」を基準に確認するので、再度「A」を「B」に変換する作業が必要だということをお伝えしたいです。
そしてその変換する関数として今回質問されているcryptpassword_hashが使われています。
ですので、作り方としてはあっています!

投稿2017/12/18 14:57

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問