PHP 联系我们表单在页面重新加载时发送

标签 php html forms email contact-form

我是 PHP 的新手,正在尝试为我的网站建立一个简单的联系方式。我发送了表单,但出于某种原因,每次我重新加载页面时它也会发送一条空白消息。我在下面发布了一些表格。

在此提供任何帮助/任何提示,我们将不胜感激。

   <?php

    $name_error = "";
    $name = "";

    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        if (empty($_POST["name"])) {
            $name_error = "Whoops! Please enter your full name";
        } else {
            $name = test_input($_POST["name"]);

            if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
                $name_error = "Whoops! Only letters and white spaces are allowed in a name";
            }
        }

    if ($name_error == ''){
        $message_body = '';
        unset($_POST['submit']);
        foreach ($_POST as $key => $value){
            $message_body .= "$key: $value\n";
        }   

        $to = 'myemail@gmail.com';
        $subject = 'Contact Us Form Submission';

        if (mail($to, $subject, $message_body )){
            $success = "Your message has been sent. A representative will be in contact with you shortly.";
            $name = $email = $phone = $message = $inquiry = $hear = $success = '';
        }
    }   
    function test_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }
?>

最佳答案

您的“邮件”逻辑需要位于服务器请求方法中,一个简单的解决方法是复制您的 if 逻辑以包裹您的邮件逻辑。即

if($_SERVER["REQUEST_METHOD"] == "POST"){
  if (mail($to, $subject, $message_body )){
    $success = "Your message has been sent. A representative will be in contact with you shortly.";
    $name = $email = $phone = $message = $inquiry = $hear = $success = '';
  }
}

当然,您也可以删除当前的 if 语句右括号,并将其放在代码的末尾(因为没有必要这么早中断 if 语句)

<?php

$name_error = "";
$name = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["name"])) {
        $name_error = "Whoops! Please enter your full name";
    } else {
        $name = test_input($_POST["name"]);

        if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
            $name_error = "Whoops! Only letters and white spaces are allowed in a name";
        }
    }

if ($name_error == ''){
    $message_body = '';
    unset($_POST['submit']);
    foreach ($_POST as $key => $value){
        $message_body .= "$key: $value\n";
    }   

    $to = 'myemail@gmail.com';
    $subject = 'Contact Us Form Submission';

    if (mail($to, $subject, $message_body )){
        $success = "Your message has been sent. A representative will be in contact with you shortly.";
        $name = $email = $phone = $message = $inquiry = $hear = $success = '';
    }
}

// <--- ADD CLOSING BRACKET HERE

function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

关于PHP 联系我们表单在页面重新加载时发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53001043/

相关文章:

Python - Beautiful Soup - 删除标签

c# - 使用属性在表单之间传输数据

javascript - 为什么我的表单验证不正确

jquery - 应使用什么策略来最小化页面初始化抖动?

javascript - 如何使用JQuery在SharePoint中停止音频/视频?

django 验证多个内联表单

php - 部署策略,PHP + SVN

php - 在php中获取文件的大小

php - 在 MySQL 中插入唯一记录

php - 使用 ajax 的 Codeigniter session