【问题标题】:$_POST doesn't seem to work$_POST 似乎不起作用
【发布时间】:2016-02-24 17:35:12
【问题描述】:

我正在创建一个电子邮件系统,所以我做了这个小测试花絮,它可以工作......有点?

<html>
    <head><title>EMail Test</title></head>

    <body>
<input type="text" name="email">

EMail (required)

<br><br>

<textarea name="comment" rows="5" cols="40"></textarea> what's your problem?
<br><br>
<form method="POST" action=''>
<input type="submit" name="button1"  value="Submit">
</form>

<?php

if (isset($_POST['button1'])) { 

    $msg=$_POST['email']." asks: ".$_POST['comment'];

    echo $msg;
    $email=$_POST['email'];
    $SupportNinga="Typhoone01@gmail.com";

    $mail=mail($SupportNinga,"Question from ".$email,$msg);
    echo "Emailing...";
    if($mail) {
        echo"E-mail sent sucessfully";
    }
}  
?>

</body>

</html>

这被放入在线主机中,但似乎不起作用。

它发送了电子邮件,但它只是说“问题来自 - 询问:”。我可以看出它没有正确读取 $_POST。

已获得帮助。 :P

【问题讨论】:

    标签: php html


    【解决方案1】:

    首先,这部分代码在表单之外。

    <textarea name="comment" rows="5" cols="40"></textarea> what's your problem?
    

    &lt;input type="text" name="email"&gt;一样

    将所有表单元素放在&lt;form&gt;&lt;/form&gt; 标签内。

    您的mail() 参数也已关闭。

    阅读手册http://php.net/manual/en/function.mail.php

    使用错误报告。

    error reporting 添加到文件顶部,这将有助于查找错误。

    <?php 
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    
    // rest of your code
    

    旁注:显示错误应该只在暂存阶段完成,而不是在生产阶段。


    您还应该在您的电子邮件输入中检查empty()'ness。

    同时使用FILTER_VALIDATE_EMAIL 对付它:


    HTML 坚持者:

    关于使用&lt;html&gt;,最好声明一个doctype,例如&lt;!DOCTYPE html&gt;

    如果将鼠标放在&lt;html&gt; 上,Firefox 会在 HTML 源代码中抛出(红色)警告。

    如:

    在没有先看到文档类型的情况下看到开始标签。预计"&lt;!DOCTYPE html&gt;"

    • &lt;form method="POST" action=''&gt; 保持一致并使用所有双引号。

    • 将 PHP 与 HTML 分开。如果除了“邮件成功”消息之外,您不打算回显任何特殊内容,请将 PHP 放在 HTML 上方。


    防止数据重新提交:

    您应该使用标头重定向到新页面,并使用会话/令牌来防止用户在用户刷新该页面时重新提交相同的数据。

    参考资料:

    XSS 注入:

    $msg=$_POST['email']." asks: ".$_POST['comment'];
    

    您应该首先声明从 POST 数组分配的变量,然后连接这些变量。你在这里接受 XSS 注入。

    参考资料:


    用户通过电子邮件注册脚注:

    “我正在创建一个电子邮件系统”

    您似乎对使用电子邮件不熟悉,这里有一些建议。

    您需要确保在每封邮件中都包含取消订阅方法。

    对此有法律规定,超出了这个问题的范围。

    作为我的国家,加拿大拥有严格的反垃圾邮件法律,其他国家也一样。

    因此,请确保注册的人知道他们正在做什么,并有一个双重选择的验证方法。

    否则,您将被列入黑名单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-29
      • 2016-02-01
      • 2020-09-23
      • 2010-12-05
      • 2011-06-14
      • 2015-01-10
      • 2011-01-18
      • 2018-06-20
      相关资源
      最近更新 更多