• ベストアンサー

パスワード認証ページ作りたい(basic認証でない)

フリーのものを使ってパスワード認証ページ(basic認証でない)を作ろうとしています。しかし、うまく動いてくれません…何がいけないのでしょうか?どうかご教授下さい。ちなみにここのサンプルです。 http://www.jetman.jp/passwd.php <?php $user_pass = "test"; $ok = "ok.htm"; $error = "error.htm"; $script = "login.php"; $doc_title = "テスト"; if(!isset($ver)) { $ver = '1.05.1'; } if(!isset($pass)) { $pass = $user_pass; // パスを指定 if($passwd == $pass) { header("Location: $ok"); // OKなら } elseif($passwd) { header("Location: $error"); // NGなら } } ?> <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> <p style="font-size:10px"><a href="http://www.jetman.jp/">プチログイン version:<? echo $ver; ?></a></p> </body> </html>

  • PHP
  • 回答数4
  • ありがとう数5

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

  • ベストアンサー
  • yexob328
  • ベストアンサー率25% (1/4)
回答No.3

<?php~?>の間のどこでもいいので phpinfo();と書いてそのファイルをブラウザとかで見てみてください。 表みたいなのが表示されますので、その中から「register_globals」を検索などで探し、onかoffか確認します。

gaopigaopi
質問者

お礼

ありがとうございます!! とうとう出来ました!涙でそうです!!! こんな初歩的な質問にお付き合い戴き、感謝いたします。ありがとうございました。

その他の回答 (3)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.4

直接の回答ではありませんが・・ 「php初心者だから」とおっしゃるのであれば、少なくとも一定以上古い世代のphpスクリプトを読む(使う)べきではありません。register_globalsが「標準でoff」になったのは4.2.0以降ですから、かなり以前のことです(私は4.3以降のバージョンしか知りません)。 慣れてくれば「古いバージョンでの書き方=書替えが必要だ」というのはわかりますが、最初は無理でしょうから。正直な話「今から覚える」のであれば、php5以降に特化しても問題ないと思います。 #htmlやJavaScriptのリファレンスだって古いものは使えなくなってしまうのですから。 あと・・どういう学習方法を採られているかわかりませんが(phpinfoなどで)実行環境をチェックするのは基本なので、この機会に覚えてください。マニュアルで関数を調べるとバージョンごとの対応も書かれています。

gaopigaopi
質問者

お礼

>「php初心者だから」とおっしゃるのであれば、少なくとも一定以上古い世代のphpスクリプトを読む(使う)べきではありません。register_globalsが「標準でoff」になったのは4.2.0以降ですから、かなり以前のことです(私は4.3以降のバージョンしか知りません)。 おっしゃる通りです。phpに手を出し始めたのは最近で、フレームの代わりにincludeでメニューを表示したり、ネット上の無料サンプルのほぼ丸写しでメールフォームを作ったりしていた程度です。なので、恥ずかしい話なのですが、phpに古い世代があること自体知りませんでした。このパスワード認証も、たまたま見つけたサンプルの丸写しなので、shimix様から教えて戴いて、初めてそれが古いphpだと分かったのです。本当にありがとうございます。 >あと・・どういう学習方法を採られているかわかりませんが (phpinfoなどで)実行環境をチェックするのは基本なので、この機会に覚えてください。マニュアルで関数を調べるとバージョンごとの対応も書かれています。 はい、良い勉強になりました。本当にありがとうございます。

  • yexob328
  • ベストアンサー率25% (1/4)
回答No.2

phpinfo(); を実行して、register_globalsを確認するとよいと思います。 実行中のサーバがregister_globals=offだったら $passwd → $_POST['passwd'] としたらよいのではないでしょうか。

gaopigaopi
質問者

お礼

回答ありがとうございます。 しかし、本当に申し訳ないのですが、私はphp初心者なので、~を実行して…と仰られても、どこにどう書き込めばいいのか全く分かりません。 $passwd → $_POST['passwd'] のように、書いて戴けると助かります、どうか宜しくお願い致します。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

