0

サイトのお問い合わせフォームから空のメールを受信して​​いますが、その理由はわかりません。私たちのフォームは非常にシンプルで、検証もそれほど高度ではありませんが、私たちの目的には十分です。

5つのフィールドがあります。

  • 名前(テキスト入力)
  • メール(テキスト入力)
  • 電話(テキスト入力)
  • 理由(選択、3つの値)
  • メッセージ(テキストエリア)

次に、JSを使用して、すべてのフィールドを検証します。最後に、送信を使用して、phpメール関数を使用してメールを送信します。

<?php
$name = $_POST['name'];
$mail= $_POST['mail'];
$phone= $_POST['phone'];
$reason= $_POST['reason'];
$message= $_POST['message'];

$header = 'From: ' . $mail. " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$msg.= "Name: " . $name . " \r\n";
$msg.= "Mail: " . $mail. " \r\n";
$msg.= "Phone: " . $phone. " \r\n";
$msg.= "Reason: " . $reason. " \r\n";
$msg.= "Message: " . $message. " \r\n";

$for= "ourmail@ourserver.com";
$as= "Contact form";

mail($for, $as, $msg, $header);
?>

一般的に、問題なく動作します。ただし、ALL(理由を含む...これは選択です!)フィールドが空の電子メールを受信する場合があります。何かのようなもの:

Subject: Contact form
Name:
Mail:
Phone:
Reason:
Message:

どうすればいいの?

4

2 に答える 2

2

phpスクリプトを使用してサーバー側の検証を作成します。

デモストレーション

if($_POST['Name']=="") {
    $err = "Enter the name";
}
if($_POST['mail']=="") {
    .......
}

......
if($err=="") {
    //mail function
}
else {
    echo $err;
}
于 2012-08-07T09:44:44.013 に答える
2

POSTを介してデータを送信していると仮定します。

アクションURLは、POSTデータなしでブラウザから直接アクセスできると考えましたか?これにより、すべての「フィールド」が空になります。

その場合は、いくつかの方法でサーバー検証を試すことができます。

  • URLがフォームURLからのみアクセスできるように、リファラー検証を追加します。その目的で$_SERVER['HTTP_REFERER']を使用できますが、常に使用できるとは限らないことに注意してください。
  • データが送信されているかどうかを確認します。if(isset($_POST['name']) && isset($_POST['email'])サーバー検証を追加する場合のように、その目的でissetを使用できます。あなたはいつでもこれ$name=isset($_POST['name']) ? $_POST['name'] : 'no_name_entered'を行うことができ、とにかく電子メールを送信させることができます。
  • フォーム内に「連絡先」などの非表示の入力を追加し、サーバー側に設定されているかどうかを確認します。if(!isset($_POST['contacting'])) die('ERROR: Form not sent');

とにかく、選択したフィールドを介して送信されたデータであっても、受信するほとんどのデータは汚染される可能性があることに注意してください。

于 2012-08-07T10:46:23.277 に答える