表格动作+邮件

时间:2015-01-26 08:11:24

标签: php html sql forms email

我需要的是将此表单(测验)中的用户输入数据发送到我的邮件。但是,我有点迷茫。我正在使用数据库来存储问题,可能的答案和正确的答案,然后我将它们作为表格回应。然后,我使用不同的页面来评估测试并显示正确/错误的答案(因此已采取行动)。它看起来像这样:

<form action="./evaluate.php" method="post">
<?php
$server = mysql_connect ('localhost', 'user', 'password');
mysql_select_db("database", $server);

$question = mysql_query("SELECT * FROM `Questions`;");
$x = 0;
while ($row = mysql_fetch_assoc($question))
{
   echo $row['question'] . '<br />';
   echo '<input type="radio" name="a'.$x.'" value=1 />' .$row['answer1'] . '<br />';
   echo '<input type="radio" name="a'.$x.'" value=2 />' .$row['answer2'] . '<br />';
   echo '<input type="radio" name="a'.$x.'" value=3 />' .$row['answer3'] . '<br />';
   echo '<input type="radio" name="a'.$x.'" value=4 />' .$row['answer4'] . '<br />';
   $x = $x + 1;

}
mysql_close($server);
?>

<input type="submit" name="Submit" value="Submit" />
<br>
</form>

另一页:

<?php
$server = mysql_connect ('localhost', 'user', 'password');
mysql_select_db("database", $server);

$question = mysql_query("SELECT * FROM `Questions`;");
$x = 0;
$score = 0;
while ($row = mysql_fetch_assoc($question))
{
    echo $row['question'] . '?<br />';

    $answered = $row['answer'.$_POST['a'.$x]] ;
    $correct = $row['correct'] ;

    if ($answered == $correct ) {
        $score++;
        $acolor = 'green' ;
    }
    else {
        $acolor = 'red' ;
    }

    echo 'you answered <font color=' . $acolor . '>' . $answered . '<font color=black> <br />';


    echo 'the correct answer was ' . $correct . '<br />' ;
    echo '-------------------------------------- <br />' ;

    $x = $x + 1;
}
echo 'You had a total of ' . $score . ' out of ' . $x . ' questions right!';
mysql_close($server);
?>

我希望能够在&#34;提交&#34;按下,然后向用户显示答案页面(我将在最后一个问题后添加用户电子邮件的字段)。有人能指出我正确的方向吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。

  1. 你还在使用mysql函数。它们已被弃用,不应使用。他们几年来一直气馁。使用mysqli或PDO并利用预准备语句来防止SQL注入。

  2. 您正在使用SELECT * FROM questions。你不应该使用select all,甚至几年前当我们使用mysql时。如果您的表中有100k或100万行,则会产生巨大的开销来拉动所有行。而是随机选择。 sql查询有一个rand函数,但有些人建议不要使用它。相反,获取所有记录的计数,然后选择一个随机数,然后只拉出id为该数字的那一行。

  3. mysql_close在脚本结束时关闭。

  4. 如果用户再次加载evaluate.php页面,它将再次加载。如果他们没有任何POST数据,那么它可能会导致整个地方出现错误,并导致意外结果。由于您有一个通过POST发送数据的表单,因此您需要检查评估页面上是否设置了POST。如果您希望页面仅在表单提交时运行,则在没有找到POST数据时抛出错误消息或重定向。

  5. 还有其他一些小事,但这些是我注意到的主要事项。

    代码看起来甚至不起作用。那么这半个&#34;伪代码&#34;或者实际上你想要使用什么?

    <强>答案: 至于回答你的问题,你可以使用PHP的内置邮件功能:http://php.net/manual/en/function.mail.php

    您可以获得所需的一切,以便在evaluate.php文件末尾回显用户的分数。在那里调用邮件功能发送一封电子邮件,说出你想要的任何内容,比如给他们分数。我假设你已经拥有了他们的电子邮件地址?因此,您可以从数据库中的用户记录中提取它。如果您没有,那么您需要在评分页面下显示另一个表格,要求他们提供电子邮件地址。当他们提交时,请拨打mail()并将分数通过电子邮件发送给他们。

    我个人不使用内置邮件功能。我使用PHPMailer,它允许您使用SMTP电子邮件帐户(例如在您的服务器上创建)。这将允许您在外发电子邮件上使用SPF和DKIM验证。如果他们的SPF和/或DKIM检查失败,雅虎拒绝电子邮件等地方!所以要做到这一点,你需要至少使用PHPMailer,或者使用SMTP发送电子邮件的另一种方法。并确保在电子邮件中设置SPF和DKIM,并使用在线检查器进行验证。如果你没有,你仍然可以发送电子邮件,但是你将会进入垃圾邮件文件夹。不,没有办法强迫自己降落在收件箱中。你只能增加你的机会。

    技术上回答你的问题。现在,至于发送电子邮件的更好解决方案,我会使用SendGrid或Mailgun等。就像使用Aweber或GetResponse一样,只有您可以控制列表并通过它们从服务器发送电子邮件。对于测试环境或刚刚开始的站点,您可以邮寄服务器以获得较少的流量。如果它开始大量使用,你可能希望扩展到更好的电子邮件解决方案。