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


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

▽最新の回答へ

6 ● aki73ix
●33ポイント

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

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

文字コードに原因があるのかもしれません(パスワードファイルがSJISで入力HTMLがUNICODEやEUCの場合はコード変換してやらなくてはいけないかも)

こちらのソースはSHIFT_JISに統一しているので問題ないですよね

あと、ファイルではなく直接PERLで代入する時に「ソ」や「表」などSJISで半角の「¥」を含むコードを入れる場合は注意が必要です

問題数にあわせて forループの数をいちいち変えないように$qmax変数を追加し、$ANSWERが一箇所 $ANSになっていたのを修正しました

これで3回目の回答で、最後なので不具合があったら、トラックバックします

CGIのソース

#!/usr/local/bin/perl

# コメントアウト

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

  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','efub3arAge','特殊表¥記');

  open(FILE, 'pass188.bin'); 

   @PASS = <FILE>;

   close(FILE);

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

# コメントアウト

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

  open(FILE, 'image188.bin'); 

   @SCFILE = <FILE>;

   close(FILE);

#問題の最大数を$qmaxに代入

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

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

      @ANSWER[$qmax]=~s/[¥r¥n]//g;

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

      @SCFILE[$qmax]=~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<$qmax;$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><HEAD><META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; CHARSET=Shift_JIS"></HEAD><body>);

    print $RESULT;

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

  }

  else{

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

#答えがあってるか確認

  for($i=0;$i<$qmax;$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;

}

◎質問者からの返答

うわー。ありがとうございましたーーーー

出来ましたーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー


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


●質問をもっと探す●



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