2012-05-25 2 views
2

Я делаю короткую викторину в PHP, которая сообщает вам, что твоя мысль на основе 4 вопросов да/нет. Я сделал это так, что в зависимости от вашего ответа на каждый вопрос вы попадаете на другой вопрос, я делал это, используя в основном инструкции 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"; 
} 

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

+2

имя в $ _POST соответствует 'name' атрибута входа, так что было бы $ _POST [ 'ответ'] и случай «Да», «Нет» – tigrang

+0

Спасибо, что я работал, я пытался использовать идентификатор, так как у меня есть 16 возможных ответов, которые я хочу выбрать, но половина из них называется да и половина нет (с того момента, когда пользователь нажал в викторине), поэтому мне пришлось бы написать 8 операторов switch, должен быть лучший способ, чем это. – Harry12345

+0

затем используйте число как значение: '' –

ответ

2
switch($_POST['answer']) { 

case 'Yes': 
    // do soemthing 
    break; 
case 'No': 
    // do something 
    break; 
} 
+0

Я сделал все, что вы сказали, и добавил скрытое поле ввода, так что теперь он работает, yaayyy! – Harry12345

0

Вам нужно

break; 

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

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

$ _POST [ «ответ»] = «Да»

Так ваше заявление будет

switch($_POST['answer']) 
{ 
case 'Yes': echo "It's a goldfish";break; 
case 'No': echo "It's a eel";break; 
} 
+0

Yeh мой плохо забыл положить это, но все еще не работает – Harry12345

+2

и переключить «Да» и «Нет» - см. Мой комментарий – tigrang

0

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

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

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

+1

метод - это сообщение формы. – tigrang

1

Есть много ошибок в этом. Пожалуйста, изучите следующее:

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; 
} 

Также см this и this.

+1

Вы создали двусмысленность здесь! –

0

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

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

0
<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; 
} 
?> 
+0

Зачем вам нужны 2 формы? – tigrang

+0

, так как у вас есть одно и то же имя = 'ответ', они не могут быть из 2 одновременно, если вы не определяете их как массив, например name = 'answer []' –

+0

Но только 1 всегда публикуется. Они представляют кнопки отправки. – tigrang

0

Как об этом?

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; рассмотрите возможность использования кнопок радиообъявления + отправить.

0

Я пытался использовать $ _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"; 
} 
?> 
Смежные вопросы