質問者 まだまだ初心者
投稿日 12/25(水) 21:57:15
会員制のサイトでファイルに会員データを作成するスクリプトを作成しています。
Mac J perl では「syntax OK」と出たのですが、実際にアップするとなぜか動きません。
内部エラーがおこりました、と表示されます。
#IDの重複チェックの直前までは動いているようです。
どこがいけないのでしょう?
教えて頂けませんか。よろしくお願い致します。
以下、スクリプトです。
#!/usr/bin/perl
#データの解読
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
&jcode'convert(*value, 'sjis');
$value =~ s/\r\n/<br>/g;
$value =~ s/\r/<br>/g;
$value =~ s/\n/<br>/g;
$form{$name} = $value;
}
#####設定ここから#####
#必要な外部ファイル
require 'jcode.pl';
require 'error.pl';
require 'p_m.pl';
#登録者データの言い換え
$name = $form{'name'};
$address = $form{'address'};
$tel = $form{'tel'};
$email = $form{'email'};
$id = $form{'id'};
$password = $form{'password'};
#各種ファイル
$logfile1 = '../member/member.dat';
$logfile2 = "../member/$id.dat";
#####設定ここまで#####
#名前が記入されていないとエラー
if (!$name) {
$word = $word17;
&error;
} else { &check2; }
#住所が記入されていないとエラー
sub check2 {
if (!$address) {
$word = $word18;
&error;
} else { &check3; }
}
sub check3 {
#電話番号が記入されていないとエラー
if (!$tel) {
$word = $word19;
&error;
} else { &check4; }
}
sub check4 {
#メールアドレスが記入されていないとエラー
if (!$email) {
$word = $word20;
&error;
} else { &check5; }
}
sub check5 {
#IDが記入されていないとエラー
if (!$id) {
$word = $word25;
&error;
} else { &check6; }
}
sub check6 {
#IDに半角英数以外が使われているとエラー
if ($id !~ /[0-9a-zA-Z]/) {
$word = $word21;
&error;
} else { &check7; }
}
sub check7 {
#IDが4文字以上8文字以下でないならエラー
if (length($id) > 8 or length($id) < 4) {
$word = $word22;
&error;
} else { &check8; }
}
sub check8 {
#IDにdummyが使われるとエラー
if ($id eq dummy) {
$word = $word27;
&error;
} else { &check9; }
}
sub check9 {
#パスワードが記入されていないとエラー
if (!$password) {
$word = $word26;
&error;
} else { &check10; }
}
sub check10 {
#パスワードに半角英数以外が使われているとエラー
if ($password !~ /[0-9a-zA-Z]/) {
$word = $word23;
&error;
} else { &check10; }
}
sub check11 {
#パスワードが4文字以上8文字以下でないならエラー
if (length($password) > 8 or length($password) < 4) {
$word = $word24;
&error;
} else { &check12; }
}
sub check12 {
#IDが重複していないかチェック
open(IN,"$logfile1") || die "ファイルを開けませんでした。";
while(<IN>) {
$data = $_;
chop $data;
($name2,$address2,$tel2,$email2,$id2,$password2) = split(/\,/,$data);
if ($id eq $id2) {
$word = $word27;
&error;
last;
}elsif ($id ne $id2) {
next;
}elsif ($id2 eq dummy) {
®ist;
}
}
close IN;
}
#会員データ登録
sub regist {
#ダミーデータ削除
open(IN,"+<$logfile1") || die "ファイルを開けませんでした。";
@data = <IN>;
close IN;
$dummy = pop @data;
open(OUT,">$logfile1") || die "ファイルを開けませんでした。";
flock(OUT, 2);
print OUT @data;
flock(OUT, 8);
close(OUT);
#全会員データ用ファイルに会員データ書込み
$member_data = "$name,$address,$tel,$email,$id,$password\n";
open(IN,">>$logfile1") || die "ファイルを開けません。";
flock(IN,2);
print IN $member_data;
flock(IN,8);
close IN;
#各会員用データファイル作成
open(IN,"+>$logfile2") || die "ファイルを開けません。";
flock(IN,2);
print IN $member_data;
flock(IN,8);
close IN;
#ダミーデータ追加
open(IN,">>$logfile2") || die "ファイルを開けません。";
flock(IN,2);
print IN $dummy;
flock(IN,8);
close IN;
&hyouji;
}
sub hyouji {
print << "EOH";
Content-type:text/html
<html>
<head>
<link href="../text/aquatime1.css" type="text/css" rel="stylesheet">
<title>アクアタイム通信販売</title>
</head>
<body class="main">
<div align="center">
<font class ="b2">
登録は無事完了しました。
<br>
<hr class="m">
EOH
require 'p_m.pl';
&p_m;
print << "EOH";
</div>
</font>
</body>
</html>
EOH
}
プロバイダ参照:http://www.interlink.co.jp
サーバのOS:UNIXサーバ
パソコンのOS:Mac9
エディタ:MacJperl
FTPソフト:Fetch v4
サーバ移転:していない
改造:(未選択)
CGI習熟度:expert
|