2013-04-23 6 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' –

+1

. Вы используете [** API устаревших ** баз данных 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

+0

Ваш код HORRIBLY уязвим для SQL-инъекций и использует устаревшие функции mysql_ *. Перейдите к [MySQLi] (http://php.net/manual/en/book.mysqli.php) с подготовленными операциями немедленно и прочитайте [SQL injection] (https://www.owasp.org/ index.php/SQL_Injection), чтобы вы знали о проблемах безопасности. – Polynomial

ответ

0

Просто сделайте собственную отладку. Перед $disp3['Answer']==$_POST['Answer'] добавить

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

Проверьте, если у вас есть какие-либо Answer в обоих массивах. Если вы этого не сделаете, проверьте имя поля базы данных и поле/ввод POST (оба чувствительны к регистру)

Я также добавлю, что вам нужно проверить SQL-инъекцию и избежать ваших полей или, лучше, использовать PDO и подготовленные заявления.

+0

Это сработало, но некоторые другие ошибки возникли, так как страница показывает массив (7) {["id"] => string (1) "1" ["Question"] => string (339) " – pallavi

+0

'var_dump' просто используется для вывода переменных. Это не ошибка! :) Проверьте, имеет ли ваш' array (7) 'ключ' 'Ответ. Кроме того, для второго дампа проверьте ключ' Ответ'. как вы отлаживаете. – vectorialpx

Смежные вопросы