• ベストアンサー

PHPを使用してパスワード認証の画面を作成したいと思っております。

現在運営しているWEBサイトのページに、パスワードのみのログイン画面へのリンクを張り、 パスワード認証が成功した場合は会員専用ページ(yes.html)に飛び、失敗の場合はエラーページ(no.html)に飛ばすようにしたいと思っております。 他でソースを教えていただいて、下記のように作成してみたのですが、 56行目の</html>の行でエラー(Parse error: on line 56)が出てしまいます。 私はまったく知識がありませんので、どこがおかしいのか見当がつきません。 知識をお持ちの方、どなたかご教示いただけませんでしょうか。 よろしくお願い申し上げます。 <?php //まずパスワード受け取ってない //かりにPOSTで送られているとすると $post_pass = $_POST['password']; $user_pass = "1111"; $ok = "./yes.html"; $error = "./no.html"; $script = "./login2.php"; $doc_title = "テスト"; if(!isset($ver)) { $ver = '1.05.1'; } if(!isset($pass)) { $pass = $user_pass; //これだと$passも1111 だし$user_passも1111 //だから下で1111==1111でOKに行く if($user_pass == $post_pass){ if($passwd == $pass){ header("Location: $ok"); }elseif($passwd){ header("Location: $error"); } } ?> <html> <head> <title><?php echo $doc_title; ?></title> <meta http-equiv="Content-Type" content="text/html;Charset=Shift_JIS"> <script type="text/javascript"> <!-- function check() { if(document.formxx.passwd.value.length == 0) { alert("パスワードが入力されてません"); return false; } return true; } //--> </script> </head> <body> <h3><?php echo $doc_title; ?></h3> <form action="<?php echo $script; ?>" method="post" name="formxx"> <input type="password" name="passwd" size="15"> <input type="submit" value=" login " onClick="check()"> <form> </body> </html>

質問者が選んだベストアンサー

  • ベストアンサー
  • honoka69
  • ベストアンサー率50% (6/12)
回答No.5

PHP側とHTML側で値の受け渡しがうまくできていないと思われます。 ものすごく単純にしてしまいましたが、ソースを以下に書き換えれば 試してないですが、動くと思います。 <?php $post_pass = $_POST['passwd']; $user_pass = "1111"; $ok = "./yes.html"; $error = "./no.html"; $script = "./login2.php"; $doc_title = "テスト"; if ( $_POST['pass_check'] === "true" && $post_pass != "" ) { if($user_pass == $post_pass){ header("Location: $ok"); }else{ header("Location: $error"); } } ?> <html> <head> <title><?php echo $doc_title; ?></title> <meta http-equiv="Content-Type" content="text/html;Charset=Shift_JIS"> <script type="text/javascript"> <!-- function check() { if(document.formxx.passwd.value.length == 0) { alert("パスワードが入力されてません"); return false; } return true; } //--> </script> </head> <body> <h3><?php echo $doc_title; ?></h3> <form action="<?php echo $script; ?>" method="post" name="formxx"> <input type="password" name="passwd" size="15"> <input type="hidden" name="pass_check" value="true"> <input type="submit" value=" login " onClick="check()"> </form> </body> </html>

account199
質問者

お礼

ご回答いただきまして、ありがとうございます。 いただきましたソースで動作確認をいたしましたところ、問題なく動作いたしました。 ご教示いただきましたソースで勉強し、今後に役立てたいと思います。 知識がなくて困っておりましたので、本当に助かりました。 ありがとうございました。

その他の回答 (4)

  • coopy72v
  • ベストアンサー率12% (1/8)
回答No.4

