- ベストアンサー
フォーム入力パスワードとランダム生成されたパスワードを比較
現在フォームから入力パスワードと PHP でランダム生成された パスワードを比較するスクリプトを組んでます。 スクリプト自体はテスト用ですので フォーム入力用のパスワードは HTML 上に表示されるように なっており、それをコピー&ペーストすれば 良いようにはなっているのですが、どうやっても 比較結果が true になりません。 もはやどこが間違っているのかわかりません。 どなたかお教え頂ければ大変助かります。 何卒、宜しくお願い致します。 ファイル構成は 3つです↓ ran_pass.html ran_pass.php kekka.php --<< 1. フォーム入力 HTML [ ran_pass.html ] ↓ >>------------------------------------------------------------------------------- <html> <head> <title>名前入力</title> </head> <body> <u>名前入力</u><br> <form action="ran_pass.php" method="post" name=""> 名前 : <input type="text" name="name" size="24" border="0"> <input type="submit" name="" value="実行" border="0"> </form> </body> </html> --<< 2. ランダムパスワード生成 [ ran_pass.php ] ↓ >>--------------------------------------------------------------------------- <html> <head> <title>ランダムパスワード生成</title> </head> <body> <?php //フォームからのデータを $name に代入↓ // $name = $_POST[name]; //ランダムパスワードを生成 ↓// function rand_passwd($len = 8, $str = '0123456789abcdefghijklmnopqrstuvwxyz'){ $password = ''; srand ((float) microtime() * 10000000); for($i = 0; $i < $len; $i ++){ $password .= substr($str, rand(0, strlen($str) - 1), 1); } return $password; } //生成されたランダムパスワードを $rpass に代入 ↓// $rpass = rand_passwd(8) . "\n"; $htm = <<< EOD <u>ランダムパスワード生成</u><br> <form action="kekka.php" method="post" name=""> 名前 : $name さん<br><br> パスワード : <input type="text" name="ran_pass" size="24" border="0"> <input type="submit" name="" value="実行" border="0"><br> <input type="hidden" name="name" value="$name" border="0"> <input type="hidden" name="rpass" value="$rpass" border="0"><br> ( ※ パスワードは $rpass です。) </form> EOD; print $htm; ?> </body> </html> --<< 3. パスワード比較 [ kekka.php ] ↓ >>-------------------------------------------------------------------------------------- <html> <head> <title>パスワード認証結果</title> </head> <body> <?php //フォームからのデータを代入↓ // $name = $_POST[name]; $ran_pass = $_POST[ran_pass]; $rpass = $_POST[rpass]; //ランダムパスワードを生成 ↓// if($ran_pass == $rpass){ $kekka = "【 成功 】 パスワードが一致しました。";} else{$kekka = "【 失敗 】 パスワードが一致しませんでした。";} print $kekka; ?> </body> </html>
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
フォームからの入力データにスペースが交じっている可能性も考えて、トリムをかけてから比較するといいかも? if($ran_pass == $rpass){ $kekka = "【 成功 】 パスワードが一致しました。";} else{$kekka = "【 失敗 】 パスワードが一致しませんでした。";} の前に、以下を追加で。 $ran_pass = trim($ran_pass); これでダメだった場合、とにかく変数に何が入っているのか出力して確認してみないことには。><
その他の回答 (2)
- Wabisuke_S
- ベストアンサー率55% (5/9)
テストでデータを画面に表示したら、しっかりそのソースも表示して完全に同じものかどうか確認してみましょう。 画面上に表示しただけでは見えないものも存在します。 例えば『改行』。 改行コード入りの文字とそうでない文字は、比較しても同じにはみなされません。 つまり、パスワードが一致しないのは、以下の部分でパスワードに追加している”\n”が原因ですね。 //生成されたランダムパスワードを $rpass に代入 ↓// $rpass = rand_passwd(8) . "\n";
お礼
うまく行きました!! 色々と有難うございました。 感謝します。
- SAYKA
- ベストアンサー率34% (944/2776)
とりあえずkekka.phpで ran_pass と rpass が何になってるか出力してみたらどうかな ゴミの混入の可能性もあるから文字数とかも見た方が良いかも。
お礼
ようやく解決致しました。 有難うございました。
補足
( kekka.php ) で ( $ran_pass ) と ( $rpass ) が 何になってるかをフィールド内部に 表示させて調べてみましたが、スペース等は 何も含まれておりませんでした。 また変数の型違いという可能性も考え 調べてみましたが、比較対照の関数2つは共に string でした。 また更に変数を定数化して比較を行ってみましたが 結果は一致しませんでした。 他に原因として考えれるものがあればお教え下さいませ。 またもっと効率の良いパスワード生成方法等あれば お教え頂けると有難いです。 宜しくお願い致します。
お礼
ご指摘頂いた内容はかなり勉強になりました。 ようやく解決致しました。 色々と有難うございました。
補足
$ran_pass = trim($ran_pass); も入れてましたし、 変数内に何が代入されているかもフィールド内部に 表示させて調べてみましたが、スペース等は 何も含まれておりませんでした。 また変数の型を調べてみたのですが 比較対照の2つの変数は共に string でした。 また更に変数を定数化して比較を行ってみましたが やはりこちらも結果は一致しませんでした。 他に原因として考えれるものがあればお教え下さいませ。 宜しくお願い致します。