Я делаю короткую викторину в 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"; } ?>