人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

WEBプログラミングで
パスワードごとに、違うファイルを表示できるプログラムを組みたいです。具体的に書くと、
クイズで答えがわかると、秘密のページに行けるようにしたいです。
himitu.php?id=1234 → パスワード(5678) →kotae.php?id=1234&pass=5678
himitu.php?id=abcd → パスワード(efgh) →kotae.php?id=abcd&pass=efgh

みたいな感じです。
プログラムは、phpとは限らないです。CGIとかでもOKです。
みたいな、感じです。参考になるページ、文献、ヒントなど、ございましたら。ご教授ください。


●質問者: yukky2004
●カテゴリ:インターネット ウェブ制作
✍キーワード:CGI PHP Web クイズ パスワード
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● ワテ
●5ポイント

データで

id,password,page_url

という項目を

データベースか別データファイル、もしくは

コード上に直接配列でもたせ、

認証に成功すれば、指定のページで

header("Location:".ページを指定している変数);

という感じで飛ばすのが

一番簡単ではないでしょうか?

同様に

クイズNo,回答,ジャンプ先ページURL

というデータ構成で、

処理すれば、同様の処理ができるのではないでしょうか?

具体的に書くのであれば、

if($_POST[クイズNo] == 回答){

header("Location:".ジャンプ先ページ);

}

クイズが複数項目になる場合は

もう少し違った書き方になるとは思いますが

基本的には、この方法でいけるのではないでしょうか?

項目名はマルチバイトで書いてますが

適時読み替えてもらえればいいと思います。

http://www.udsj.com/

◎質問者からの返答

ありがとうございました。早速、実践してみたいと思います。ちょっと、仕事で急いでるので、フリーのスクリプトがあればいいんですが、、


2 ● m035
●5ポイント

簡単なものでよければJavaScriptで。

http://allabout.co.jp/computer/hpcreate/closeup/CU20041220A/...

http://www5e.biglobe.ne.jp/~access_r/hp/javascript/js_023.ht...

◎質問者からの返答

ありがとうございました。書き忘れたのですが、携帯電話用で作りたいので、JavaScriptだと。。。ごめんなさい。先に書いておけば良かったです。


3 ●
●5ポイント

以前、似たような(?)質問がありました。

参考になるURLがいくつか紹介されているようですので、一度確認してみてはいかがでしょうか。

以前の質問では携帯は条件になかったので、そのあたりは考慮されていないと思いますが、使えるものもあると思います。

詳細は確認していませんが、お急ぎのようでしたので回答いたしました。

参考になると幸いです。


4 ● aki73ix
●33ポイント

http://nifberry.727.net/test/hatena188.htm

サンプルを作ってみたので参考にしてみてください

これはクイズ形式で質問と答えが合っていたら、画像を表示するものです

CGIのソース

#!/usr/local/bin/perl

  @ID=('adfc','gerd','vvva','f4dx');

  @PASS=('5','174','3','4');

#正しいパスワードの時に表示するファイル

  @SCFILE=('sample1.dat','sample2.dat','sample3.dat','sample4.dat');

#間違ったパスワードの時に表示するファイル

  $FLFILE='sample0.dat';

  $mthd=$ENV{'REQUEST_METHOD'};

  local($qu,@in,$key,$val);

  if($mthd eq 'GET'){

     $qu=$ENV{'QUERY_STRING'};

  }

  elsif($mthd eq 'POST'){

     read(STDIN,$qu,$ENV{'CONTENT_LENGTH'});

  }

#環境変数設定

  *query = decode();

  print qq(Content-type: image/gif¥n¥n);

#答えがあってるか確認

  for($i=0;$i<4;$i++){

   if( $query{'id'} eq $ID[$i] ){

     if( $query{'answer'} eq $PASS[$i] ){

       $FLFILE = $SCFILE[$i];

     }

   }

 }

