停止空表单提交PHP

时间:2012-07-02 02:35:28

标签: php forms validation

我一直在尝试实施服务器验证以防止在我的联系我们页面中显示空白电子邮件,但我不确定如何在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 个答案:

答案 0 :(得分:2)

只测试变量“空虚”并提前退出。像这样:

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

您可能希望对几乎所有输入字段执行此操作。

此外,您可以使用JavaScript(jQuery有一些不错的插件)来防止用户首先提交无效数据。这不会消除服务器端的需要(因为它们只能禁用JS,或者恶意的人可能故意绕过这个措施),但它可以使它更加用户友好。

答案 1 :(得分:2)

在你的$ 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;
}
?>

或者,您可以先在客户端进行验证。它将为您节省时间和资源。

答案 2 :(得分: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用于除电子邮件之外的所有字段,但也许有更好的过滤器适用。

答案 3 :(得分:0)

尝试将提交输入<input type="submit" name="sub" value="Submited">放入表单中 单击时。

<?php

if (isset($_POST['sub']) {
  $field_name = $_POST['cf_name'];
  $field_email = $_POST['cf_email'];
  $field_tel = $_POST['cf_tel'];
  $field_message = $_POST['cf_message'];
  if (empty($field_name) && ....)
  {
     exit('Field name is empty');
  }
  .....