2013-04-23 3 views
0

양식에 텍스트 필드가 있습니다. 사용자가 데이터를 제출하면 테이블의 "Answer"열에 대해 입력 된 데이터가 올바른지 여부를 확인합니다.답변을 확인할 수 없습니다.

하지만 여기에 문제가 있습니다. 정답과 비교하여 제출 된 텍스트 필드를 확인하지 않고서는 아무 것도 받아들이지 않습니다.

저는 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

우리가 제공 한 양식에는 응답 필드가 없습니다 –

+1

[** ** 구식 ** 데이터베이스 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

당신의 코드는 SQL 인젝션에 취약하고, 더 이상 사용되지 않는'mysql_ * '함수를 사용합니다. 즉시 준비된 문구를 사용하여 [MySQLi] (http://php.net/manual/en/book.mysqli.php)로 전환하고 [SQL injection] (https://www.owasp.org/)에서 읽으십시오. index.php/SQL_Injection)을 사용하면 보안 문제를 인식 할 수 있습니다. – Polynomial

답변

0

그냥 직접 디버그하십시오. 당신이 두 배열의 모든 Answer이있는 경우 $disp3['Answer']==$_POST['Answer'] 전에

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

확인을 추가합니다. 그렇지 않으면 데이터베이스 필드 이름과 POST 필드/입력을 확인하십시오. (모두 대소 문자가 구분됩니다)

SQL 인젝션을 점검하고 필드를 이스케이프 처리하거나 PDO 및 준비된 진술.

+0

이 작업을했는데 페이지가 array (7) {[ "id"] => string (1) "1"[ "Question"] => string (339) " – pallavi

+0

'var_dump'는 변수 출력에만 사용됩니다. 오류가 아닙니다! :)'array (7)'에'Answer' 키가 있는지 확인하고 두 번째 덤프에 대해서도'Answer' 키를 확인하십시오. 디버깅 방법. – vectorialpx

관련 문제