こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

アンケートフォームの作成

現在アンケート収集のため、アンケートフォームの作成を行っています。
試行錯誤しているのですがどうしてもinternal server errorとなってしまうためご質問させてください。

下記がhtml、plの記述です。
----------------------------------------------------------------------------------------
[HTML]
<form action="check.pl" method="post">
<table>
<tr>
<td>■実施日</td>
</tr>
<td><input type="text" name="date" value="" /></td>
</tr>
<tr>
<td><input type="submit" value="送信確認" /></td>
</tr>
</table>
</form>
----------------------------------------------------------------------------------------
[Perl]
#!/usr/bin/perl/
use CGI;
$cgi = new CGI();
$date = $cgi->param('date');
$cgi->charset('Shift-JIS');
$date = $cgi->escapeHTML('$date');
use Date::Simple;
if($date eq Date::Simple::data($date)) {
$date_check ='ok';
} else {
$date_check = ''error;
}
print $cgi->header(-type=>'text/html',-charset=>'Shift-JIS');
print $cgi->start_html(-title=>'送信確認',-lang=>'ja');
print '実施日';
print $date;
if($date_check eq 'error') {
print '(入力形式を確認してください。)';
}
print '<br />';
print $cgi->end_html();
----------------------------------------------------------------------------------------
Date:Simpleなどのエラーチェック機能を削除するとperlのエラーは検出されなかったのですが、動作しません。
パーミッションは755です。
念のため拡張子を.cgiに変更して試しましたが変化はありませんでした。
(※テスト用のcgiは動作しました。)

原因がお分かりの方がいらっしゃいましたら、ご回答お願い致します。

投稿日時 - 2012-10-04 13:33:20

QNo.7731563

困ってます

質問者が選んだベストアンサー

ソースをそのままコピーしたものですか?
No.1さんとかぶりますが、

$date = $cgi->escapeHTML('$date');

'$date'は、シングルクォートは、いらないのではないでしょうか?
あと、

> Date::Simple::data

これは、Date::Simple::dateではありませんか?最後は「a」ではなく「e」です。

> $date_check = ''error;

シングルクォートが二つ前にあって、errorを括っていません。
以上、ざっと見た範囲で、気になった部分を書いてみました。

投稿日時 - 2012-10-05 01:02:05

お礼

ご回答ありがとうございました。
ミスを指摘していただき、他の箇所も修正を繰り返すことでなんとか動作いたしました。

投稿日時 - 2012-12-05 19:54:11

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

use CGI;
use CGI::Carp qw(fatalsToBrowser);
とすると、エラーの発生場所がブラウザでわかって便利です。

パッと見、$date = $cgi->escapeHTML('$date'); が変です。'$date'という文字列にしかなりません。
use CGI;
$cgi = new CGI();
$date = '12345678';
$hoge = $cgi->escapeHTML('$date');
print $hoge, "\n";
---
$ perl foo.pl
$date

そもそも、$cgi->paramでアンエスケープ処理されるので、$date = $cgi->escapeHTML('$date');は不要です。

投稿日時 - 2012-10-04 18:43:49

お礼

ご回答ありがとうございます。
参考書籍に書いてあったものを鵜呑みにしてしまいましたがescape不要だったんですね。
大変参考になりました。

投稿日時 - 2012-12-05 19:54:56