0

お問い合わせページで空のメールを防ぐためにサーバー検証を実装しようとしていますが、PHPでそれを行う方法がわかりません。これが私のコードです:

<?php
$field_name = $_POST['cf_name'];
$field_email = $_POST['cf_email'];
$field_tel = $_POST['cf_tel'];
$field_message = $_POST['cf_message'];


$mail_to = 'test@test.com, test@test.com, test@test.com';
$subject = 'Just iStuff Mobile Contact Us: '.$field_name;

$body_message = 'From: '.$field_name."\n";
$body_message .= 'E-mail: '.$field_email."\n";
$body_message .= 'Telephone Number: '.$field_tel."\n";
$body_message .= 'Message: '.$field_message;

$headers = 'From: '.$field_email."\r\n";
$headers .= 'Reply-To: '.$field_email."\r\n";

$mail_status = mail($mail_to, $subject, $body_message, $headers);

if ($mail_status) { ?>
    <script language="javascript" type="text/javascript">
        alert('Thank you for your email, we have received your message and will reply within the next few days.');
        window.location = 'contactus.html';
    </script>
<?php
}
else { ?>
    <script language="javascript" type="text/javascript">
        alert('Message failed, please try again or email test@test.com');
        window.location = 'contactus.html';
    </script>
<?php
}
?>

誰でもこれを行うのを手伝ってもらえますか?オンラインのチュートリアルでは、この方法については説明していません...

ありがとう

4

4 に答える 4

3

$mail_to..の前に

サーバー側で最初に _POST/_GET を検証できます。

<?php
if (empty($field_name) && empty($field_email) && empty($field_tel) && empty($field_message)) {
    echo 'Please correct the fields';
    return false;
}
?>

または、クライアント側で最初に検証することもできます。時間とリソースを節約できます。

于 2012-07-02T03:37:16.367 に答える
3

変数の「空」をテストして、早期に終了するだけです。このようなもの:

if(empty($field_email)) {
    // maybe show the user a reason why this was rejected...
    return;
}

おそらく、ほぼすべての入力フィールドに対してこれを行う必要があります。

さらに、JavaScript (jQuery には優れたプラグインがいくつかあります) を使用して、ユーザーが最初から無効なデータを送信するのを防ぐことができます。これにより、サーバー側で行う必要がなくなるわけではありませんが (JS を無効にするか、悪意のある人物が意図的にこの手段をバイパスする可能性があるため)、よりユーザー フレンドリーなエクスペリエンスにすることができます。

于 2012-07-02T02:37:30.933 に答える
1

これにはフィルターを使用できます。渡された電子メール アドレスをmail()操作の一部として使用しているため、次の検証も行うことをお勧めします。

$fields = filter_input_array(INPUT_POST, array(
    'name' => FILTER_UNSAFE_RAW,
    'email' => FILTER_VALIDATE_EMAIL,
    'tel' => FILTER_UNSAFE_RAW,
    'message' => FILTER_UNSAFE_RAW,
));

// check for missing fields
if (null === $fields || in_array(null, $fields, true)) {
  // some or all fields missing
} elseif (in_array(false, $fields, true)) {
  // some or all fields failed validation
} else {
  // all fields passed validation
  // use $fields['email'] as the email address
}

FILTER_UNSAFE_RAWメール以外のすべてのフィールドに使用しましたが、適用されるより良いフィルターがあるかもしれません。

于 2012-07-02T02:50:18.693 に答える