ひょっとして、こちら↓と同じですか?   http://okwave.jp/qa3770065.html postされた内容を変数に展開していないようですが、テストされている環境はregister_globalsがonじゃないですよね?   http://www.php.net/manual/ja/ini.core.php#ini.register-globals

gaopigaopi
質問者

お礼

回答ありがとうございます! はずかしながら、仰って戴いたことが何のことだかわからなかったのですが、他の回答者の方々に教えて戴き、分かりました。かなり混乱していて、同じような質問をしてしまっていました。ありがとうございます。

関連するQ&A

  • パスワード認証 ページに飛べない

    パスワード認証のページを作っています。 パスワードがあっているかどうかで、ページに飛ぶようにしたいのですが、どうも上手くいきません。どこがいけないのでしょうか? $user_pass = "test"; // パスワード $ok = "./ok.htm"; // 認証クリア後に飛ばす相対パス。 $error = "./error.htm"; // 認証ミス後に飛ばす相対パス。 $script = "./login.php"; // このファイル名 $doc_title = "テスト"; // タイトル /*-----------------------------------------------------------*/ /* ログイン処理 /*-----------------------------------------------------------*/ if(!isset($ver)) { $ver = '1.05.1'; } if(!isset($pass)) { $pass = $user_pass; // パスを指定 if($passwd == $pass) { header("Location: $ok"); // OKなら } elseif($passwd) { header("Location: $error"); // NGなら } } ?>

    • ベストアンサー
    • PHP
  • 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>

    • ベストアンサー
    • PHP
  • WEBサイトへのログイン画面の設置について。

    現在運営しているWEBサイトのページに、パスワードのみのログイン画面へのリンクを張り、 PHPは下記(http://△△△.com/test/login.php)に設置し、パスワード認証が成功した場合は 会員専用ページ(http://△△△.com/test/○○○.html)に飛び、 失敗の場合はエラーページ(http://△△△.com/test/×××.html)に飛ばすようにしたいと思っております。 以前ソースを教えていただいて、下記のように設置してみたのですが、 任意のページに飛ぶことができません。 ローカルでのテストでは問題なく動作したのですが、サーバにアップしてテストしてみると、 パスが「http://△△△.com/test/login.php」から「http://△△△.com/test/http://△△△.com/test/login.php」に変わり、 ページが「WEBページが見つかりません」のエラーが出ます。 私はまったく知識がありませんので、どこがおかしいのか見当がつきません。 知識をお持ちの方、どなたかご教示いただけませんでしょうか。 よろしくお願い申し上げます。 <?php $post_pass = $_POST['passwd']; $user_pass = "0000"; $ok = "./http://△△△.com/test/○○○.html"; $error = "./http://△△△.com/test/×××.html"; $script = "./http://△△△.com/test/login.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=" ログイン " onClick="check()"> </form> </body> </html>

    • ベストアンサー
    • PHP
  • パスワード認証後次のページにジャンプしない

    現在 パスワード認証→次のページにジャンプ!というプログラムを作成しています。しかしパスワードが認証されても次のページ(現在まだテストの段階ということで、移動先のページはヤフーになっております。) しかしただしいパスワードを打っても次のページに移動せず、エラーが出てしまいます。 ちなみにエラーの際 Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\cvptoylibrary.com.au\txtupload.php:7) in C:\xampp\htdocs\cvptoylibrary.com.au\txtupload.php on line 53 というメッセージがでます。ただ何分初心者のため、文章が理解できません。 たぶん header ("Location: http://yahoo.co.jp"); exit; のところがおかしいのだろうと思いますが、どう修正すればよいのか、お解りになるかたがいましたら、ぜひアドバイスのほうよろしくお願いいたします。 以下は私がかいたプログラムの抜粋です。 <?php $data = $_POST['data']; $pass = "1234"; $data = htmlspecialchars($data, ENT_QUOTES); if($data == "") { echo ""; } else { if($pass== $data) { header ("Location: http://yahoo.co.jp"); exit; } else { echo "パスワードが正しくありません"; } } ?> <form action="txtupload.php" method="post"> <input type="password" name="data" size="30"> <input type="submit" value="login"> </form>

    • 締切済み
    • PHP
  • basic認証について

    下記、basic認証プログラムを組んでいます。 プログラム内に記載しておりますとおり、 USERにadmin PASSにabc123 と入力しても、ログインができません。 原因としてどのようなことが考えられますでしょうか? よろしくお願いします。 <?php // File Name: auth02.php // 変数 $PHP_AUTH_USER にすでに情報が含まれていることを確認する。 if (!isset($PHP_AUTH_USER)) { // 中身が空なら、ダイアログボックスを表示させるヘッダーを送る。 header('WWW-Authenticate: Basic realm="My Private Stuff"'); header('HTTP/1.0 401 Unauthorized'); header('Content-Type:text/html; charset=EUC-JP'); echo 'ユーザーの認証が必要です。'; exit; } else if (isset($PHP_AUTH_USER)) { if (($PHP_AUTH_USER != "admin") || ($PHP_AUTH_PW != "abc123")) { header('WWW-Authenticate: Basic realm="My Private Stuff"'); header('HTTP/1.0 401 Unauthorized'); header('Content-Type:text/html; charset=EUC-JP'); echo 'ユーザーの認証が必要です。'; exit; } else { echo " <P>認証に成功しました!</p> "; } } ?>

    • 締切済み
    • PHP
  • HTTP認証ダイアログについて

    下記のPHPスクリプトを実行して、アカウント(ID:admin,パス:pass)を入力してもHTTP認証ダイアログが消えません。ダイアログが消えて、Hello! と表示させたいのですが、どこが間違っているのか、教えていただきたいです。 <?php $user="admin"; $pass="pass"; if (!isset($_SERVER['PHP_AUTH_USER'])) { //初回認証時(PHP_AUTH_USER:HTTP 認証しているときにそのユーザー名がセットされます。ダイアログに入力した値) header("WWW-Authenticate: Basic realm=\"PHP Web Storage\""); header("HTTP/1.0 401 Unauthorized"); echo "Please input account info!\n"; exit; }else { $flg=false; while(isset($user)){ if($_SERVER['PHP_AUTH_USER']==$user && $_SERVER['PHP_AUTH_PW']==$pass){ $flg=true; break; } } if(!$flg){echo"Please input valid account!\n";exit;} //停止 else{echo'Hello!';exit;} } ?>

    • ベストアンサー
    • PHP
  • MD5化したパスワードを再度パスワード認証する

    説明下手かもしれませんが、MD5化したパスワードを再度パスワード認証する方法で躓いてしまいました。 test.php $passwd = 'admin'; $passwd = md5($passwd); if(!isset($password)){$password = md5($_post('password')) ;} if($password == $passwd)){ //ファイルへ書き込み、ファイル一覧表示する処理(コード省略) //★★ 処理した後に、この下でコードでパスワード認証されたPOST送信ボタンを出力 ★★ echo "<td> <form action=$PHP_SELF method=post> <input type=hidden name=password value=$passwd> <input type=submit value=送信> </form>"; } 問題は (1)$passwdはMD5で暗号化されている (2)POST送信された$passwdはMD5で暗号化されたものが、md5($_post('password')で更にMD5化されて認証エラーになる。 なのでフォームボタン(POST送信)を使用し、自身のスクリプトに認証されるような処理を行いたいのですが、 いい方法をアドバイス下さい。 echo "<td> <form action=$PHP_SELF method=post> <input type=hidden name=password value=$passwd> <input type=submit value=送信> </form>";

    • ベストアンサー
    • PHP
  • ログイン認証のページの流れ

    こんばんは。お世話になっております。 初歩的な質問かとは思いますが、これまでlocal上、およびあるレンタルサーバ上では問題のなかったものが、今回別のサーバーをお借りしたら、以下のような不具合が出てきてしまいまいました。 タイトルのようにログインに関するもので、ロープに陥ってると・・。 メインページ(ログイン済みのみ閲覧可能) index.php <?php session_start(); if(!isset($_SESSION["id"]){ header("Location: http://***.com/login/"); }   ・   ・ /login/index.php <?php session_start(); require_once("./auth.php"); //以下、ログインが必要なページは全てここのファイルを経過させ、元のページに戻るソースを記述。 if(isset($_GET["url"])){   ・   ・ /login/auth.php <?php //ログイン入力フォームおよびDB問合せスクリプト 以上のようなファイル構成なのですが、最上位のindex.phpを訪問した際、ログインしていなかったら http://***.com/login/ に移動し、ログイン画面を表示する・・という流れを想定しておしましたが、あるサーバでは以上のようなものだとループに陥ってしまうとの障害が確認出来ました。 ローカル上、別サーバでは問題ない(目視で確認出来る障害が無いという意味)ことだったので、流れを見直そうにも的が見えてきません。 相応しくない点、可笑しな点、どんな些細な事でも結構です。お忙しい中恐縮ですが、アドバイスいただけたら幸いです。宜しくお願い申し上げます。

    • 締切済み
    • PHP
  • Basic認証

    初めまして、karuwazaといいます。 PHPとDB(Postgres)の勉強を始め、現在Basic認証の勉強をしています。 以下が自分が記載したコードなのですが、なぜ上手くいかないのか? 自分では解りません。 どこがどう間違っているのかなどのご指摘が頂ければと思い投稿させて 頂きました。 ご教授宜しくお願いします。 <?php include("./tools/common.php"); $con=db_connect(); //スーパーグローバル変数対策 if(!isset($PHP_AUTH_USER)){ $PHP_AUTH_USER = $_SERVER['PHP_AUTH_USER']; } if(!isset($PHP_AUTH_PW)){ $PHP_AUTH_PW = $_SERVER['PHP_AUTH_PW']; } if(!isset($PHP_AUTH_USER)){ header("WWW-Authenticate: Basic realm=\"WebSystem\""); header("HTTP/1.0 401 Unauthorized"); exit; }else{ $sql="SELECT id, pass FROM テーブル名 ORDER BY id"; $res=pg_query($con, $sql); $num=pg_num_rows($res); for($i=0; $i<$num; $i++){ $name=pg_fetch_row($res, $i, 's_name'); $pass=pg_fetch_row($res, $i, 'pass'); if($name==$PHP_AUTH_USER && $pass==$PHP_AUTH_PW){ session_start(); $_SESSION['s_name'] = $name; $url = // 指定URLへジャ~ンプ header('Location: '. $url); // HTTPヘッダを送信する }else{ header("WWW-Authenticate: Basic realm=\"WebSystem\""); header("HTTP/1.0 401 Unauthorized"); echo "<CENTER><FONT COLOR='red'>ユーザー認証が必要です。</FONT>\n"; exit; } } } db_close($con); ?>

    • 締切済み
    • PHP
  • セッションについて教えてください。

    PHPを独学で勉強中の初心者です。(HTMLとCSSくらいしか分からない所からのスタートです) ログインフォーム→パスワード処理→コンテンツ表示というながれで作っています。 質問は、セッションの有効期限はデフォルトではブラウザを閉じるまでと聞いたのですが、それはウインドウを閉じるではなく、アプリケーションを終了するまでということでよいのでしょうか?ウインドウを閉じただけだと、コンテンツを表示できてしまいます。 また、コードがこんなんでよいものかアドバイスよろしくお願い致します。 --パスワード処理-- <?php session_start(); $id =p; $password =11; $n_id = $_POST["n_id"]; $n_password = $_POST["n_password"]; if(($n_id == $id ) && ($n_password == $password)){ $_SESSION['pass'] = 1; header("Location: page1.php"); }else{echo "IDまたはパスワードが違います。"; } ?> ----コンテンツページ----- <?php session_start(); if(isset($_SESSION["pass"]) && $_SESSION["pass"] == 1){ echo "コンテンツ"; echo "<html><head> <meta http-equiv=Content-type content=text/html; charset=EUC-JP> </head><body>"; echo "<form action =logout.php method=post>"; echo "<input type=submit name=sbm value=ログアウト>"; echo "</form></body></html>"; }else{ header("Location:login1.php"); } ?>

    • 締切済み
    • PHP

専門家に質問してみよう