![]() |
| カレッヂ |
質問者 まだまだ初心者...
投稿日 9/7(土) 16:07:44
いつもお世話になっています。
自作のDBで、内容を登録するスクリプトが出来ました。
登録された内容を検索し、修正する為にデータを1つだけ読み出すスクリプトもできました。
で、問題のスクリプトなんですが、条件に合うデータを複数読み出すものなんですが、
サーバーのエラー表示が
「サーバで内部エラーまたは設定エラーが発生したため、リクエストに対する処理を完了できませんでした。 」
と出てしまい、どこが悪いのか、さっぱり分からないのです。
もし、教えていただける方がいらっしゃいましたら、お願いします。
以下に、スクリプトを記入しておきます。
#!/usr/bin/perl
require 'cgi-lib.pl';
require 'jcode.pl';
#エラー表示サブルーチン(別ファイル)
require 'error.pl';
#前のページからのデータを読み込み
&ReadParse(*form);
&jcode'convert(*form,'sjis');
#データファイルを読み込み
if (!open(IN,"./$form{'store'}/comic.dat")) {
$title = $title14;
$word = $word18;
&error;
}
@data = <IN>;
close<IN>;
#読み込んだデータと条件の照らし合わせ
foreach $data (@data) {
($comic_name,$author_name,$publisher,$comic_yomikata,$author_yomikata,$zen_kansuu,$syoji_kansuu,$yomareta_kaisuu) = split(/\,/,$data);
if ($form{'comic_name'} =~ m/^$comic_name/) {
push @data2,$data;
next;
} elsif ($form{'author_name'} =~ m/^$author_name/) {
#条件に合うデータだけを新しい配列@data2に追加
push @data2,$data;
next;
} elsif ($form{'comic_name'} !~ m/^$comic_name/) {
next;
} elsif ($form{'author_name'} !~ m/^$author_name/) {
next;
} elsif ($form{'comic_name'} eq "" and $form{'author_name'} eq "") {
$title = $title16;
$word = $word25;
&error;
last;
#データファイルの最後尾には"dummy"というデータを置き、
#それにアクセスしたらループ終了
} elsif ($comic_name eq "dummy" or $author_name eq "dummy") {
&k_hyouji;
last;
}
}
#検索結果表示
sub k_hyouji {
print "Content-type:text/html\n\n";
print << "EOH";
<html>
<head>
<title>検索結果</title>
</head>
<body bgcolor="#ffffff">
<div align="center">
<b><font size="+4" color="#00bfff">検索結果</font></b>
<table border="1" cellspacing="2" cellpadding="0">
<tr>
<td nowrap><div align="center">
<font size="3">出版社</font></div>
</td>
<td nowrap><div align="center">
<font size="3">コミック名</font></div>
</td>
<td nowrap><div align="center">
<font size="3">作者名</font></div>
</td>
<td nowrap><div align="center">
<font size="3">巻数</font></div>
</td>
</tr>
EOH
#条件に合うデータだけを表示
foreach $data2 (@data2) {
($comic_name,$author_name,$publisher,$comic_yomikata,$author_yomikata,$zen_kansuu,$syoji_kansuu,$yomareta_kaisuu) = split(/\,/,$data2);
print "<tr>\n";
print "<td nowrap>$publisher</td>\n";
print "<td nowrap>$comic_name</td>\n";
print "<td nowrap>$author_name</td>\n";
print "<td nowrap>$zen_kansuu</td>\n";
print "</tr>\n";
}
print << "EOH";
</table>
</div>
</body>
</html>
EOH
}
プロバイダ参照:http://www.interlink.co.jp |
回答者 しあわせのツボ
[削除]
投稿日 9/7(土) 16:57:53
文法チェックをかけたところ、line 19 close<IN>; は close(IN); と書け、と出ました。 |
質問者 まだまだ初心者...
[削除]
投稿日 9/7(土) 17:17:40
しあわせのツボさん、いつもお教え頂いてありがとうございます。 早速試してみましたが、結果は同じくエラーでした。 うちのMAC J PERLでもsyntax OKと出るので、どこにエラーがあるのか さっぱりです... スクリプトを御覧になって、「これは変だなぁ」とか「これでいいの?」と お感じになった箇所はありませんか? |
回答者 しあわせのツボ
[削除]
投稿日 9/7(土) 18:54:59
こちらでもsyntax okですね。
気付いた点ですか。
これだと、ヒットした件数だけHTMLのフルセットを出力しますね(苦笑)
他はとりあえず動くと思いますが。
ざっと書き直したので、差し替えてみてください。
#!/usr/bin/perl
require 'cgi-lib.pl';
require 'jcode.pl';
require 'error.pl';
&ReadParse(*form);
&jcode::convert(*form,'sjis');
if ($form{'comic_name'} eq "" and $form{'author_name'} eq "") {
$title = $title16;
$word = $word25;
&error;
}
#データファイルを読み込み
if (!open(IN,"./$form{'store'}/comic.dat")) {
$title = $title14;
$word = $word18;
&error;
}
#読み込んだデータと条件の照らし合わせ
foreach (<IN>) {
($comic_name,$author_name) = split(/¥,/);
#条件に合うデータだけを@dataに追加
if ($form{'comic_name'} =~ /^$comic_name/) {
push (@data,$_);
} elsif ($form{'author_name'} =~ /^$author_name/) {
push (@data,$_);
}
}
close(IN);
print "Content-type:text/html; charset=¥"Shift_JIS¥"¥r¥n¥r¥n";
print << 'EOH';
<html>
<head>
<title>検索結果</title>
</head>
<body bgcolor="white">
<div align="center">
<b><font size="+4" color="#00bfff">検索結果</font></b>
<table border="1" cellspacing="2" cellpadding="0">
<tr>
<td nowrap align="center">
<font size="3">出版社</font></div>
</td>
<td nowrap align="center">
<font size="3">コミック名</font></div>
</td>
<td nowrap align="center">
<font size="3">作者名</font></div>
</td>
<td nowrap align="center">
<font size="3">巻数</font></div>
</td>
</tr>
EOH
#条件に合うデータだけを表示
foreach (@data) {
($comic_name,$author_name,$publisher,$comic_yomikata,$author_yomikata,$zen_kansuu) = split(/¥,/);
print << "EOH";
<tr>
<td nowrap>$publisher</td>
<td nowrap>$comic_name</td>
<td nowrap>$author_name</td>
<td nowrap>$zen_kansuu</td>
</tr>
EOH
}
print << 'EOH';
</table>
</div>
</body>
</html>
EOH
|
回答者 しあわせのツボ
[削除]
投稿日 9/7(土) 18:56:56
あー、化けてやがる。Mozillaのバカぁ(泣) ¥ は 半角¥ に直してください。 |
質問者 まだまだ初心者...
[削除]
投稿日 9/7(土) 22:01:16
しあわせのツボさんへ 差し換えてみた所、無事、動きました!! どうもありがとうございます!! とっても、嬉しいです。 一体、どこがいけなかったのでしょう? 後学の為にアドバイスを頂けませんか? よろしくお願い致します。 |
回答者 しあわせのツボ
[削除]
投稿日 9/7(土) 23:25:20
申し訳ありませんが、私にも見当たらないのです。 文法ミスではありませんし、結果も同じになるようにしたのに、 片方だけダメな理由がわかりません。 少しずつ戻しながら試していって、エラーになった場所があれば そこがいけなかった所だとは思うのですが。 あと、エラーの原因ではないと思いますが、ついでなので。 print << "EOF"; ならヒアドキュメント中でも変数は使えます。 print << 'EOF'; とすると変数展開されずにそのまま表示されます。 |
質問者 まだまだ初心者...
[削除]
投稿日 9/8(日) 11:16:08
しあわせのツボさんへ > あと、エラーの原因ではないと思いますが、ついでなので。 > print << "EOF"; ならヒアドキュメント中でも変数は使えます。 > print << 'EOF'; とすると変数展開されずにそのまま表示されます。 そういう違いがあるのですね。勉強になりました。 個人的にはデータの受け渡しが煩雑すぎたかな、と思います。 書き換えて頂いたスクリプトですと、非常にシンプルですもんね。 また教えて頂く事もあるかと思いますが、その時はよろしくお願い致します。 どうもありがとうございました。 |
このページは終了したので返信(回答)は書きこめません
| Web裏技 |