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

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

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

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

PHP

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

Q&A

解決済

3回答

531閲覧

password_hashの実装

akoro

総合スコア27

MySQL

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

PHP

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

0グッド

0クリップ

投稿2019/01/25 02:11

プログラミング独学の初心者、MySQL初めて数日の者です。

入力フォームから取得したデータをMySQLに送るプログラミングで、操作確認済みです。
しかしパスワードがハッシュ化されていなくて、実装しようと試みたところでつまづいてしまいました。

register.php

1$Name=filter_input(INPUT_POST,"Name"); 2$Ad=filter_input(INPUT_POST,"Ad"); 3$Pw=filter_input(INPUT_POST,"Pw"); 4 5 //プリペアドステートメント 6 $stmt = $mysqli->prepare('INSERT INTO user_list (user_name,user_ad,user_pw) VALUES (?,?,?)'); 7 8 if($stmt){ 9 //プレースホルダへ実際の値を設定する 10 $stmt->bind_param('sss',$Name,$Ad,$Pw); 11 12 if($stmt->execute()){ 13 echo "お名前は".$Name."さん<br>"; 14 echo "メールアドレスは".$Ad."<br>"; 15 echo "で登録いたしました。<br><br>"; 16 }else{ 17 echo $stmt->errno . $stmt->error; 18 } 19 20 //ステートメント切断 21 $stmt->close(); 22 }else{ 23 echo $mysqli->errno . $mysqli->error; 24 } 25

以下参考ページと実際に使用したい部分抜粋しました。
参考ページ

<?php /* 引数バリデーションとか、省略 */ // ハッシュを作る $hash = password_hash($_REQUEST['password'], PASSWORD_BCRYPT); // 保存する $sql = 'INSERT INTO users (name, hash) VALUES(:name, :hash)'; $stmt = $pdo->prepare($sql); $stmt->execute([ ':name'=>$_REQUEST['name'], ':hash'=>$hash ]); /* 以降の処理 */

この$stmt->execute([ ':name'=>$_REQUEST['name'], ':hash'=>$hash ]);を
上記の自分の式に埋め込みにはどう書けばいいでしょうか?

また、$stmt = $pdo->prepare($sql);にあたるものもないかと思いますが、これはどういった役割を果たしているのでしょうか?

ご教授願います。

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

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

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

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

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

yoorwm

2019/01/25 02:35

コメントまで書いてあるのに理解出来ないのでしょうか? (もし、そうだとするとここで答えて貰っても理解できるのですか?)
m.ts10806

2019/01/25 03:31

PHPマニュアルを読むようにアドバイスして「読みます」とコメントいただきましたが、結局読んで理解するところまでいっていないということでしょうか。 最近誰かにもアドバイスしましたが、マニュアルも読まずにネットからコピペのツギハギコードのままで進むといずれ自身の手にはおえなくなって、破綻しますよ。
akoro

2019/01/25 04:15

マニュアルが難しくて理解できない記述が多いのが現状です。 もちろん目は通すようにしております。
m.ts10806

2019/01/25 04:19

結局ですがPHPに関する質問に回答する場合、PHPマニュアルを回答の根拠や参照先として置く事が非常に多いです。PHPマニュアル以上に正しい情報が載っている場所はないからです。 ということはPHPマニュアルをきちんと理解できないと結局解決には至らないということになります。 まずは「辞書代わりに使う」認識で進めてください。 辞書の説明文でわからない言葉がでてきたら調べたり人に聞いたりしてきたと思います。それと同じです。
akoro

2019/01/25 04:35

辞書代わりに使用し、調べたうえで容量を得なかったのでで、聞くのがこういった場かと思い質問させていただいた次第です。 無知&不勉強ゆえに不快にさせてしまったようで失礼いたしました。
m.ts10806

2019/01/25 04:47

時によりアドバイスが無駄になります。となると段々回答する人が少なくなっていきますのでご注意ください。 PHPはPHPマニュアルが絶対です。
akoro

2019/01/25 04:50

気をつけます、いつも回答ありがとうございます。
guest

回答3

0

PDOとmysqliではまるで別物なので、下のコードは参考になりません。
内容を理解せずにコピペで解決するとロクなことがないので、自分でわかっていない関数などはちゃんとマニュアルで調べて理解して下さい。

http://php.net/manual/ja/book.pdo.php
http://php.net/manual/ja/book.mysqli.php

今回の要件については、password_hash()が何なのかわかっていればできそうなものですが、おそらく上のコードも自作ではなくコピペしたものなんでしょうね。

投稿2019/01/25 02:17

kunai

総合スコア5405

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

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

akoro

2019/01/25 04:18

そうなんですね、ご指摘ありがとうございます。 マニュアルのページもまだうまく解読できないでのすが、違うものだという前提で検索かけましたら、違いを説明しているページもたくさん存在していたので調べてみます。
m.ts10806

2019/01/25 04:28

横からすみません。 >内容を理解せずにコピペで解決するとロクなことがないので というアドバイスがあるのに理解しないまま違いを説明しているページを探してるわけですよね。本末転倒では?
akoro

2019/01/25 04:37

比較ページのほうがことこまかに何を入力するのか記載もあったり参考にしているだけです。 コピペが解決になるとは思っていませんが、一からつくるの困難なので参考までにいろいろな方のプログラミングを拝見はして、時には真似しております。 ご指摘ありがとうございます。
guest

0

自己解決

PHPマニュアルのリンク
PDO
mysqli

以下で解決

//プリペアドステートメント $stmt = $mysqli->prepare('INSERT INTO user (user_name,user_ad,user_pw) VALUES (?,?,?)'); if($stmt){ //プレースホルダへ実際の値を設定する $stmt->bind_param('sss',$Name,$Ad,$hash); if($stmt->execute()){ echo "お名前は".$Name."さん<br>"; echo "メールアドレスは".$Ad."<br>"; echo "パスワードは".$Pw."<br>"; echo "で登録いたしました。<br><br>"; }else{ echo $stmt->errno . $stmt->error; }

自分用メモ:PDOはvalueに?か:name、mysqliは?

投稿2019/01/25 04:48

編集2019/01/30 03:09
akoro

総合スコア27

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

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

m.ts10806

2019/01/25 04:55

回答に残すのでしたらせめてphpマニュアルへのリンクとコードのインデントはきちんとしてください。 あとから同じような問題を抱えた人が見たときにまず目にするのは「ベストアンサー」になっている回答です。
akoro

2019/01/25 05:14

訂正致しました。
m.ts10806

2019/01/25 05:16

コードのインデント… 私のコメント分かりづらかったでしょうか。
akoro

2019/01/25 09:05

これでインデントそろってますでしょうか? 普段と違う媒体から操作したので、画面上と少しずれているようでして。 お手数おかけします。
m.ts10806

2019/01/25 09:14

表示を見れば明らかかと思いますが…(一行目と二行目以降で明らかにずれてますよね)。編集画面でプレビュー確認するようにしてください。 回答のコードを編集するのではなく実際のコードを調整したものをコピペしたほうがいいですね。
akoro

2019/01/25 10:48

後程パソコンからコピペ致します。
guest

0

PHP側でやってもよいし、mysql側でやってもよいです

投稿2019/01/25 02:14

yambejp

総合スコア114505

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

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

akoro

2019/01/25 04:27

mysql側でも設定できるのは知らなかったです、方法調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問