人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPでお問合せフォームを作成しています。スパム対策に現在改善しているのですが、

【電話番号欄が空白又は文字の羅列でも送信できる仕様】

【空白又は数字と-のみだったら送信できる仕様】 に変更したいのです

===============================================
<?
if($form=="" || $form_name=="" || $form_mail=="" || $form_comment=="" || ■■■){
if($form=="1"){
if($form_name=="") {$form_name_errer="<BR>名前必須";}
if($form_mail=="") {$form_mail_errer="<BR>メールアドレス必須";}
if(preg_match("/[^\d\-]/",$_REQUEST['form_tel'])){$form_tel_errer="<BR>半角数字と-のみ入力して下さい";}
if($form_comment=="") {$form_comment_errer="<BR>コメント必須";}
}
?>
????問合せページ ソース?????
<input type="submit" name="submit" value="送信内容確認画面へ">

<?
}
if($form=="1" && $form_name!="" && $form_mail!="" && $form_comment!="" && ◆◆◆){
?>

???問合せ内容確認画面 ページソース???
===============================================
今回、6行目を追加しましたが、
submitを押すと、電話番号が文字の羅列でも問合せ確認画面へ飛んでしまいます。

■■■と◆◆◆の所への記入方法が解らないからです。

教えて下さい。


●質問者: matun55
●カテゴリ:ウェブ制作
✍キーワード:PHP コメント スパム対策 ソース メールアドレス
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● どたん
●40ポイント

preg_match の部分を以下のようにしてみてください。


preg_match(("/[^0-9\-]/", $_REQUEST['form_tel'])
◎質問者からの返答

■■■、◆◆◆の部分の書き方が解らないのです。


2 ● a-kuma3
●40ポイント

■■■は、

! preg_match(("/^[0-9\-]+$/", $_REQUEST['form_tel'])

◆◆◆は、

preg_match(("/^[0-9\-]+$/", $_REQUEST['form_tel'])

という感じ。


だと思うんだけど、質問にあげたコードが、

if($form=="" || ...
if($form=="1"){

ってなってるのは、アップミス?

◎質問者からの返答

エラーが出てしまいます。

Parse error: syntax error, unexpected T_STRING in /home/*****.php on line **


3 ● うぃんど
●60ポイント ベストアンサー

【1】■■■

変更前 if($form=="" || $form_name=="" || $form_mail=="" || $form_comment=="" || ■■■){
修正後 if($form=="" || $form_name=="" || $form_mail=="" || $form_comment=="" || preg_match(("/[^\d\-]/", $_REQUEST['form_tel'])){

【2】◆◆◆

前半で空欄などのチェックを行っているので、もう一度確認する必要はないはずです

変更前 if($form=="1" && $form_name!="" && $form_mail!="" && $form_comment!="" && ◆◆◆){
修正後 else {

あらためて確認する必要があるという場合は下記のような具合にエラーがあったかどうかでの判定をすると良いでしょう

変更前 if($form=="1" && $form_name!="" && $form_mail!="" && $form_comment!="" && ◆◆◆){
修正後 if($form=="1" && $form_name_errer=="" && $form_mail_errer=="" && $form_tel_errer=="" && $form_comment_errer==""){

【3】気になった点

他の項目は変数に読み込んでから扱っていますが form_tel だけは$_REQUESTで直接読み取ろうとしています

既存のものを手っ取り早く改良したいということだと思いますがフォームの内容をいったん$form_nameなどに格納していることにも理由があるはず(セキュリティ、取り扱い安さなど)ですから、データ取得方法は統一しておいたほうが後々のためでしょう

◎質問者からの返答

エラーが出てしまいます。

Parse error: syntax error, unexpected T_STRING in /home/*****.php on line **


4 ● hanako393
●20ポイント

PHPで実装すると、一度PHPに問い合わせない限り電話番号のチェックを行えません。

Javascriptと併用して他の質問者の方の方法も組み込むか

PHP側では実装しないというのも一つの方法です。

Javascriptだけでもある一定レベルの実用性をもってSPAMを排除可能です。

以下が参考になると思います。

電話番号のチェックはJavascriptでブラウザ側でやっては?

http://takeoba.com/index.php?JavaScript%A4%C7%C5%C5%CF%C3%C8%D6%B9%E6%B7%C1%BC%B0%A5%C1%A5%A7%A5%C3%A5%AF

Javascriptを無視するスパム対策には以下の手法を採用しては?

http://www.magicvox.net/archive/2006/12042127/


5 ● うぃんど
●40ポイント

>エラーが出てしまいます。

>Parse error: syntax error, unexpected T_STRING in /home/*****.php on line **

文法エラー(=記述ミス)が何行目で出ているのか判りませんが、回答文中のかっこの数が合って無かったのが原因であるとすれば下記のように訂正してください

if($form=="" || $form_name=="" || $form_mail=="" || $form_comment=="" || preg_match("/[^\d\-]/", $_REQUEST['form_tel'])){
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