Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: switch_case

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
EHOD
Отправлено: 12 Апреля, 2011 - 21:17:29
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Здравствуйте.

Сразу прошу прщенияесли такая тема уже подинмалась.

1 Что хотел:

У множества форм один обработчик.
При отсылке формы, если я правильно понимаю в POST летит переменная с именем кнопки.

В обработчике используя "switch_case" хотел узнать какой форме принадлежит кнопка и уже в зависимости от этого какие-то действия....

Выглядело это так

switch
{
case (isset($_POST['button_1'])):
действие
break;
case (isset($_POST['button_2'])):
действие
break;
ну и так далее ...
}

2 Это не работало, по след. причине (возможно есть еще, но вот что я нашел): даже если я не нажимал на кнопку button_1, $_POST['button_1'] все равно сужествовала и исполнялось действие.

3 Как вышел из положения:

if (isset($_POST['button-1'])) {$a = 'button-1';}
if (isset($_POST['button-2'])) {$a = 'button-2';}

и потом сравнивал по $a.
Вроде работает.

Но смысл (не использовать тучу if else) был утерян.

Подскажите, изначальная задумка (проверять случаи существования глобальных пременных присвоенных кнопкам) верна?

Если да, почему не работало где ошибка?
Если нет, как правильно сделать?

Спасибо.

Наверно надо весь кодд выложить??
 
 Top
Garda1
Отправлено: 12 Апреля, 2011 - 21:47:06
Post Id


Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




читайте как правильно использовать switch
 
 Top
EHOD
Отправлено: 12 Апреля, 2011 - 22:12:14
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Спасибо, но уже читал.

Получается, что switch_case может только сравнивать значения, а

if (isset($_POST['button-1'])) {$a = 'button-1';}
if (isset($_POST['button-2'])) {$a = 'button-2';}

это проверка сущ. преременной и уже использовать вместо switch стоит

if
else if
else

правильно???
 
 Top
Okula
Отправлено: 12 Апреля, 2011 - 23:40:22
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




EHOD, switch это та же конструкция что и if...else выполняющаяся при удавлетворении конкретного условия. Любой switch можно заменить на условие if...else
так что это не так принципиально.
 
 Top
Garda1
Отправлено: 13 Апреля, 2011 - 00:06:53
Post Id


Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




была неправильно использована конструкция switch
к вашей задаче можно применить такой алгоритм
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. foreach ($_POST as $K => $V)
  4. {
  5.         switch ($K) {
  6.                 case 'button_1':
  7.                         echo 'Hello button 1';
  8.                         break;
  9.                 case 'button_2':
  10.                         echo 'Hello button 2';
  11.                         break;
  12.                 case 'button_3':
  13.                         echo 'Hello button 3';
  14.                         break;
  15.                 default: break;
  16.         }
  17. }
  18. ?>
  19. <form action="" method="post">
  20.         <p><input type="submit" name="button_1" value="BUTTON 1"></p>
  21. </form>
  22. <form action="" method="post">
  23.         <p><input type="submit" name="button_2" value="BUTTON 2"></p>
  24. </form>
  25. <form action="" method="post">
  26.         <p><input type="submit" name="button_3" value="BUTTON 3"></p>
  27. </form>
  28.  
 
 Top
DeepVarvar Супермодератор
Отправлено: 13 Апреля, 2011 - 08:32:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Garda1 foreach тут совсем не нужен.
Иначе если будет "отправлено" несколько "нажатых" кнопок - выполнятся все ветви условия.
 
 Top
Garda1
Отправлено: 13 Апреля, 2011 - 10:27:25
Post Id


Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Нояб. 2010  


Помог: 0 раз(а)




Интересно, как можно отправить несколько нажатых кнопок?
И как тогда сделать это без цикла?
 
 Top
EHOD
Отправлено: 13 Апреля, 2011 - 10:50:53
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Garda1

Спасибо попробую.
 
 Top
DeepVarvar Супермодератор
Отправлено: 13 Апреля, 2011 - 10:57:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Garda1 пишет:
как можно отправить несколько нажатых кнопок?

1 вариант: Оформить их в виде инпутов текстового типа с теми же именами.
2 вариант: Отправить запрос курлом.

Представьте ситуэйшн:
есть 2 кнопки, одна удаляет, другая сохраняет (edit) некую строку в SQL-таблице
Будет весело если мы сперва удалим, а потом редактировать начнем.
Garda1 пишет:
И как тогда сделать это без цикла?

Не использовать break в конструкции switсh

Для прохода по всем обьявленым:
PHP:
скопировать код в буфер обмена
  1. switch($val) {
  2.   case name1:
  3.     // некоторые действия
  4.   case name2:
  5.     // некоторые действия
  6.   default:
  7.     break;
  8.   }

Для прохода только по первому совпавшему:
PHP:
скопировать код в буфер обмена
  1. switch($val) {
  2.   case name1:
  3.     // некоторые действия
  4.     break;
  5.   case name2:
  6.     // некоторые действия
  7.     break;
  8.   default:
  9.     break;
  10.   }
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB