Я, по общему признанию, не настолько квалифицирован на PHP, насколько я бы хотел. Большая часть моего опыта связана с циклами WordPress.
Я пытаюсь создать очень простую викторину, которая содержит количество правильных ответов в URL (например, domaindotcom /? P = 3, если у них есть 3 правильных ответа до сих пор).
Я использую следующий код PHP для его запуска:
<?php /* Gets current correct answer Count */ $answer_count = $_GET["p"]; /* checks to see if the submitted answer is the same as the correct answer */ if ($_POST["submitted-answer"] == "correct-answer") { $answer_count++; } ?>
Теперь я знаю, что могу получить правильную ссылку, используя ссылку:
<a href="link-to-next-question.php/?p=<?php echo $answer_count; ?>">Next Question</a>
Но теперь я пытаюсь использовать его в форме и смущен POST, GET и т. Д.
Вот мой HTML:
<form name="quiz" action="" method="POST"> <label for="o1"><input type="radio" name="grp" id="o1" value="o1"> Label 1</label> <label for="o2"><input type="radio" name="grp" id="o2" value="o2"> Label 2</label> <label for="o3"><input type="radio" name="grp" id="o3" value="o3"> Label 3</label> <input type="submit" value="Next Question" class="btn"> </form>
Как я могу выбрать правильный ответ (безопасность не важна, это просто интересная викторина), а затем отправить их на следующий URL-адрес, добавив приращение к $ answer_count до того, как будет создан URL-адрес?
Не передавайте счетчик ответов в ссылке (например, GET). Вместо этого просто укажите скрытое поле формы и используйте код javascript на стороне клиента, чтобы увеличить требуемые переменные и отправить форму.
<form id="qfrm" name="quiz" action="" method="POST"> <input type="hidden" name="question_number" value="<?php echo $next_question_number?>"> <input type="hidden" id="n_c_a" name="num_correct_answers" value=<?php echo $num_correct_answers?>"> <input type="button" value="Submit" onclick="validateAnswerAndSubmit(); return false;"> </form> <script language="javascript"> function validateAnswerAndSubmit(){ if(validate_answer()){ document.getElementById("n_c_a").value += 1; } document.getElementById("qfrm").submit(); } </script>
Затем просто заставьте свой PHP-скрипт переключаться на $_POST["question_number"]
ОК, поэтому вы не хотите использовать javascript … если вы действительно спрашиваете: «Как я узнаю, какой радио-ящик был выбран из PHP?» ответ:
<?php $answer = $_POST["grp"]; ?>
Я думаю, вы действительно должны передавать две переменные в URL-адрес, один из них будет question_number, а другой будет num_correct. Затем вы можете написать код следующим образом:
<?php $num_correct = (int) $_GET["num_correct"]; $question_number = (int) $_GET["question_number"]; switch($question_number - 1){ // assuming your question numbers are in order by convention // validate the answer to the previous question case -1: //no validation necessary for the first question ($question_number 0) break; case 0: if($_POST["grp"] == "correct answer"){ $num_correct++; } break; // and so forth; } ?> <form name="quiz" action="this_page.php/?num_correct=<?php echo $num_correct;?>&question_number=<?php echo $question_number + 1?>" method="POST"> <?php Display_Question_Number($question_number);?> </form>
Ключевым моментом здесь является то, что «action =» в форме аналогично «href =» в якоре, т. Е. Это URL-адрес, на который отправляется форма, когда пользователь нажимает кнопку отправки.
Используйте поле type = "hidden" для отправки текущего счета.
Вы можете установить количество правильных ответов в $_SESSION
(это глобальная переменная, которая сохраняется между страницами), поэтому сложнее обмануть.