我有一个具有文本字段的表单。当用户提交数据时,它会检查输入的数据是否正确对列表中的“答案”列。无法验证答案
但是,这是问题 - 它接受任何事情,而不验证提交的文本字段与正确的答案。
我是新来的PHP,所以请帮助。这里是代码。
$myuser = $_SESSION["myusername"]; $mypass = $_SESSION["mypassword"];
$host="localhost"; // Host name
$username="f123"; // Mysql username
$password="t"; // Mysql password
$db_name="f"; // Database name
$tbl_name="members"; // Table name
$tbl_name2="quiz"; // Table name 2
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
if(isset($_POST['qno']))
{
$sql3="SELECT * FROM $tbl_name2 WHERE id='".$_POST['qno']."'";
$result3=mysql_query($sql3);
$disp3=mysql_fetch_assoc($result3);
$sql4="SELECT * FROM $tbl_name WHERE username='$myuser' and password='$mypass'";
$result4=mysql_query($sql4);
$disp4=mysql_fetch_assoc($result4);
if($disp3['Answer']==$_POST['Answer'])
{
$sql5="UPDATE $tbl_name SET level_crossed='".($disp4['level_crossed']+1)."',
Score='".($disp4 ['Score']+1)."' WHERE username='$myuser' and password='$mypass'";
$result5=mysql_query($sql5);
}
else {
$sql5="UPDATE $tbl_name SET level_crossed='".($disp4['level_crossed']+1)."'
WHERE username='$myuser' and password='$mypass'";
$result5=mysql_query($sql5);
<form name="quizq" action="quiz.php" method="post" >
<input name="qno" type="hidden" value="<?php echo $disp['level_crossed']+1; ?>" />
<input type="text" name="Answer" />
<input type="submit" value="Submit Answer" /></p>
</form>
您给我们的表单没有'answer'字段 – 2013-04-23 14:56:29
您正在使用[an **过时的**数据库API](http://stackoverflow.com/q/12859942/19068)并且应该使用[现代替代品](http://php.net/manual/en/mysqlinfo.api.choosing.php)。你也**易受[SQL注入攻击](http://bobby-tables.com/)**,现代的API会使[防御]更容易(http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)自己从。 – Quentin 2013-04-23 15:01:04
你的代码很容易被SQL注入,并使用不推荐的'mysql_ *'函数。请立即使用准备好的语句切换到使用[MySQLi](http://php.net/manual/en/book.mysqli.php),并阅读[SQL注入](https://www.owasp.org/ index.php/SQL_Injection),以便您了解安全问题。 – Polynomial 2013-04-23 15:01:07