#画像を表示

  open(FILE, $FLFILE); 

   @que = <FILE>;

   foreach $ax  (@que){

     print qq($ax);

   }

   close(FILE);

   exit;

sub decode

{

#変数の分離

  local(@query)=split(/&/,$qu);

  foreach(@query){

# "+"などを" "に置換

    tr/+/ /;

    tr/|/ /;

    tr/¥¥/ /;

    tr/;/ /;

    tr/¥`/ /;

# キーと値に分離

    ($key,$val)=split(/=/);

    $key=~s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c",hex($1))/ge;

    $val=~s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c",hex($1))/ge;

# 改行コードを修正する。

    $val=~s/¥r¥n/¥n/g;

    $vin{$key}=$val;

  }

  return *vin;

}


答えの部分をパスワードにして、正解時にパスワード発行するようにすれば同じように実現できます

http://nifberry.727.net/test/hatena188a.htm

CGIのソース

#!/usr/local/bin/perl

  @ID=('adfc','gerd','vvva','f4dx');

  @ANSWER=('5','174','3','4');

  @PASS=('rregebr34','1g37fg1','cior43','benrt1gb');

#正しいパスワードの時に表示するファイル

  @SCFILE=('sample1.dat','sample2.dat','sample3.dat','sample4.dat');

#間違ったパスワードの時に表示するファイル

  $FLFILE='sample0.dat';

  $mthd=$ENV{'REQUEST_METHOD'};

  local($qu,@in,$key,$val);

  if($mthd eq 'GET'){

     $qu=$ENV{'QUERY_STRING'};

  }

  elsif($mthd eq 'POST'){

     read(STDIN,$qu,$ENV{'CONTENT_LENGTH'});

  }

#環境変数設定

  *query = decode();

  if( $query{'mode'} eq 'question'){ 

    $RESULT="教えてあげないよ";

    for($i=0;$i<4;$i++){

     if( $query{'id'} eq $ID[$i] ){

       if( $query{'answer'} eq $ANSWER[$i] ){

         $RESULT = "正解なのでIDとパスワードを教えてあげるよ<BR>ID:".$ID[$i]."<BR>PASS:".$PASS[$i];

       }

     }

   }

    print qq(Content-type: text/html¥n¥n);

    print qq(<html><body>);

    print $RESULT;

    print qq(</body></html>);

  }

  else{

    print qq(Content-type: image/gif¥n¥n);

 

#答えがあってるか確認

  for($i=0;$i<4;$i++){

   if( $query{'id'} eq $ID[$i] ){

     if( $query{'pass'} eq $PASS[$i] ){

       $FLFILE = $SCFILE[$i];

     }

   }

 }

#画像を表示

  open(FILE, $FLFILE); 

   @que = <FILE>;

   foreach $ax  (@que){

     print qq($ax);

   }

   close(FILE);

  }

  exit;

sub decode

{

#変数の分離

  local(@query)=split(/&/,$qu);

  foreach(@query){

# "+"などを" "に置換

    tr/+/ /;

    tr/|/ /;

    tr/¥¥/ /;

    tr/;/ /;

    tr/¥`/ /;

# キーと値に分離

    ($key,$val)=split(/=/);

    $key=~s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c",hex($1))/ge;

    $val=~s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c",hex($1))/ge;

# 改行コードを修正する。

    $val=~s/¥r¥n/¥n/g;

    $vin{$key}=$val;

  }

  return *vin;

}

◎質問者からの返答

うわーー。わざわざ、作ってもらって、ありがとうございます。考えていた内容にかなーり近いので、とっても助かってまーす。クイズの問題が大量にあるので、

@ID

@PASS

@SCFILE

を、別ファイルから読み込めれば、完璧なんです。でも、どうもありがとうございます????。


5 ● aki73ix
●34ポイント

> @ID

> @PASS

> @SCFILE

> を、別ファイルから読み込めれば、完璧なんです

これは、ちょっとした応用で出来ます

配列なのでそのままファイルから読み込んで、改行だけ取り除いてあげればOKです

