PHP – создание оператора switch с использованием идентификатора из ввода формы

Я делаю короткую викторину в PHP, которая рассказывает вам, что твоя мысль думает о четырех да / нет. Я сделал это так, что в зависимости от вашего ответа на каждый вопрос вы попадаете на другой вопрос, я делал это, используя в основном инструкции switch.

Мой вопрос заключается в том, есть ли способ, с помощью которого я могу сделать оператор switch с условием как идентификатор из кнопок отправки из формы?

echo "<form method ='post' action='Creatures.php'> <input type='submit' name='answer' id='1' value='Yes' /> <input type='submit' name='answer' id='2' value='No' /> </form>"; 

Это форма, которую я использую для отображения кнопок, я сделал это так, чтобы каждая кнопка имела другой идентификатор, поэтому в конце викторины, в зависимости от того, какой идентификатор последней нажатой кнопки, я могу отобразить правую ответ. Ниже я пытаюсь это сделать, но это не сработало.

 switch($_POST['id']) { case 1: echo "It's a goldfish"; case 2: echo "It's a eel"; } 

Также эти поля являются единственными, которые используют идентификаторы на всей веб-странице, любые предложения о том, как я могу заставить это работать правильно, не обязательно используя инструкции switch?

 switch($_POST['answer']) { case 'Yes': // do soemthing break; case 'No': // do something break; } 

В этом есть много ошибок. Изучите следующее:

 echo '<form method ="post" action="Creatures.php"> <button name="answer" type="submit" value="Yes">Yes</button> <button name="answer" type="submit" value="No">No</button> </form>'; switch($_POST['answer']) { case 'Yes': echo "It's a goldfish"; break; case 'No': echo "It's a eel"; break; } 

Также см. Это и это .

Это не сработает. когда браузер отправляет данные из вашей формы на сервер в виде пар ключ-значение. Ключами являются ваши имена форм, а значения – значения входов.

поэтому, чтобы получить значение вашего имени входного имени, вы используете $_GET['answer'];

который либо даст вам «Да», либо «Нет», потому что это значения. Вы также должны выполнить некоторую проверку ошибок, так как люди могут отправлять произвольные данные на ваши серверы, например, кто-то может посетить ваш yoursite.com/creatures.php?answer=somerandomstuffthatidontexpect

Если вы не сделаете это с помощью jQuery / js, вы будете бороться. Различные браузеры будут интерпретировать это по-другому (собственный опыт), поэтому просто перейдите в jQuery way 🙂

http://www.vancelucas.com/blog/ie6-and-multiple-button-submit-elements/ – это должно помочь

Тебе нужно

 break; 

после каждого утверждения и ввода формы неверны ( answer вместо id ). Атрибутом NAME является то, что определяет ключ в массиве POST (идентификатор предназначен только для клиентских css и javascript).

И как отметил tigrang, значение – это то, что отправляется, а не идентификатор, поэтому массив будет выглядеть так:

$ _POST [ 'ответ'] = 'Да'

Таким образом, ваше заявление будет

 switch($_POST['answer']) { case 'Yes': echo "It's a goldfish";break; case 'No': echo "It's a eel";break; } 
 <form method ='post' name="formAnswer1" action=''> <input type='submit' name='answer' value='Yes' /> </form> <form method ='post' name="formAnswer2" action=''> <input type='submit' name='answer' value='No' /> </form> <?php switch($_POST['answer']) { case 'Yes': echo "Yes"; break; case 'No': echo "No"; break; } ?> 

Как насчет этого?

 switch(key($_POST['answer'])) { case 1: echo "answer 1"; break; case 2: echo "answer 2"; break; } echo "<form method ='post' action='/tmp/test.php'> <input type='submit' name='answer[1]' value='Yes' /> <input type='submit' name='answer[2]' value='No' /> </form>"; 

Я думаю, что он работает так, как вы этого хотите. Но ваш подход немного противоречит интуиции программистов POV; рассмотрите возможность использования кнопок радиообъявления + отправить.

Я пытался использовать $ _GET с оператором switch для моей собственной версии класса. Это то, что сработало для меня. Идея состояла в том, чтобы отобразить что-то, основанное на оценках, введенных в форму.

  <form action="processGrade.php" method "get"> Enter your grade: <input type = "text" name ="grade"> <input type = "submit"> </form> 

// В моей форме processGrade.php:

 <?php echo "You have entered: ".$mygrade = $_GET['grade'].". "; switch($mygrade){ case 100: echo " Your grade is A"; break; case 70: echo " Your grade is B+"; break; default: echo "Ungraded"; } ?>