![]() |
カレッヂ |
質問者 まだまだ初心者...
投稿日 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裏技 |