補足ですが image/gifのところを text/htmlにすれば

異なるHTMLを表示したり jpegにすることでJPEGファイルを指定したりできます

http://nifberry.727.net/test/hatena188a.htm

(hatena188b.cgiにリンクしています)

【CGIソース】

#!/usr/local/bin/perl

# コメントアウト

#  @ID=('adfc','gerd','vvva','f4dx');

  open(FILE, 'id188.bin'); 

   @ID = <FILE>;

   close(FILE);

# コメントアウト

#  @ANSWER=('5','174','3','4');

  open(FILE, 'ans188.bin'); 

   @ANSWER = <FILE>;

   close(FILE);

# コメントアウト

#  @PASS=('rregebr34','1g37fg1','cior43','benrt1gb');

  open(FILE, 'pass188.bin'); 

   @PASS = <FILE>;

   close(FILE);

#正しいパスワードの時に表示するファイル

# コメントアウト

#  @SCFILE=('sample1.dat','sample2.dat','sample3.dat','sample4.dat');

  open(FILE, 'image188.bin'); 

   @SCFILE = <FILE>;

   close(FILE);

# 改行の除去

   for($i=0;$PASS[$i];$i++){

      @ID[$i]=~s/[¥r¥n]//g;

      @ANS[$i]=~s/[¥r¥n]//g;

      @PASS[$i]=~s/[¥r¥n]//g;

      @SCFILE[$i]=~s/[¥r¥n]//g;

   }

#間違ったパスワードの時に表示するファイル

  $FLFILE='sample0.dat';

  $mthd=$ENV{'REQUEST_METHOD'};

  local($qu,@in,$key,$val);

  if($mthd eq 'GET'){

     $qu=$ENV{'QUERY_STRING'};

  }

  elsif($mthd eq 'POST'){

     read(STDIN,$qu,$ENV{'CONTENT_LENGTH'});

  }

#環境変数設定

  *query = decode();

  if( $query{'mode'} eq 'question'){ 

    $RESULT="教えてあげないよ";

    for($i=0;$i<4;$i++){

     if( $query{'id'} eq $ID[$i] ){

       if( $query{'answer'} eq $ANSWER[$i] ){

         $RESULT = "正解なのでIDとパスワードを教えてあげるよ<BR>ID:".$ID[$i]."<BR>PASS:".$PASS[$i];

       }

     }

   }

    print qq(Content-type: text/html¥n¥n);

    print qq(<html><body>);

    print $RESULT;

    print qq(</body></html>);

  }

  else{

    print qq(Content-type: image/gif¥n¥n);

#答えがあってるか確認

  for($i=0;$i<4;$i++){

   if( $query{'id'} eq $ID[$i] ){

     if( $query{'pass'} eq $PASS[$i] ){

       $FLFILE = $SCFILE[$i];

     }

   }

 }

#画像を表示

  open(FILE, $FLFILE); 

   @que = <FILE>;

   foreach $ax  (@que){

     print qq($ax);

   }

   close(FILE);

  }

  exit;

sub decode

{

#変数の分離

  local(@query)=split(/&/,$qu);

  foreach(@query){

# "+"などを" "に置換

    tr/+/ /;

    tr/|/ /;

    tr/¥¥/ /;

    tr/;/ /;

    tr/¥`/ /;

# キーと値に分離

    ($key,$val)=split(/=/);

    $key=~s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c",hex($1))/ge;

    $val=~s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c",hex($1))/ge;

# 改行コードを修正する。

    $val=~s/¥r¥n/¥n/g;

    $vin{$key}=$val;

  }

  return *vin;

}

◎質問者からの返答

感謝。感謝。感謝。

ほんとに、親切にありがとうございますーーーー。

先ほど、やってみたら、完璧に動きました。

ちなみに、このパスワードを日本語にしたら通らなかったんですが、やっぱ携帯だとだめなんですかね?


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