【问题标题】:php contact form not sending contentphp联系表格不发送内容
【发布时间】:2014-05-02 06:34:47
【问题描述】:

我在 wordpress 中建立一个网站,通常使用 contactform7 插件来处理表单,但我正在尝试学习如何在不依赖插件的情况下设置表单。我最近在这方面取得了成功,但在这个最新的网站上,我的内容正在发送给收件人。我收到一封电子邮件,但没有发送表单中的任何值。

这是我的表单(我知道我还必须了解验证/清理,这将是另一个主题!):

<form action="<?php echo home_url('/'); ?>sent/" method="POST" class="col-sm-7">
    <input id="name" placeholder="name:" name="name" type="text" class="form-control" required></label>
    <input id="email" placeholder="email:" name="email" type="text" class="form-control" required> 
    <textarea id="message" placeholder="message:" name="message" class="form-control" rows="8" required></textarea>
    <button id="contact-submit" type="submit" class="btn form-control">Submit</button>
</form>

当用户按下提交时,页面重定向到该文件中的 url/sent/ 我有这个:

<?php 
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$formcontent="From: $name, $email, \nMessage: $message";
$recipient = "myemail@email.com";
$subject = "Contact Form Submission";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!"); 
?>

现在,当我在收件箱中收到电子邮件时,它会显示如下:

发件人: , , 留言:

就是这样。我在这里有什么明显的遗漏吗?一如既往,我们非常感谢任何帮助。

谢谢!

添加说明:似乎当按下提交按钮并且页面重定向时,它正在拉一个 404,尽管它重定向到的 url 实际上是正确的,即使我只是刷新页面而不更改它丢弃的 url 404 并加载页面内容。我想这就是为什么没有发送内容的原因,但是为什么会这样呢?

【问题讨论】:

  • 如果可以,请尝试使用浏览器的调试工具验证 HTTP 请求实际上包含变量并且它们不会被某些 JavaScript 魔法删除。附带说明一下,在邮件标题中设置未经过滤的用户内容只是乞求脚本被垃圾邮件发送者滥用。至少对其中的电子邮件地址进行一些正式的验证。
  • 不幸的是,我不确定如何检查@Janoszen 的任何建议?验证/卫生是我名单上的下一个。谢谢!
  • 你用的是什么浏览器?他们中的大多数可以检查他们发送的 POST 请求。 Here's an example with the Chrome developer tools.

标签: php forms


【解决方案1】:

事实证明,这个问题是由于 wordpress 的问题造成的。 Wordpress 不允许您使用 name="name" - 这会导致 404 并且不会发送表单值。我将名称更改为“form_name”,现在可以正常使用了。

感谢您的帮助,希望这对其他人也有帮助!

感谢 http://www.webdevdoor.com 的 Tom Elliot 的帮助! http://www.webdevdoor.com/wordpress/submitting-form-wordpress-redirects-404-page/

【讨论】:

    【解决方案2】:

    您应该经常检查是否设置了值

    if(isset($_POST['name']) && isset($_POST['email'])){
        $name = $_POST['name'];
        $email = $_POST['email'];
        $message = $_POST['message'];
        $formcontent="From: $name, $email, \nMessage: $message";
        $recipient = "myemail@email.com";
        $subject = "Contact Form Submission";
        $mailheader = "From: $email \r\n";
        if(mail($recipient, $subject, $formcontent, $mailheader)){
         echo "message sent!";
        }else{
            die("Error!");
        }
    }else{
        echo "email or name is not set";
    }
    

    也尝试将您的按钮更改为&lt;input type="submit"&gt;,即使它可能没有什么不同。 除了代码看起来不错

    【讨论】:

    • 谢谢@meda,这似乎没有帮助,将按钮更改为输入会将按钮文本从“按钮”(在代码中定义)更改为“提交查询”,我不知道如何改变。
    • 我看到了你的编辑,只有会话可以在重定向后持续存在,你应该直接链接到表单中的 php 脚本
    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多