我需要的是将此表单(测验)中的用户输入数据发送到我的邮件。但是,我有点迷茫。我正在使用数据库来存储问题,可能的答案和正确的答案,然后我将它们作为表格回应。然后,我使用不同的页面来评估测试并显示正确/错误的答案(因此已采取行动)。它看起来像这样:
<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;按下,然后向用户显示答案页面(我将在最后一个问题后添加用户电子邮件的字段)。有人能指出我正确的方向吗?非常感谢。
答案 0 :(得分:1)
您的代码存在一些问题。
你还在使用mysql函数。它们已被弃用,不应使用。他们几年来一直气馁。使用mysqli或PDO并利用预准备语句来防止SQL注入。
您正在使用SELECT * FROM questions
。你不应该使用select all,甚至几年前当我们使用mysql时。如果您的表中有100k或100万行,则会产生巨大的开销来拉动所有行。而是随机选择。 sql查询有一个rand函数,但有些人建议不要使用它。相反,获取所有记录的计数,然后选择一个随机数,然后只拉出id为该数字的那一行。
mysql_close
在脚本结束时关闭。
如果用户再次加载evaluate.php
页面,它将再次加载。如果他们没有任何POST数据,那么它可能会导致整个地方出现错误,并导致意外结果。由于您有一个通过POST发送数据的表单,因此您需要检查评估页面上是否设置了POST。如果您希望页面仅在表单提交时运行,则在没有找到POST数据时抛出错误消息或重定向。
还有其他一些小事,但这些是我注意到的主要事项。
代码看起来甚至不起作用。那么这半个&#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一样,只有您可以控制列表并通过它们从服务器发送电子邮件。对于测试环境或刚刚开始的站点,您可以邮寄服务器以获得较少的流量。如果它开始大量使用,你可能希望扩展到更好的电子邮件解决方案。