2014-01-30 3 views
1

PHP를 사용하여 간단한 수학 퀴즈를 만들려고합니다. 사용자가 곱하기 위해 두 개의 난수를 생성합니다. 사용자가 을 올바르게 입력하면 답변을 보내고, 헤더를 사용하여 축하 HTML 페이지로 리디렉션합니다. 그러나 그들이 을 잘못 입력하면이라는 메시지가 표시되어 메시지에 답할 기회가 주어집니다.유지, 리디렉션 및 다시로드

모든 잘못된 제출 후 질문과 답변을 유지하는 한 가지를 제외하고는 지금까지 모든 것을 해결했습니다. 어떻게 이런 일이 일어나지 않게 할 수 있습니까? 매번 새로운 질문/답변이 생성되지 않도록 스크립트를 중단 하시겠습니까? 숨겨진 텍스트 필드를 사용했지만 트릭을 수행하지 않은 것 같습니다.

+0

'$ _SERVER [ 'PHP_SELF']'는 코드 삽입에 취약합니다. 다른 것을 사용하십시오. – Linblow

답변

2

귀하의 코드는 $ _POST에 $의 NUM1 및 $ NUM2을 전달하는 가정,하지만 그들에게 숨겨진 필드가 없습니다 :이 입력을 추가하면

<input type = "hidden" name = "num1" value="<?php echo $num1; ?>"/> 
<input type = "hidden" name = "num1" value="<?php echo $num2; ?>"/> 

이 문제가 제대로 나타납니다이.

정답을 기록하려면 $ answer 변수가 현재 게시 된 값이 아닌 난수 곱셈 결과를 저장한다는 점을 고려해야합니다. 코드 시작 부분에서 다음을 시도해보십시오 :

if (!isset($_POST['num1'])) { 
    $num1 = Rand(1,10); 
    $num2 = Rand(1,10); 
} else { 
    $num1 = $_POST['num1']; 
    $num2 = $_POST['num2']; 
} 
$answer = $num1 * $num2; 
+0

코멘트 주셔서 감사합니다. 실제로 현재 코드에서 정확히 두 줄을 가지고 있지만 코드를 여기에 제출하기 전에 편집 한 다음 해당 POST 코드를 제거하지 않았습니다. 어쨌든, 그것은 여전히 ​​어느 쪽이든 작동하지 않습니다. – Alex

+0

정확히 틀린 것으로 밝혀진 것은 무엇입니까? "you 're wrong"메시지가 표시됩니까? 이전 숫자와 함께 질문을 표시합니까? 당신이 무작위로 생성 된 $ num1과 $ num2 변수를 곱한 것이기 때문에 대답 입력 값이 잘못 될 것으로 예상됩니다. –

+0

"틀렸어."실제로 표시되며 정답을 입력 할 기회가 다시 주어집니다. 그러나 스크립트는 초기 답변을 사용자의 답변과 함께 저장하고 비교하는 것 같지 않습니다. 따라서 사용자가 틀린 답을 처음 입력 한 다음 '틀렸어'를 입력하고 답을 다시 입력하려고하면 실제 (초기 답변)이 제출을 클릭 한 후 이미 변경된 것입니다. 기본적으로 나는 그것을 변화시키지 않아야한다. – Alex

관련 문제