Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: оператор switch возможно ли такое

Сообщения:  [1-10]    [11-20]  [21-22] 

 
 автор: Bvz   (31.03.2009 в 13:39)   письмо автору
 
   для: Лена   (31.03.2009 в 13:29)
 

спасибо!

  Ответить  
 
 автор: Trianon   (31.03.2009 в 13:30)   письмо автору
 
   для: Bvz   (31.03.2009 в 12:32)
 

<?
define
('LOGIN_TooSmal'1);
define('LOGIN_TooBig'2);
define('LOGIN_InvalidChars'4);
define('LOGIN_AlreadyRegistered'8); 

$login_msgset  = array(
  
LOGIN_TooSmal => 'Логин короче двух символов',
  
LOGIN_TooBig => 'Логин длиннее 22 символов',
  
LOGIN_InvalidChars => 'Логин содержит недопустимые символы',
  
LOGIN_AlreadyRegistered => 'Логин же используется');

$login_error_set $_SESSION['login_error_set'];
if(
$login_error_set )
{
  
$msg '';

  foreach(
$login_msgset as $errcode =>$errmsg)
    if(
$login_error_set $errcode)
      
$msg .= "<p>$errmsg</p>";

  echo 
$msg;
}

  Ответить  
 
 автор: Лена   (31.03.2009 в 13:29)   письмо автору
 
   для: sim5   (31.03.2009 в 12:01)
 

>Когда-то я о таком здесь писал, давно, уже не помню где (а может это и приснилось мне :))).
Писали-писали, не приснилось - http://softtime.ru/forum/read.php?id_forum=1&id_theme=55842
Может, автору поста поможет. Я сама на этом примере училась.

  Ответить  
 
 автор: Bvz   (31.03.2009 в 12:32)   письмо автору
 
   для: sim5   (31.03.2009 в 12:01)
 

в нашем случае заданы исходные варианты ошибок

define('LOGIN_TooSmal', 1);
define('LOGIN_TooBig', 2);
define('LOGIN_InvalidChars', 4);
define('LOGIN_AlreadyRegistered', 8);

ошибок может быть 1 или 2 и варианты их сочетания следующие, т.е. $login_error_set может быть

1 - меньше 2 корректных символов
2 - больше 22 символов
4 - от 2 до 22 некорректных символов
5 - поле пустое или один некорректный символ
6 - больше 22 некорректных символов
8 - такой пользователь уже существует


следовательно выводить ошибки можно предложенным Вами способом

$error = "";
if (.....) $error = "Ошибка 1<br>";
if (.....) $error = "Ошибка 2<br>";
if (.....) $error = "Ошибка 3<br>";
if ($error) {
выводим форму и ошибки пользователю
}


возможно я Вас не до конца понимаю, например мне непонятно, что такое
>нужно работать с битами маски
а как массив сформировать ?

  Ответить  
 
 автор: sim5   (31.03.2009 в 12:01)   письмо автору
 
   для: Bvz   (31.03.2009 в 11:50)
 

Если вы произведете логическое ИЛИ над двумя операндами, например, 2 и 5, то вы получите 7. Как вы можете узнать, что это были именно эти опреранды, а не 6 и 1, или 4 и 3?
Нет, в этом случае нужно работать с битами маски, которые будут иметь вес ошибки, который в свою очередь может определять индекс в массиве сообщений об ошибках. Когда-то я о таком здесь писал, давно, уже не помню где (а может это и приснилось мне :))).
$error = "";
if (.....) $error .= "Ошибка 1<br>";
if (.....) $error .= "Ошибка 2<br>";
if (.....) $error .= "Ошибка 3<br>";
if ($error) {
выводим форму и ошибки пользователю
}

PS. Можно ошибки (сообщения) формировать и передавать как массив для обработки. Это удобно в шаблоне будет, например, для Смарти. Можно и через сессию передать далее такой массив.

  Ответить  
 
 автор: Bvz   (31.03.2009 в 11:50)   письмо автору
 
   для: sim5   (31.03.2009 в 11:32)
 

а можно сделать обратное, т.е. разделение?
мне предложеное выше решение очень понравилось, хотя вариантов$login_error_set; не так уж и много можно сделать и заготовки под каждую.

>В вашем случае, мне так кажется, проще формировать переменную содержащую сообщения об >ошибках, у вас ведь не так много полей.

а как это в виде кода будет выглядеть?

а можно все сообщения об ошибке сохранить в массив и потом передать через сессию и потом вывести, я просто не знаю можно ли массив передать таким образом?

  Ответить  
 
 автор: sim5   (31.03.2009 в 11:32)   письмо автору
 
   для: Bvz   (31.03.2009 в 11:21)
 

Вообще-то это не суммирование, строго говоря, а соединение по ИЛИ (дизъюнкция).
Поступить как? В вашем случае, мне так кажется, проще формировать переменную содержащую сообщения об ошибках, у вас ведь не так много полей. А можно и формируя маску ошибки, а затем выводить те сообщения, у которой бит маски установлен в 1. Но это когда полей много, или для универсального автомата делается.

  Ответить  
 
 автор: Bvz   (31.03.2009 в 11:21)   письмо автору
 
   для: sim5   (31.03.2009 в 11:12)
 

разобрался, он суммирует все ошибки, тогда напрашивается еще один вопрос, а как разобрать
$_SESSION['login_error_set'], полученную из $_SESSION['login_error_set'] = $login_error_set;
чтоб выдать списком все ошибки?

  Ответить  
 
 автор: sim5   (31.03.2009 в 11:12)   письмо автору
 
   для: Bvz   (31.03.2009 в 11:00)
 

Для того же, что и: +=, -=, ^=, .= и т.п..

  Ответить  
 
 автор: Bvz   (31.03.2009 в 11:00)   письмо автору
 
   для: sim5   (31.03.2009 в 10:51)
 

согласен, правильнее будет собрать все ошибки и выдать пользователю сразу )) вышеприведенный пример может это, я и мею ввиду не мой ))
а для чего нужен |=

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-22] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования