WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:Locationで処理を分けるには

0:[投稿] ひろ。 [2002/04/11 00:26 ][環境:WIN+NN WIN系+Perl]

こんばんは。

今CGIでLocationを使ってhtml→cgi→cgiへと3段階に飛ぶようなスクリプトを作っています。
最初のcgiでは入力チェックをし、その後にLocationを使って、$modeをもとにnew・rw・del
を判断し別々のcgiへ飛ぶようにしたいのです。
htmlから最初のcgiには飛んでいますが、その後2つ目のcgiファイルへ飛ぶとインターナル
サーバエラーが出てしまって、どこが間違っているのかわかりません。

ソースは以下のとおりです。(関係ない部分は省いています)

----------------------------
index.html

<html>
<body>

<form action="index.cgi">
<input type="hidden" name="act" value="check">
<input type="radio" name="mode" value="new">new
<input type="radio" name="mode" value="rw">rw
<input type="radio" name="mode" value="del">del

ID<input type="text" name="i_id">
PASS<input type="password" name="i_pass">

<input type="submit" value="next">

</form>

</body>
</html

---------------------------
index.cgi

# 実行モード
#------------------------------------
$act = "$in{'act'}";
$mode = "$in{'mode'}";

# モード選択
#------------------------------------
if($act eq 'check') { &check; }                                #書き込み処理
else{ exit; }                                                        #メニュー表示


# 入力チェック
#------------------------------------
sub check{

$flag = '';

 open(IN,"$dfile");
 foreach(<IN>){
   $_ =~ s/\n//g;
   ($id,$name,$phone,$fax,$mail,$from,$com,$pass,$bikou) = split(/,/);
     if($id eq $i_id && $pass eq $i_pass){
       $flag = "1";
     }
   }
 close(IN);

 if($flag){
   if($mode eq 'new'){
     print "Location: http://..../new.cgi?m=new1&i_id=$i_id&i_pass=$i_pass\n\n";
   }elsif($mode eq 'rw'){
     print "Location: http://..../rw.cgi?m=rw1&i_id=$i_id&i_pass=$i_pass\n\n";
   }elsif($mode eq 'del'){
     print "Location: http://..../rw.cgi?m=del1&i_id=$i_id&i_pass\n\n";
   }
 }elsif(!$flag){
   error('認証エラー','入力したデータは会員データに存在しませんでした。');
 }else{}

}
#------------------------------------

このindex.cgiのサブルーチンcheckで入力チェックをし、その後$modeで飛び先を判断しLocationで
飛ばすという形でやりたいのですが、この方法は無理なのでしょうか。

この他にラジオボタンでモードを選択し、処理するCGIを分ける良い方法はあるのでしょうか。
どなたか教えてください。


1:[回答] えび [2002/04/11 13:00 ]

>htmlから最初のcgiには飛んでいますが、その後2つ目のcgiファイルへ飛ぶとインターナル サーバエラーが出てしまって
 であれば、「2つ目のCGI」がバグっているのではありませんか?
 まずは問題の切り分けを行ってください。

・ローカルで perl -cw してエラーがないかチェックする。……まあこれくらいはしていると思いますが、これでエラーが出ていればそこを直すと動く可能性があります。

・CGI ではなく、フツーのテキトーな URL に遷移させることができるのか? ……これができていないなら最初の CGI が既におかしい。

・Location: フィールドに出力される予定の「2つめのCGI」の URL を直接入力したら動作するのか? ……これで動作しなければ「2つ目のCGI」がそもそもダメ。

 いずれもクリアできているのであれば、Location: で出力している値がおかしいのだと見当が付きます。

>どこが間違っているのかわかりません。
>ソースは以下のとおりです。(関係ない部分は省いています)
 どーでもいいのですが、何処が間違っているかわからないのに「関係ない部分」が判断できるというのが凄いと思いました。Internal Server Error が出ているのであれば、その「関係ない部分」にシンタックスエラーが存在している可能性も十分あるように思うのですが。


2:[完了] ひろ。 [2002/04/11 23:40 ]

えびさん。ご回答ありがとうございます。

Internal Server Errorの原因はLocationの飛び先のURL指定が間違っていた為でした。

>どーでもいいのですが、何処が間違っているかわからないのに「関係ない部分」が判断できるというのが凄いと思いました。Internal Server Error が出ているので
>あれば、その「関係ない部分」にシンタックスエラーが存在している可能性も十分あるように思うのですが。
そうですね。関係ない部分にエラーがある場合もありますが、今回の関係ない部分というのはhtmlファイルのことであって、CGIファイルについてはほとんど省いておりません。
最初の#!/usr/local/bin/perlやrequireの部分は省かせていただきましたが。

ホントに迷惑をかけてしまいすみませんでした。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World