あまりPHPは詳しくないのですが、とりあえず括弧が足りなかったので答えさせていただきました。 ところで変数名にいくつかわからないところがあるのですが $_POST['password']とありますが、passwordというフォームはどこにありますか?passwdではないのでしょうか?(このとき使うのはformのinputタグで指定しているname要素の値ですので…。) また、$passwdも どこから出てきましたか? //これだと$passも1111 だし$user_passも1111 //だから下で1111==1111でOKに行く とありますが、$pass==$user_passという比較条件はどこにありますか? user_passというのは何でしょう 仮にそれと受け取ったパスが同じならokに飛んでいいのなら、 $user_pass == $post_passのif文だけでいいような気がします どっちにしろ、内側のif文で利用しているpasswdの定義箇所がないのと、 ただのelseでなくelseifであり、しかもその条件も$passwdならば判定はfalse どちらの結果にも入らずスルーされた結果かと思います。 試しに、elseifの条件結果の後にelseも加えたらいかがでしょうか? 結果はリンクでも文字出力でもかまいませんが、そうすることでどの条件まで入っているかなど、はっきり見る事ができます (この場合外側のif文をスルーしているから何も起きないのか、内側のif文で条件一致がないから何も起きないのかを判断できます) お役に立てなかったら申し訳ありません

account199
質問者

お礼

ご指摘いただきまして、誠にありがとうございます。 今回は時間がなかったので、他のご回答者様からご教示いただきましたソースで解決を図ろうと思います。 ご回答いただきました内容につきましては、今後勉強して身に着けていこうと思っております。 ありがとうございました。

  • honoka69
  • ベストアンサー率50% (6/12)
回答No.3

if(!isset($pass)) { $pass = $user_pass; ↓上の行を if(!isset($pass)){ $pass = $user_pass; } に変更してみてください。 ------------------------------------------------------------ <form action="<?php echo $script; ?>" method="post" name="formxx"> <input type="password" name="passwd" size="15"> <input type="submit" value=" login " onClick="check()"> <form> ↓上記最後の行を <form action="<?php echo $script; ?>" method="post" name="formxx"> <input type="password" name="passwd" size="15"> <input type="submit" value=" login " onClick="check()"> </form> に変更でどうでしょうか?

account199
質問者

お礼

今回は時間がなかったので、他のご回答者様からご教示いただきましたソースで解決を図ろうと思います。 ご教示いただきまして、誠にありがとうございました。

account199
質問者

補足

ご回答いただきまして、ありがとうございます。 ご指摘いただきました箇所を変更して動作確認を行ってみましたところ、エラーは出なくなりました。 しかしながら、ログイン成功画面(yes.html)及びログイン失敗画面へ(no.html)飛ぶことができませんでした。 その他の箇所に問題があるのでしょうか。 誠に恐縮ですが、該当箇所があればご指摘いただけませんでしょうか。 よろしくお願い申し上げます。

  • mizutaki
  • ベストアンサー率33% (111/333)
回答No.2

17,21,23行目にif文がありますが、それの一つが閉じられていない

account199
質問者

お礼

今回は時間がなかったので、他のご回答者様からご教示いただきましたソースで解決を図ろうと思います。 ご教示いただきまして、誠にありがとうございました。

account199
質問者

補足

ご指摘いただきまして、ありがとうございます。 17,21,23行目をチェックいたしまして、17行目の if(!isset($pass)) {$pass = $user_pass; が閉じれていなかった様ですので、 if(!isset($pass)){$pass = $user_pass;} という形で閉じてみましたところ、エラーは出なくなりました。 しかしながら、ログイン成功画面(yes.html)及びログイン失敗画面へ(no.html)飛ぶことができませんでした。 その他の箇所に問題があるのでしょうか。 誠に恐縮ですが、該当箇所があればご指摘いただけませんでしょうか。 よろしくお願い申し上げます。

  • coopy72v
  • ベストアンサー率12% (1/8)
回答No.1

</html>の上、if文の}が1こ足らない とか、ありませんか?

account199
質問者

お礼

今回は時間がなかったので、他のご回答者様からご教示いただきましたソースで解決を図ろうと思います。 ご教示いただきまして、誠にありがとうございました。

account199
質問者

補足

ご回答いただき、誠にありがとうございます。 他のご回答者様にご指摘いただき、}の漏れをチェックして動作確認を行ってみましたところ、エラーは出なくなりました。 しかしながら、ログイン成功画面(yes.html)及びログイン失敗画面へ(no.html)飛ぶことができませんでした。 その他の箇所に問題があるのでしょうか。 誠に恐縮ですが、該当箇所があればご指摘いただけませんでしょうか。 よろしくお願い申し上げます。

関連するQ&A