2017-02-12 112 views
-2

我已经花了几个小时在这个简单的代码。电子邮件到达,但名称电子邮件通讯等字段为空。它一定是愚蠢的,但它令我疯狂,它只是简单的形式,它不工作。 另外,如果你知道,你能否帮我阻止用户点击表单两次并发送多封电子邮件。万分感谢!错误的PHP电子邮件形式

<?php 
    $name = strip_tags(htmlspecialchars($_GET['name'])); 
    $email_address = strip_tags(htmlspecialchars($_GET['email'])); 
    $message = strip_tags(htmlspecialchars($_GET['message'])); 
    $newsletter = strip_tags(htmlspecialchars($_GET['newsletter'])); 

    // Create the email and send the message 
    $to = '[email protected]'; 
    $email_subject = "Message from from : $name"; 
    $email_body = "Message from form arrived.\n\n"."Message details:\n\nName: $name\n\nEmail: $email_address\n\nPhone: $newsletter\n\nMessage:\n$message"; 
    $headers = "From: [email protected]\n"; 
    $headers .= "Reply-To: $email_address"; 
    mail($to,$email_subject,$email_body,$headers);   
?> 



<form method="GET"> 
    <span>Name</span> 
    <input type="text" name="name" placeholder="Your name"><br /> 

    <span>E-mail</span> 
    <input type="email" name="email" placeholder="E-mail"><br /> 

    <div>Message</div> 
    <textarea type="text" name="message" rows="8" cols="80"></textarea><br /> 

    <input type="checkbox" name="newsletter" id="newsletter"> 
    <label for="newsletter">I wold like to get email infromations</label><br /> 

    <button type="submit">Send</button> 
    <span class="message"></span> 
</form> 
+1

那么,'$ _GET'实际上包含了什么?调试揭示了什么(打印正文,启用error_reporting +通知)?你从哪里冒出来的无意义?目前为止,您的搜索/搜索功能是什么? (一个中有两个问题在这里不是问题。) – mario

+0

调用'htmlspechialchars()'没有任何意义。你不会把这些字符串放在html标记中。 – arkascha

+1

防止发送表单两次的最好方法是停止将这两个部分放在一个文件中的习惯:表单和表单处理代码。它们属于单独的文件。这样,表单在浏览器视图中被删除,并且您可以显示一些确认或其他内容。 – arkascha

回答

-3

在处理包含变量的冗长字符串时,您可能更喜欢HEREDOC语法,就像您用来生成电子邮件内容一样。如果你的变量正确填充,那么这应该工作。

$email_body = <<<EOT 
Message from form arrived. 
Message details: 
Name: $name 
Email: $email_address 
Phone: $newsletter 
Message: 
$message 
EOT; 
+3

这并没有真正回答这个问题,是吗? – arkascha

+0

也许..我假设他的变量正在填充,但不会因'$ var \ n \ n'被解析 –