カレッヂ |
質問者 Jack
投稿日 2004/2/24(火) 16:35:32
ユーザー登録用に以下のCGIを作ってみたのですが、エラー500が出てしまいます。 CGIは「cgi-bin」ディレクトリにあり、「cgi-lib.pl」は「lib」ディレクトリにそれぞれ置いてあります。 初めてのCGIでいきなり難しい事をやっていますが、あきれずアドバイスお願い致します。 サーバーはCGI専用サーバーになっています。 #!/usr/bin/perl5 require '/lib/cgi-lib.pl'; &readParse(*in); $mode = $in{'mode'}; # &mode: 'make'=入力用、 'check'=チェック用 if( $mode eq 'make' ){ # ユーザー名、パスワード入力用:$mode eq 'make' &printform('user登録'); # ユーザー名、パスワード入力画面表示 } else{ # ユーザー名重複有無のチェック用:$mode eq 'check' &checkuser(*in); # ユーザー名重複チェック(入力ユーザー名、既登録ユーザー名) } exit; #----------------------------------------------------------------------------------------- # サブルーチンprintFormの定義 # ユーザー名、パスワード入力用画面表示 # sub printForm{ local ($title)=shift(@_); print "content-type:text/html\n\n"; print "<html><head><title>user登録</title></head></body>"; print "<h3>$title<h3>"; print "<form name='form' method='post' action='user.cgi'>"; print " ユーザー名:<input type='text' name='user'><br>"; print " パスワード:<input type='password' name='password'<p>"; print " <input type='hidden' value='check' name='mode'>"; print " <input type='submit' value='登録'>"; print "</form><p>"; print "<a href='eshop.html'><トップページへ戻る</a>"; print "</body></html>"; } #----------------------------------------------------------------------------------------- # サブルーチンcheckUserの定義 # 入力ユーザー名は既登録ユーザー名(passwd.txt)と重複していないかどうかチェック # 重複していない場合:ユーザー名とパスワードをファイル(passwd.txt)へ保存 # 重複していた場合 :その旨の表示をし、ユーザー名、パスワードの再入力 # sub checkUser{ local(*in) = shift(@_); local($user ,%passws , $cpasswd); local($fuser,$fpasswd); local(@all ,$flg); $user =$in{'user'}; # 入力ユーザー名 $passwd=$in{'passwd'}; # 入力パスワード open(FH,"+<passwd.txt") || open(FH,"+>passwd.txt"); #flock(FH,2); @all=<FH>; # パスワードファイルを全行読み込み $flg = "OK"; # 入力ユーザー名受付可否チェックフラグ(初期値="OK") foreach $d(@all){ ($fuser,$passwd)=split(/:/,$d); # 既登録ユーザー名、パスワード if($user eq $fuser){ # 入力ユーザー名と既登録ユーザー名が一致 $flg="NO";last; # ユーザー名受付不可("NO") } } if($flg eq "OK"){ # ユーザー名、パスワード保存と登録受け絵付けOK表示 $cpasswd=crypt($passwd,$user); # 入力パスワードの暗号化 seek(FH,0,2); # 書き込み位置をファイルの末尾へ移動 print FH "$user:$cpasswd\n"; # パスワードファイルへ保存 print "content-type:text/html\n\n"; print "<html><body>"; print "<h3>ユーザー登録は受付られました。</h3><p>"; print "a href='eshop.html>トップページへ戻る</a>"; print "</body></html>"; } else{ # 登録受付不可表示、再入力画面 &printForm("入力したユーザー名は($user)は既に使われています"); } #Flock(FH,8); close(FH); # パスワードファイルのclose }
プロバイダ参照:http://www.asj.ne.jp/users/manual/webctrlpanel/ |
回答者 しあわせのツボ
[削除]
投稿日 2004/2/24(火) 17:57:41
1. コピーしてみたところ、あちこちに全角スペースがあるようですが。 2. &readParseではありません。&ReadParseです。 まずはコマンドラインでエラーを突き止める方法を覚えましょう。 |
質問者 Jack
[削除]
投稿日 2004/2/24(火) 23:06:04
さっそくの回答とアドバイス有難う御座いました。 無理が(自分自身)有るのは分かってました。 再チェックして見ると構文エラーの山でしたから... もっと勉強してから出直してきます。 有難う御座いました。 |
このページは終了したので返信(回答)は書きこめません
Web裏技 |