PHP问题“如果”

时间:2013-12-31 04:17:59

标签: php

我的PHP mail()脚本一直存在问题。我正在尝试为我的班级建立一个网站,用于完成家庭作业,了解即将进行的考试/课程作业的日期等。

此脚本用于将表单中的数据发送到我的电子邮件地址。我的问题是: 我试图在我的表单中包含一个字段以提高安全性。它基本上说插入“65FL7YB”以确保用户不是机器人,并且在我的PHP中,我写了以下内容:

if($_POST['valid'] = "65FL7YB") {
            mail($to , $subject , $message , $header);

            echo "Your Email Has Been Sent.";

        } else {
            echo "Your email has not been sent. Please ensure that you correctly entered the Validation Code.";
        }

但是当我开始测试脚本时,发生了以下情况: 当我按照预期正确输入验证码时,页面上印有“您的电子邮件已发送”。但是,当我输入不正确的验证码时,仍然会发送“您的电子邮件已发送”。而不是“您的电子邮件尚未发送。请确保您已正确输入验证码。”

请帮助我,我花了好几个小时尝试解决这个问题(与其他知道如何编码的人一起),但我们无法证明这个问题。

如需额外参考,这是页面的完整代码:

<?php
        $name = $_POST['name'];
        $date = $_POST['date'];
        $subject = $_POST['subject'];
        $homework = $_POST['homework'];

        $to = "Removed for my Privacy";
        $subject = "Homework Submission";
        $message = "The following has been submitted by $name. /n" . "The subject(s) is/are $subject. /n" . "Today's Homework is: /n $homework /n" . "$date";
        $header = $name;

        if($_POST['valid'] = "65FL7YB") {
            mail($to , $subject , $message , $header);

            echo "Your Email Has Been Sent.";

        } else {
            echo "Your email has not been sent. Please ensure that you correctly entered the Validation Code.";
        }
    ?>

3 个答案:

答案 0 :(得分:7)

编辑:(并完整阅读)

在注意到您在评论中发布的内容后,请:

<input name="name" type="text" placeholder="Insert Your Name or Email" size="97">

您不应该使用它,您应该为Email使用单独的输入,否则如果From:中没有header,则不会发送电子邮件

另外,这一行:

<form action="submit-homework-form-email.php" method="post" enctype="text/plain"> 
  • 删除 enctype="text/plain"脚注后更多关于此主题的内容)

读作:

<form action="submit-homework-form-email.php" method="post"> 

现在,假设您的表单包含某人的电子邮件地址的输入字段,

我添加了$email = $_POST['email'];加上我添加$valid = $_POST['valid'];进行测试,否则将无法收到电子邮件。

将此$header = $name;用作电子邮件header()无效。

这也是无效的。你正在做一个任务,而不是检查它是否等于&#34;。

if($_POST['valid'] = "65FL7YB") {

而不是:

if($_POST['valid'] == "65FL7YB") {
  • =是一项作业
  • ==等于

另一件事/n需要更改为\n

我在测试和工作代码中添加了以下内容:

$header = "From: ".$name." <".$email.">\r\n";
$header .= "Reply-To: ".$email."\r\n";

另一件事,你在$subject$subject = "Homework Submission";重复了$subject = $_POST['subject'];我评论了$subject = "Homework Submission";

您可以从hereonin修改它。

重新格式化PHP

<?php

    $email = $_POST['email']; // added for testing purposes
    $valid = $_POST['valid']; // added for testing purposes

    $name = $_POST['name'];
    $date = $_POST['date'];
    $subject = $_POST['subject'];
    $homework = $_POST['homework'];

    $to = "Removed for my Privacy";
    // $subject = "Homework Submission";
    $message = "The following has been submitted by $name. \n" . "The subject(s) is/are $subject. \n" . "Today's Homework is: \n $homework \n" . "$date";

    $header = "From: ".$name." <".$email.">\r\n";
    $header .= "Reply-To: ".$email."\r\n";

        if($_POST['valid'] == "65FL7YB") {
            mail($to , $subject , $message , $header);

            echo "Your Email Has Been Sent.";

        } else {
            echo "Your email has not been sent. Please ensure that you correctly entered the Validation Code.";
        }
?>

脚注:

您还应检查是否有任何表单元素SETEMPTY您未执行此操作。

如果有人未填写subject字段,则很可能无法收到电子邮件或将以垃圾邮件结束。

最好使用这样的东西:

if(empty($_POST['subject'])){ die("You must enter a subject."); }

if(empty($_POST['subject'])){ echo "You must enter a subject."; exit; }

或者使用$subject = "Homework Submission";代替$subject = $_POST['subject'];,这样您就不需要为主题使用条件语句。


关于enctype =&#34; text / plain&#34;

enctype定义在发送之前应如何格式化数据。两种正确的格式是 application / x-www-form-urlencoded (基本上将内容发送为key=value&anotherkey=anothervalue,带有http标头)和 multipart / form-data (将每个密钥分成不同的数据部分)。 text / plain 意味着什么都不应该做 - 它的行为在浏览器之间基本上是未定义的,并且在垃圾邮件发布前几天才用于自动电子邮件表单。

答案 1 :(得分:3)

您正在使用赋值运算符=而不是比较运算符==

变化:

if($_POST['valid'] = "65FL7YB") {

要:

if($_POST['valid'] == "65FL7YB") {

答案 2 :(得分:1)

试试这个:

在php代码中更改if语句。

应该是这样的......

if($_POST['valid'] == "65FL7YB")

请记住=是赋值运算符,==是比较运算符。在if语句中,您必须使用比较运算符。

谢谢!