【问题标题】:Pop up form does not send email弹出表单不发送电子邮件
【发布时间】:2014-07-31 16:54:48
【问题描述】:

弹出表单有问题。它不发送电子邮件。这是html表单:

<form action="#" method="post" id="form" >
  <img src="images/3.png" id="close"/>
  <h2>Contact Us</h2><hr/>
  <input type="text" name="name" id="name" placeholder="Name"/>
  <input type="text" name="email" id="email" placeholder="Email"/>
  <textarea name="message" placeholder="Message" id="msg"></textarea>
  <a id="submit" href="javascript: check_empty()">Send</a>
</form>

JS弹出html表单:

function check_empty(){
if(document.getElementById('name').value == "" 
|| document.getElementById('email').value == "" 
||document.getElementById('msg').value == "" ){
alert ("Fill All Fields !");
}
    else {  
    document.getElementById('form').submit();  
    alert ("Form submitted successfully...");
    }
}

//function to display Popup
function div_show(){ 
document.getElementById('abc').style.display = "block";
}

//function to check target element
function check(e){ 
var target = (e && e.target) || (event && event.srcElement); 

var obj = document.getElementById('abc'); 
var obj2 = document.getElementById('popup'); 

checkParent(target)?obj.style.display='none':null; 
target==obj2?obj.style.display='block':null; 

} 

//function to check parent node and return result accordingly
function checkParent(t){ 
    while(t.parentNode){ 
        if(t==document.getElementById('abc'))
            { 
                return false 
            }
        else if(t==document.getElementById('close'))
            {
                return true
            } 
        t=t.parentNode 
    } 
    return true 
} 

和 php 函数将表单数据发送到电子邮件。一切正常,但我没有收到关于 gmail 的电子邮件。类似的 php 脚本我用来发布电子邮件而不弹出并且它有效。

       <?php 
if(isset($_POST['submit'])){
    $to = "myemail@gmail.com"; 
    $from = $_POST['email']; 
    $first_name = $_POST['name'];
    $message = $first_name  . " wrote following:" . "\n\n" . $_POST['message'];   
    mail($to,$from,$message); 
    }
?>

【问题讨论】:

  • 你是在服务器还是本地主机上工作?
  • 你有action="#" 所以它不会去任何地方。它甚至不去 PHP 脚本,更不用说电子邮件了。它。
  • 线索:检查你的(PHP)条件语句;它依赖于它。
  • @CharlotteDunois 在服务器上,另一个没有弹出的联系表格很好用。
  • 只是为了澄清为什么&lt;a id="submit" href="javascript: check_empty()"&gt;Send&lt;/a&gt; 不起作用,是因为它不被视为有效的 POST 元素。如果您使用&lt;input type="submit" name="submit" value="Send"&gt;,它会起作用的。 @Fakt7 - PHP 正在寻找一个命名的 POST 表单“元素”。 id 不符合“命名”元素的条件;只是让你知道差异。这就是为什么我说您的 PHP 取决于操作。 if(isset($_POST['submit'])){...} - 那会让你的代码工作。

标签: javascript php html forms email


【解决方案1】:

简单:您的表单中没有名为“submit”的元素,因此您的 if() 测试总是失败。
id != name 在 HTML 表单中; 意思id 不等于name

一个简单的解决方法:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
   ... form was submitted ...
}

但无论如何,这段代码都很糟糕。你不应该只使用客户端验证。绕过太容易了。 始终也在服务器上验证/验证。

【讨论】:

  • 正如我的clue 所说。让他们先考虑一下,然后将 2 和 2 放在一起。
  • 但是我已经定义了以 html 形式提交 &lt;a id="submit" href="javascript: check_empty()"&gt;Send&lt;/a&gt; 我正在用 php 测试这个提交。不好吗?我尝试添加 name="submit" 但它没有帮助
  • with ` if ($_SERVER['REQUEST_METHOD'] == 'POST') {` 它工作。有趣的。谢谢
  • @Fakt7 由于表单的方法method="post",“变通”有效
  • @fakt:可以从表单提交 3 个内容:&lt;input&gt;&lt;select&gt;&lt;textarea&gt;。在&lt;a&gt; 标签上打一个名字对于表单来说是完全没用的。
【解决方案2】:

您应该将表单中的操作设置为您在服务器中操作的 URL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多