![]() |
| カレッヂ |
質問者 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裏技 |