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を押すと、電話番号が文字の羅列でも問合せ確認画面へ飛んでしまいます。

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

教えて下さい。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/06/06 10:42:00
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:windofjuly No.3

回答回数2625ベストアンサー獲得回数1149

ポイント60pt

【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などに格納していることにも理由があるはず(セキュリティ、取り扱い安さなど)ですから、データ取得方法は統一しておいたほうが後々のためでしょう

id:matun55

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

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

2011/06/06 09:11:08

その他の回答4件)

id:dothan No.1

回答回数145ベストアンサー獲得回数25

ポイント40pt

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


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

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

2011/06/05 15:43:11
id:a-kuma3 No.2

回答回数4973ベストアンサー獲得回数2154

ポイント40pt

■■■は、

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

◆◆◆は、

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

という感じ。


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

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

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

id:matun55

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

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

2011/06/06 09:11:51
id:windofjuly No.3

回答回数2625ベストアンサー獲得回数1149ここでベストアンサー

ポイント60pt

【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などに格納していることにも理由があるはず(セキュリティ、取り扱い安さなど)ですから、データ取得方法は統一しておいたほうが後々のためでしょう

id:matun55

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

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

2011/06/06 09:11:08
id:hanako393 No.4

回答回数1142ベストアンサー獲得回数87

ポイント20pt

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/

id:windofjuly No.5

回答回数2625ベストアンサー獲得回数1149

ポイント40pt

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

>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'])){
  • id:windofjuly
    うぃんど 2011/06/05 18:45:40
    >アップミス?
    1つのファイルで初回のフォーム表示、入力チェック後のフォーム表示、最終確認用のページ表示を全て行うため、制御用フォームからhiddenで$form!を送ってきてるだけでは?
  • id:a-kuma3
    >>アップミス?
    >1つのファイルで初回のフォーム表示、入力チェック後のフォーム表示、最終確認用のページ表示を
    >全て行うため、制御用フォームからhiddenで$form!を送ってきてるだけでは?

    そう、その通りです m(_ _)m >windofjuly

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません