CGI-BBS > データベース > 簡易データベース > データーベースのワードチェック!


カレッヂ
カレッヂ


質問者 AKI♂  投稿日 1/12(金) 00:24:45
こんにちは
こちらのデーターベースをつかって都道府県別のメル友募集の掲示板としてつかってます
名前・メールアドレス・住んでる所・性別・年齢・コメントを書く欄をつくったのですが
そこのコメントのところにHP宣伝(アダルト系)をする人がいるので
その書き込みをはじきたいのですが以下の行を追加したのですがエラーがでるのですが
どうすればよろしいのですか?おしえてください!
#ワードチェック
sub wordcheck {
    local($string) = $_[0];
    local($match) = 0;
    $WORD[0] = 'http://';
    $WORD[1] = '死ね';
    $WORD[2] = '殺す';
    $WORD[3] = '馬鹿';
    foreach $line (@WORD) {
        if (index($string,$line) >= 0) { $match = 1; last; }
    }
    $match;
}
回答者 まさ  [削除]  投稿日 1/12(金) 18:49:21
どのようなエラーが出るのでしょうか?
Internal Server Errorですか?
それならshellで「perl -wc foo.cgi」で文法チェックしてみてください。
たいがいはそれで解決します。

ちょっと気になりましたが、これはPerl4ですか?
Perl4ならこのままでいいですが、Perl5ならlocalよりmyを使った方がいいです。
myの方が局所変数と言うのをより明確に表します。
myでは無理なもの(型グロブとか)を使う場合以外はmyを使った方が安全です。
質問者 AKI♂  [削除]  投稿日 1/12(金) 19:28:25
こんにちは
一応、ローカルでテストしてるのですが
Error 500
CGI エラー - Content-Type ヘッダが正しくありません。
ってエラーがでるんです!
Perl4なんですが!
ワードチェックの文を入れる場所にもよるのでしょうか?
regist.cgiの#書き込みと#メッセージ出力の間に文をいれているのですが!
よろしくおねがいします
回答者 しあわせのツボ  [削除]  投稿日 1/12(金) 20:15:59
その場所はまずいです。
# メッセージ出力 より後ろ(sub errorの直前か直後)にして、元の場所から&wordcheck();で呼び出して下さい。
もしくはサブルーティンにせず直接埋め込む形にして下さい。
質問者 AKI♂  [削除]  投稿日 1/15(月) 00:06:31
初心者なもので、元の場所から呼び出すとわどうするんですか?
直接うめ込むときは文はかわるのですか?
回答者 しあわせのツボ  [削除]  投稿日 1/15(月) 11:45:00
書いたままです。sub wordcheckを移動させた後、その跡地に&wordcheck;という1文を置いておきます。
直接埋め込む時は、サブルーティン定義用の一番外の{ }を外すだけです(localやmyが使えないかもしれませんが)。
質問者 AKI♂  [削除]  投稿日 1/15(月) 22:20:14
まだエラーが(−−;
Unrecognized character \201 ignored at
Array found where operator expected at
syntax error at
と言うエラーメッセージが出てくるのですが
チンプンカンプンなんです。
回答者 しあわせのツボ  [削除]  投稿日 1/15(月) 23:00:53
文字コード201という訳のわからない文字がある、という意味です。
どこかに全角文字が紛れ込んでいませんか?
質問者 AKI♂  [削除]  投稿日 1/16(火) 20:07:26
ど素人ですみませんです。
全角スペースを発見削除して
if (&wordcheck ($FORM{'REM'})!=1)って文を書きこんだのですが
ぜんぜんはじかないで、登録されるんですが・・・

if ($FORM{'HANDLE'} eq '') { &error('入力エラー','名前を入力してください.'); }
if ($FORM{'EMAIL'} =~ /(.*)\@(.*)\.(.*)/) { ; } else { &error('入力エラー','Eメールを入力してください.'); }
if (&wordcheck ($FORM{'REM'})!=1) { &error('入力エラー','HP宣伝はダメ.'); }{

$FORM{'NAME'} =~ s/ //g;
$FORM{'NAME'} =~ s/ //g;

$FORM{'HANDLE'} =~ s/ //g;
$FORM{'HANDLE'} =~ s/ //g;

$FORM{'REM'} =~ s/ //g;
$FORM{'REM'} =~ s/ //g;

#書きこむ
if (!open(OUT,">>$file")) { &error('システムエラー','ファイルを書きこみオープンできません.'); }
print OUT "\,$date_now,$FORM{'HANDLE'},$FORM{'EMAIL'},$FORM{'SEX'},$FORM{'AGE'},$FORM{'PREF'},$FORM{'REM'}\n";
close(OUT);

}
回答者 しあわせのツボ  [削除]  投稿日 1/16(火) 20:59:17
引っ掛かるものがあれば返り値が1になるようにしているのですから、!=1でチェックしたら逆の動作になってしまいます。
あと、行の最後に余計な{がありますが大丈夫ですか?
質問者 AKI♂  [削除]  投稿日 1/16(火) 22:10:36
!=1を!=0にして余計な{}を削除をしました。
それで、もう一度よ〜く考えたらワードする文字の所をなぜか消して空白があったため
すべての文字がひっかかっていたみたいなのです(^^;スミマセン

長い間、お付き合いいただきありがとうございました。
たすかりました!



AKI♂
http://village.infoweb.ne.jp/~fwgj8769/index.html

このページは終了したので返信(回答)は書きこめません

Web裏技