2013-04-23 83 views
0

我有一個具有文本字段的表單。當用戶提交數據時,它會檢查輸入的數據是否正確對列表中的「答案」列。無法驗證答案

但是,這是問題 - 它接受任何事情,而不驗證提交的文本字段與正確的答案。

我是新來的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> 
+1

您給我們的表單沒有'answer'字段 – 2013-04-23 14:56:29

+1

您正在使用[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

+0

你的代碼很容易被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

回答

0

只是自己調試。 $disp3['Answer']==$_POST['Answer']前加

var_dump($disp3); 
var_dump($_POST); 

檢查,如果你有兩個數組任何Answer。如果你不這樣做,檢查你的數據庫字段名稱和你的POST字段/輸入(都是區分大小寫的)

我還會補充一點,你需要檢查SQL注入並轉義你的字段,或者更好地使用PDO並準備好陳述。

+0

這工作,但一些其他錯誤出現,如頁面顯示數組(7){[「id」] =>字符串(1)「1」[「問題」] =>字符串(339)「 – pallavi 2013-04-23 15:14:41

+0

'var_dump'只用於變量輸出,這不是錯誤!:)檢查你的'array(7)'是否有'Answer'鍵。另外,對於第二個轉儲,檢查'Answer'鍵。你如何調試。 – vectorialpx 2013-04-24 13:00:30