【问题标题】:Stopping empty form submission PHP停止空表单提交PHP
【发布时间】:2012-07-02 02:35:28
【问题描述】:

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

谁能帮我做这个,网上的教程没有介绍这种方法......

谢谢

【问题讨论】:

  • 如果这些是实际的电子邮件,我建议删除它们。机器人垃圾邮件。

标签: php forms validation


【解决方案1】:

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

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

【讨论】:

  • 这似乎不正确。您正在使用AND 而不是OR 进行测试,所以它只会在所有字段都留空时触发......而不仅仅是一个。
  • 是的,这取决于您的要求。上面的代码确实检查了所有变量。或者,如果您想要一个可选变量。您可以使用 OR (||)。
【解决方案2】:

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

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

您可能只想对所有输入字段执行此操作。

此外,您可以使用 JavaScript(jQuery 有一些不错的插件)来防止用户首先提交无效数据。这不会消除在服务器端执行此操作的需要(因为他们可以禁用 JS,否则恶意人员可能会故意绕过此措施),但它可以使其成为更友好的用户体验。

【讨论】:

    【解决方案3】:

    您可以为此使用过滤器;由于您将传递的电子邮件地址用作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,但也许有更好的过滤器适用。

    【讨论】:

      【解决方案4】:

      尝试在表单中输入提交输入&lt;input type="submit" name="sub" value="Submited"&gt; 当它被点击时。

      <?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');
        }
        .....
      

      【讨论】:

        猜你喜欢
        • 2015-07-07
        • 2019-07-09
        • 2022-01-17
        • 2011-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多