【问题标题】:PHP not mailing any form dataPHP不邮寄任何表单数据
【发布时间】:2016-05-12 16:33:46
【问题描述】:

[编辑 - 添加了完整的表单 sn-p] 在我的 html 中 - 我有一个复选框 - 如下所示:

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" rel="stylesheet" />
<form class="contact-form row" id="feedbacks" method="POST" action="feedback.php">
  <div class="col-xs-10 col-xs-offset-1">
    <fieldset class="form-group">
      <label for="full_name"></label>
      <input type="text" class="form-control" placeholder="Your name and surname" name="full_name" id="full_name">
    </fieldset>
    <fieldset class="">
      <label for="feedback_email"></label>
      <input type="text" class="form-control" placeholder="Your Email address" name="feedback_email" id="feedback_email">
    </fieldset>
    <div class="checkbox">
      <label class="c-input c-checkbox">
        <input type="checkbox" name="subbed" id="subbed">
        <span class="c-indicator"></span>
        <span class="text-muted m-l-1">subscribe to <abbr class="msa"></abbr> notifcation service.</span>
      </label>
    </div>
    <fieldset>
      <label for="message"></label>
      <textarea class="form-control" rows="9" placeholder="Your message here.." name="message" id="message"></textarea>
    </fieldset>
    <div class="row m-t-1">
      <fieldset class="col-xs-4 col-xs-offset-4">
        <button class="btn btn-primary btn-block btn-lg" name="submit" type="submit" id="send_feedback">Send <i class="ion-android-arrow-forward"></i>
        </button>
      </fieldset>
    </div>
  </div>
</form>
<input type="checkbox" name="subscribed" id="subscribed" value="sub_me">

在我的 PHP 中,我创建了一个变量 $subscribe,它链接到 subscribed 复选框。

当复选框被单独留下时,PHP 应该发送"I would not like to recieve news emails" 的电子邮件。为了实现这一点,我选择在 PHP 表单验证代码中使用以下三元组:

[编辑 - 提供所有 PHP]

<?php
    $value = '';
    $error = "";
    $error_message = "";
    $info = "";
    if($_SERVER['REQUEST_METHOD'] == "POST"){
        $subscribe = 'Would ' . (isset($_POST['subbed']) && $_POST['subscribed'] == 'sub_me' ? 'like to ' : 'not like to ') . 'receive news emails.';
        $admin_email = "myemail_address@gmail.com";
        $headers = "MIME-Version: 1.0" . "\r\n";
        $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
        $headers .= 'From: <noreply@domain.ac.za>' . "\r\n";
        $headers .= 'Reply-To: ' . $feedback_email . "\r\n";
        'X-Mailer: PHP/' . phpversion();
        $full_name = $_POST['full_name'];
        $feedback_email = $_POST['feedback_email'];
        $feedback = $_POST['message'];
        $rep_message = "some thank you message to " . $full_name;
        $message = 'another message which references ' . $subscribe;
        $reply = 'some message consisting of ' . $full_name;
        mail($admin_email,"Feedback",$message,$headers,"-fforwardguy@gmail.com");
        mail($feedback_email,"Feedback",$reply,$headers);
        }       
?>

[编辑] 问题是表单只被确认为已发送,但没有收到任何数据。

[编辑额外信息后 - 以下情况会影响表单提交吗? `

  1. 有问题的页面上有 2 个表单
  2. 两种表格均通过AJAX提交。
  3. 第一个表单按预期运行
  4. 在这个单一的 PHP 文件中使用了两个邮件函数(仅处理一个表单)。
  5. 仔细查看后 - 我发现发送的电子邮件中不包含表单中输入的任何文本

AJAX 函数有效,成功函数运行。)

【问题讨论】:

  • 你确定你的方法是 POST 吗?
  • 做一个var_dump($_POST['subscribed']); 看看它说了什么
  • 代码没问题。我在当地查过。如果表单方法是 post,它应该可以工作。

标签: php html forms checkbox ternary


【解决方案1】:

好的 - 所以在我注意到实际问题后 - 我发现我的 AJAX 函数正在从错误的表单中收集数据。

【讨论】:

    【解决方案2】:

    试试这个:

    $subscribe = 'Would ' . (isset($_POST['subscribed']) &amp;&amp; $_POST['subscribed'] == 'sub_me' ? 'like to ' : 'not like to ') . 'receive news emails.';

    这里我检查$_POST 变量是否实际设置,然后我们进行松散比较检查以查看sub_me 是否是提交的值。

    您也可以尝试将表单元素上的value 属性留空,然后仅使用isset($_POST['subscribed']) 来检查$_POST['subscribed'] 是否实际设置。如果未选中该复选框,isset($_POST['subscribed']) 将返回 false

    【讨论】:

    • 愿意解释否决票背后的原因吗?没有解释的反对票是没有用的。
    • 我认为这个答案可能在第一种情况下有效(当表格的其余部分似乎工作时)。不过,我不知道谁对你投了反对票。我还不能公开投票赞成/反对人们 - 否则我会为你平衡你的答案。
    • @user2850190 感谢您的考虑。如果您还记得什么时候可以,请随时这样做;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2020-02-12
    • 2012-02-04
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多