$ _POST似乎不起作用

时间:2015-11-22 16:17:44

标签: php html

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



<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>
&#13;
&#13;
&#13;

这被放到了一个在线主机上,似乎没有用。

它发送了电子邮件,但它只是说&#34;问题来自:&#34;。我可以告诉它没有正确阅读$ _POST。

帮助是适当的。 :P

1 个答案:

答案 0 :(得分:7)

首先,您的代码的这部分内容不在您的表单中。

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

原样<input type="text" name="email">

将所有表单元素放在<form></form>标记内。

您的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()

同样使用FILTER_VALIDATE_EMAIL

HTML sticklers:

关于使用<html>,最好声明一个doctype,例如<!DOCTYPE html>

单击Firefox,将鼠标放在<html>上时,会在HTML源代码中抛出(红色)警告。

如:

  

在没有首先看到doctype的情况下看到了开始标记。预计"<!DOCTYPE html>"

  • <form method="POST" action=''>保持一致并使用所有双引号。

  • 从HTML中分离您的PHP。将您的PHP置于HTML之上,如果您不会回应除了您的&#34;邮件成功之外的任何特殊情况。消息。

阻止重新提交数据:

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

参考文献:

XSS注入:

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

首先应声明从POST数组分配的变量,然后连接这些变量。你站在这里进行XSS注射。

参考文献:

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

  

&#34;我正在创建一个电子邮件系统&#34;

您似乎对使用电子邮件感到陌生,这里有一些指示。

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

有关于此的法律,超出了这个问题的范围。

加拿大是我的国家,与其他国家一样,有严格的反垃圾邮件法律。

因此,请确保注册的人知道他们自己的内容,并采用双重选择方法进行验证。

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