【问题标题】:Client not receiving emails from page客户未收到来自页面的电子邮件
【发布时间】:2018-09-06 19:34:06
【问题描述】:

我目前正在为客户开发我的第一个网站,因此对 PHP 来说是全新的。该页面是在线的,但是电子邮件表单似乎除了刷新页面之外什么都不做。我在 php 文件的末尾放置了一个条件来回显成功或失败,但它似乎什么也没做。我无法确定哪里出错了。

html

   <form id="my_form" onsubmit="submitForm(); return false;">
    <p> <label>First Name</label>
    <input type="text" name="first_name" id="firstName" required> 
    </p>
    <p> <label>Last Name</label>
    <input type="text" name="last_name" id="lastName" required> </p>
    <p> <label>Phone Number</label>
    <input type="text" name="phone_number" id="phoneNumber" required> 
    </p>
    <p> <label>Email Address</label>
    <input type="email" name="email_address" id="emailAddress" 
     required> </p>
    <p class="full"> <label>Message</label>
    <textarea name="message" rows="5" id="message" required> 
    </textarea> </p>
    <p class="full">
    <button id="button" type="submit" value="Submit Form"><span 
    id="status"></span>Email</button>
    </p>
    </form>

JS

function _(id){ return document.getElementById(id); }
function submitForm(){
    _("button").disabled = true;
    _("status").innerHTML = 'please wait ...';
    var formdata = new FormData();
    formdata.append( "name", _("name").value );
  formdata.append( "lastName", _("lastName").value );
    formdata.append( "phoneNumber", _("phoneNumber").value );
  formdata.append( "emailAddress", _("emailAddress").value );
  formdata.append( "message", _("message").value );
    var ajax = new XMLHttpRequest();
    ajax.open( "POST", "index.php" );
    ajax.onreadystatechange = function() {
        if(ajax.readyState == 4 && ajax.status == 200) {
            if(ajax.responseText == "success"){
                _("my_form").innerHTML = '<h2>Thank you '+_("name").value +', your message has been sent.</h2>';
            } else {
                _("status").innerHTML = ajax.responseText;
                _("button").disabled = false;
            }
        }
    }
    ajax.send( formdata );
}

PHP

<?php
if( isset($_POST['name']) && isset($_POST['lastName']) && isset($_POST['phoneNumber']) && isset($_POST['emailAddress']) && isset($_POST['message']) ){
    $name = $_POST['name'];
  $lastName = $_POST['lastName'];
  $phoneNumber = $_POST['phoneNumber'];
    $emailAddress = $_POST['emailAddress'];
    $message = nl2br($_POST['message']);
    $to = "info@glaucomaspecialists.com";
    $from = $emailAddress;
    $subject = 'Schedule Inquiry';
    $message = "<b>Name:</b> '.$name.' <b>LastName:</b> '.$lastName.' <br><b>Phone:</b> '.$phoneNumber' <b>Email:</b> '.$emailAddress.' <p>'.$message.'</p>";
    $headers = "From: $from\n";
    $headers .= "MIME-Version: 1.0\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\n";
    if( mail($to, $subject, $message, $headers) ){
        echo "success";
    } else {
        echo "The server failed to send the message. Please try again later.";
    }
}
?>

【问题讨论】:

  • 您需要将其缩小到服务器端或客户端问题
  • 你的 JS 代码还在执行吗? type="submit" 的按钮将提交表单,该表单将“刷新”页面而不执行 Javascript。
  • 看起来您根本不满足 IF 条件,因此没有执行任何内容。让我们通过将以下内容放在第一行来看看一切是如何进入后端的:print "&lt;PRE&gt;".print_r($_POST[])."&lt;/PRE&gt;"; 并与我们分享输出

标签: javascript php html forms email


【解决方案1】:

向后处理您的代码 - 如果您的测试回显语句没有从 ​​if/else 写入任何内容,那么它永远不会被执行。这只能是因为您的陈述没有被评估为真实:

isset($_POST['name']) && isset($_POST['lastName']) && isset($_POST['phoneNumber']) && isset($_POST['emailAddress']) && isset($_POST['message']) ){

因此,要么您的 AJAX 根本没有发送任何数据,要么您的名称值有误。浏览你的代码你的 HTML 状态

<input type="text" name="first_name" id="firstName" required> 

虽然你的 JS 说

formdata.append( "name", _("name").value );

您已不再使用 firstNamename 作为您的 id。

因此

isset($_POST['name'])

评估为 false 并且您的代码永远不会运行。

【讨论】:

  • 拍我的额头。好的,我已经进行了更正,现在页面没有刷新,但按钮仍然显示“请稍候”消息。在控制台中,它会抛出一个错误 main.js:33 POST glaucomaspecialistsofsanfrancisco.com/index.php404 () submitForm @ main.js:33 onsubmit @ (index):200。
  • 404 表示函数找不到 index.php。这绝对是 php 文件的名称吗?和表格的文件在同一个目录吗?
猜你喜欢
  • 2019-07-22
  • 1970-01-01
  • 2015-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 2013-10-04
  • 2015-06-13
相关资源
最近更新 更多