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

 PHP.SU

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


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

> Без описания
teddy
Отправлено: 11 Апреля, 2013 - 01:01:29
Post Id


Участник


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


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




Доброй ночи. Возникла проблема с использованием switch. Хочу выводить ошибки неверно заполненных полей с помощью него т.к засорять код if-ами считаю неправильным в случае если проверок много.

PHP:
скопировать код в буфер обмена
  1. switch($e_login){
  2. case strlen($login)<3:
  3. $e_login = "Слишком короткий ник"; break;
  4. case strlen($login)>12:
  5. $e_login = "Слишком длинный ник"; break;
  6. case $login!=preg_match("/^[-a-zA-Zа-яА-Я0-9_\s]/",$login):
  7. $e_login = "Вы использовали недопустимые символы"; break;
  8. case strlen($login)<=0:
  9. $e_login = "Поле логин обязательно для заполнения"; break;
  10. default:
  11. echo "Ничего не найдено";
  12. }


Не получаю то, что хочу. Тоесть в данном случае я рассмариваю кейсы так:
case = if - так я понимаю конструкцию т.е исходя из кода я пишу
if(strlen($login)<3) $e_login = "Вы ввели слишком короткий ник"; и так далее с остальными кейсами, по одному нормально все работает, а когда кейсов много ошибки уже выводятся не в том порядке(не соответствуют условию)... Почему так?
(Добавление)
Последний кейс запрещает оставлять поле пустым, но мне почему то вываливается ошибка: Слишком длинный ник. Каким боком она к пустому полю?
 
 Top
teddy
Отправлено: 11 Апреля, 2013 - 01:19:59
Post Id


Участник


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


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




Так я же поставил break; не помогает
 
 Top
LIME
Отправлено: 11 Апреля, 2013 - 01:24:25
Post Id


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


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


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




switch( true ){
 
 Top
teddy
Отправлено: 11 Апреля, 2013 - 01:28:12
Post Id


Участник


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


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




Спасибо, сработало! Только вот прегматч тупит... при if-e работает, а в кейсе что бы не ввел блокирует... надо чтоб только цифры и буквы пропускал если можно помогите плз буду благодарен

(Отредактировано автором: 11 Апреля, 2013 - 01:28:45)

 
 Top
LIME
Отправлено: 11 Апреля, 2013 - 01:36:55
Post Id


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


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


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




case preg_match ( "/^[-\w\s]$/" , $login ):

(Отредактировано автором: 11 Апреля, 2013 - 01:38:30)

 
 Top
teddy
Отправлено: 11 Апреля, 2013 - 01:45:11
Post Id


Участник


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


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




LIME пишет:
case preg_match ( "/^[-\w\s]$/" , $login ):

Не работает ( вообще все блокирует, даже буквы
 
 Top
LIME
Отправлено: 11 Апреля, 2013 - 01:54:40
Post Id


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


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


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




case preg_match ( "/^[^-\w\s]$/" , $login ):
 
 Top
teddy
Отправлено: 11 Апреля, 2013 - 12:55:00
Post Id


Участник


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


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




Ничего не помогает Недовольство, огорчение Может я что то записываю не так? И ещё одну ошибку заметил, данный код считает ЛЮБОЙ введенный символ как "Неверный", но при этом если вводить "кол-во" неверных символов более 12, то почему то выдает ошибку "Слишком длинный ник" хотя должно все равно выводить "Вы используете запрещенные символы"...
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if(isset($_POST['submit'])){
  3. $login = trim($_POST['login']);
  4. $password = trim($_POST['password']);
  5.  
  6. switch(true){
  7. case strlen($login)<3:
  8. $e_login = "Поле логин обязательно для заполнения";
  9. break;
  10. case strlen($login)<3:
  11. $e_login = "Слишком короткий ник";
  12. break;
  13. case strlen($login)>12:
  14. $e_login = "Слишком длинный ник";
  15. break;
  16. case $login!==preg_match ( "/^[^-\w\s]$/" , $login ):
  17. $e_login = "Вы используете запрещенные символы";
  18. break;
  19. default:
  20. echo "Ничего не найдено";
  21. }
  22. }
  23.  
  24. ?>


И ещё, когда меняю расположение кейсов, то вообще все становится очень плохо... Тоесть если поставить регулярку в самый верх, то кроме того как "Вы используете запрещенные символы" я ничего не получаю... Почему? Я даже ничего не вводил, а нажал submit, по идее должно было выдать ". Главное что интересно, if-ами точно такой же код нормально работает, а вот с кейсами нет...
 
 Top
LIME
Отправлено: 11 Апреля, 2013 - 13:00:25
Post Id


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


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


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




Спойлер (Отобразить)
 
 Top
teddy
Отправлено: 11 Апреля, 2013 - 13:21:24
Post Id


Участник


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


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




Прег_матч не слушается снова... кстати про empty, помню советовали что лучше даже пустое поле надо проверять стрленом, только вот не понял почему...
 
 Top
teddy
Отправлено: 11 Апреля, 2013 - 19:09:36
Post Id


Участник


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


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




Никто не знает в чем проблема? Растерялся
 
 Top
DelphinPRO
Отправлено: 11 Апреля, 2013 - 19:26:50
Post Id



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


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


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




teddy пишет:
Прег_матч не слушается снова...
teddy пишет:
Никто не знает в чем проблема?

т.е. вы серьезно считаете, что описали свою проблему так, что все всё поняли, что у вас там случилось?

(Отредактировано автором: 11 Апреля, 2013 - 19:27:17)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
teddy
Отправлено: 11 Апреля, 2013 - 20:13:32
Post Id


Участник


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


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




DelphinPRO пишет:
т.е. вы серьезно считаете, что описали свою проблему так, что все всё поняли, что у вас там случилось?

Да... если изначально прочитать тему, то вполне понятен каждый момент, даже более чем... А дальше я уже отвечал на сообщения LIME
 
 Top
IllusionMH
Отправлено: 11 Апреля, 2013 - 20:59:05
Post Id



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


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


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




teddy, вы хоть понимаете что в case должны стоять значения, а не выражения?
В данном случае лучше переписать через набор if т.к. это не сравнение переменной/результата выражения с набором значений.
 
 Top
LIME
Отправлено: 11 Апреля, 2013 - 21:35:28
Post Id


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


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


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




IllusionMH пишет:
в case должны стоять значения, а не выражения
это почемуйта?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB