CGIについてです。

次のようなものを作りたいと思います。

テキストボックス1つと送信ボタンがある画面→
(送信ボタンを押す)今入力したテキストボックスの内容と、文字列「abc」が一致しているか調べ、
一致していれば→「ページA」へ
一致していなければ→「ページB」へ
自動的に移動するようにする

このようにするには、CGIをどのように作ればよいでしょうか?
目的は、パスワード認証ですが、「文字列が一致するか調べてどちらかのページに自動的に移動する」のみで良いです。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/01/29 23:09:01

ベストアンサー

id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149

perlということなので・・・

htmlフォーム

<html>
<form action="cgiのファイル名" method="post">
    パスワード<input type="text" name="pw" />
</form>
</html>

perl スクリプト

# CGIライブラリの準備
use CGI;

# 初期化
$query = new CGI;

# 受け取ったパラメータに応じてリダイレクト
if ( $query->param('pw') eq 'abc' ) {
    print $query->redirect('ページAのURL');
} else {
    print $query->redirect('ページBのURL');
}
id:hiroto300

ありがとうございます!
やってみます!

2012/01/29 10:47:35
id:hiroto300

出来ました!
ありがとうございました!

2012/01/29 20:44:00

その他の回答2件)

id:TransFreeBSD No.1

回答回数668ベストアンサー獲得回数268

言語とか環境が決まってないと一般的なことしかかけませんので、そういうレベルで書くと。
「文字列が一致するか調べて」→if文とか条件分岐で
「どちらかのページに自動的に移動する」→リダイレクトで
リダイレクトの仕方は下記とか。具体的方法は環境によります。
http://www.futomi.com/lecture/ohter/redirect.html

id:TransFreeBSD

あ、書き忘れましたが、リダイレクトは移動させているだけで、アクセス制限なければ直接アクセスすればアクセス出来ますので、パスワード認証にはなりません。
あくまでユーザを導くだけです。

2012/01/28 21:19:13
id:hiroto300

試してみます。

2012/01/29 10:57:25
id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149ここでベストアンサー

perlということなので・・・

htmlフォーム

<html>
<form action="cgiのファイル名" method="post">
    パスワード<input type="text" name="pw" />
</form>
</html>

perl スクリプト

# CGIライブラリの準備
use CGI;

# 初期化
$query = new CGI;

# 受け取ったパラメータに応じてリダイレクト
if ( $query->param('pw') eq 'abc' ) {
    print $query->redirect('ページAのURL');
} else {
    print $query->redirect('ページBのURL');
}
id:hiroto300

ありがとうございます!
やってみます!

2012/01/29 10:47:35
id:hiroto300

出来ました!
ありがとうございました!

2012/01/29 20:44:00
id:uwao No.3

回答回数180ベストアンサー獲得回数39

一般的なPerlのCGIの場合、下記のようなプログラムで対応出来ると思います。
 
HTMLページ
<FORM action="hoge.cgi" method="post">
<INPUT type="text" name="AIUEO">
<INPUT type="submit" value="送信">
</FORM>
 
hoge.cgiはこんな感じ
 
#!/usr/bin/perl
read(STDIN, $buff, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/,$buff);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$in{$name} = $value;
}
#リダイレクト
if($in{'AIUEO'} eq 'ABCD'){
#ABCDと一致
print "Location: http://一致した時の転送先URL\n\n";
}else{
#ABCDと一致しない
print "Location: http://一致しない時の転送先URL\n\n";
}
exit;

id:hiroto300

ありがとうございます!
やってみます!

2012/01/29 11:00:20
  • id:windofjuly
    うぃんど 2012/01/28 19:58:08
    CGIで使える言語は多岐に渡ります
    前回回答いただいたようにperl、ruby、python、それ以外にもphpなども有名です
    レンタルサーバーでは使えるところも少ないですがJAVAやVBScriptなども使えますし、
    VPSや専用サーバーならばC言語やBasic言語なども使えます

    だから、<b>まず最初にしなければならないのは、言語を選ぶこと</b>です
    どれが将来的に有望ですかという質問も多いのですが、ハッキリ言って、どれでも良いです
    (言語の学び方がわかってくれば、他の言語を理解するのもそれほど苦ではないからです)
    どの言語を選んでもかまいませんが、
    人力検索で回答がつきやすいのはphpで、次がrubyといったところです
    perlやpythonは質問自体をあまり見なくなりました

    言語を選らんだら、<b>次に行うのはパッケージの検索と選択</b>です
    パスワード認証などの基本的なものは、
    それぞれの言語用にパッケージとして出来上がったものがあります
    CGIは覚えなければならないことが沢山あるので、
    ゼロから学ぶよりも、既存のものを使いつつ学ぶほうが良いです

    ついでに書いておきますが、
    CGIプログラムを作るならば、サーバーの仕組みも学ばなければなりません
    <b>パスワード認証はプログラム側ではなく、WEBサーバー側にやらせることが多い</b>からです

    さて、あなたは結果的にどのようなものを作れるようになりたいですか?
    そのための第一歩として、あなたはどの言語を選択しますか?
  • id:hiroto300
    今回は、サーバーを使わずに、ローカルで行います。
  • id:TransFreeBSD
    ここで言うサーバはハードではなくてソフトウェアの事ですよ?
  • id:hiroto300
    初心者なのでよく分かりませんが、ローカルサーバーとしてhttpdを使っています。
  • id:windofjuly
    うぃんど 2012/01/28 21:47:57
    CGI(Common Gateway Interface)というのは仕組みの総称です

    どのWEBサーバーソフトを使うかについてや、
    どの言語を使うかについては自分で決めなければならないのです

    >ローカルサーバーとしてhttpdを使っています
    AN HTTPDでしょうか?
    AN HTTPDはCGIを使えますが、
    プログラムを処理する言語は別に用意しなければなりません

    一番上のコメントをこの話の続きだと思って続けて読んでみてください
    そうすれば「あなたはどの言語を選択しますか?」の意味がわかってくるはずです
  • id:hiroto300
    perlを使用します
  • id:uwao
    CGIで転送先を振り分けても、転送先URLのページのアクセスを制限していなければ、パスワード認証にはなりません。
    パスワードの認証は、ベーシック認証などで制限した方が良いように思います。
  • id:windofjuly
    うぃんど 2012/01/29 01:31:15
    WEBサーバー側(AN HTTPD)にやらせる方法は下記参照
    http://www.st.rim.or.jp/~nakata/httpd-docs/options.html#OptionsAcl

    ライブラリを使った書き方(回答No.2)と、CGIと言えばPerlという時代を髣髴とさせる古式ゆかしき書き方(回答No.3)の両方を理解できるとベターです

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません