Suren97 Ответов: 2

Php: как получить значения из select/option


У меня есть массив вопросов`
$questions = [
	["id" => 1,"Question" => "What is the capital city of Armenia?", "Answer" => ["Yerevan", "Moscow", "New York"]],
	["id" => 2,"Question" => "Who was the best footballer in 2017?", "Answer" => ["Messi", "Ronaldo", "Neymar"]],
	["id" => 3,"Question" => "4 * 5 = ?", "Answer" => ["9", "45", "20"]],
	["id" => 4,"Question" => "When has created PHP?", "Answer" => ["1998", "1994", "2000"]],
	["id" => 5,"Question" => "Who is the president of Russia?", "Answer" => ["Lavrov", "Putin", "Medvedev"]]
];


Я добавляю его на тело динамически. Вопросы в теге h3, ответы в select, а также у меня есть кнопка Check, после нажатия на кнопку Check она должна вернуть количество истинных ответов.

http://prntscr.com/kpy53o[^]

Что я уже пробовал:

// quiz.php
<?php 

if($_SERVER["REQUEST_METHOD"] == "POST"){
	$name = $_POST["make"];
        print $name; // in this case it prints only the last select's value 
}
else{
	header("location:index.php");
}


 ?>



<form action="quiz.php" method="post">
		<?php 
		foreach($questions as $value){ 
			?>

			<div id="d1">
				<fieldset>
					<legend id="h1"><?= "Question"." ".$value["id"].":"?></legend>
					<h3 class="h3"><?= $value["Question"]?></h3>
					<select name="make" class="btn btn-outline-info">
						<?php 
						for($i = 0; $i < count($value["Answer"]); $i++){ ?>
							<option><?= $value["Answer"][$i]?></option>
						<?php	}

						?></select></fieldset>
					</div>


					<?php 
				}

				?> 
				<button id="btn1" class="btn btn-success">Check</button>
			</form>


Как я могу получить значения из каждого варианта? Как я могу проверить каждое условие?

// $count = 0;
if(option1 == "Ереван"){
считать++;
}
если(Вариант 2 == "Роналду"){
считать++;
}

и так далее. Как получить option1, option2....?

Mohibur Rashid

Где ваша $value["вопрос"]? Его нигде не объявляли

Suren97

Это в теге h3

Suren97

посмотрите перед выбором тега

Mohibur Rashid

вы пробовали $_POST["make"]?

Suren97

Да, я пытался сохранить его в переменной, а затем распечатать, например` $name = $_POST["make"]; print $name...Он должен печатать все выбранные значения, верно? Но он печатает только последнее значение select

2 Ответов

Рейтинг:
16

Peter Leow

Ваша проблема заключается в том, что вы не можете отличить ответы от разных вопросов.
1. присвойте уникальное значение атрибуту name для выбора каждого вопроса, почему бы не использовать идентификатор вопроса? т.е.

<select name="<?= $value['id'] ?>" class="btn btn-outline-info">

2. Вы еще не добавили значение атрибута для каждого выберите вариант:
<option value="<?= $value['Answer'][$i] ?>"><?= $value["Answer"][$i]?></option>

Чтобы проверить ответ при отправке, например
if($_POST["1"]=="Yerevan"){
   count++;
}
// and so on...

удачи вам!


Suren97

Большое спасибо :)

Mohibur Rashid

Ты опередил меня на 7 минут, печатать на мобильном телефоне нелегко

Рейтинг:
1

Mohibur Rashid

Теперь я понимаю. Ваша проблема заключается в том, что вы генерируете 5 полей выбора с тем же именем make. И HTML отправляет их все, но когда вы получаете доступ через post, вы получаете последний. Тот же эффект, что и при попытке установить другое значение для одной и той же переменной.

Решение, назвать каждый объект, как сделать[]
И вы получите $_POST["make"] в виде массива. Вы можете быть более универсальными, назначив отдельное имя для всех и поместив их в тот же массив, что и $questions. И через цикл назначьте каждому окну выбора имя uniq. В случае доступа вам придется использовать тот же массив.


Suren97

Спасибо и вам тоже :)

Mohibur Rashid

:)