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 :: Как вы реализуете вывод ошибок

 PHP.SU

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


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

> Описание: Ваша реализация вывода ошибок по тому или иному поводу
n1k86
Отправлено: 28 Января, 2012 - 14:42:52
Post Id


Частый гость


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


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




Ребят, всем привет. Сложилась такая ситуация, что я всё не могу никак подойти к тому, как же лучше всё-таки делать ошибочки при тех или иных ситуациях. Вот остановлся на таком варианте:

PHP:
скопировать код в буфер обмена
  1.  
  2. $err = array(); //Брум-бум-бум-бум масив
  3.  
  4. $posts = mysql_result(mysql_query("SELECT COUNT(id) FROM news"), 0);
  5. $_GET['edit'] < $posts || $_GET['edit'] > $posts ? $err[] = 'Новости с таким ID не существует.' : NULL; //Проверяем, есть ли такая новость.
  6.  
  7. f(!empty($_POST['title']) && !empty($_POST['text']))
  8. {
  9.      mb_strlen($_POST['title']) < 3 || mb_strlen($_POST['title']) > 50 ? $err[] = 'Заголовок должен быть не меньше 3 символов и не больше 50 символов.' : NULL; //Проверяем на кол-во знаков.
  10.      mb_strlen($_POST['text']) < 50 || mb_strlen($_POST['text']) > 2000 ? $err[] = 'Текст новости должен быть не меньше 50 символов и не больше 2000 символов.' : NULL; //Проверяем на кол-во знаков.
  11. }
  12.  
  13. //Если ошибок нет.
  14. if(count($err) == 0)
  15. {
  16.      $output .= '<div class="sys_bg"><div class="system succes">Новость успешно изменена!</div></div>';
  17. }
  18. else
  19. {
  20.      //Если есть - выводим.
  21.      foreach($err AS $error)
  22.      {
  23.           $output .= '<div class="sys_bg"><div class="system error">'.$error.'</div></div>';
  24.      }
  25. }
  26.  


Но в этом варианте есть недостаток, что если например много отправляешь по форме, и потом их надо занести в базу, то если где-то вот проходит ошибка, то можно сказать весь скрипт ступориться. А если ты начинаешь мудрить с проверкой для каждого раза, типа count($err) == 0 то продолжаем, то получается, если честно, бред.

Подскажите, как лучше это всё реализовать, как вы это реализовываете.
 
 Top
LIME
Отправлено: 28 Января, 2012 - 16:37:01
Post Id


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


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


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




n1k86 пишет:
то если где-то вот проходит ошибка, то можно сказать весь скрипт ступориться
имеется ввиду необходимость снова заполнять форму?
 
 Top
n1k86
Отправлено: 28 Января, 2012 - 16:40:31
Post Id


Частый гость


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


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




Нет. Смотри, вот у меня есть страница. В ней есть форма с полями: имя, фамилия, возраст.
Дальше я вот беру обрабатываю всё, заношу как бы эти ошибки в массив $error, если они будут. Ну вдруг он введет имя меньшего размера или в Фамилию не укажет. Так вот. В моём коде получается, что если вдруг будет ошибка хоть где-то, и count($error) покажет значение не равное 0 (т.е. будут ошибки), то скрипт остальные данные не хочет обрабатывать. Т.е. сразу тормозит и показывает, вот мол, вы в имени ошиблись. Хотя возможно, что фамилия и возраст то были указаны верно, и их можно было и сохранить, и написать, мол:
!Ваше имя короче 3 символов.
Фамилия успешно сохранена.
Возвраст успешно сохранён.

Ну вот так, как-то....думаю сейчас понятно объяснил?
 
 Top
n1k86
Отправлено: 28 Января, 2012 - 18:40:52
Post Id


Частый гость


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


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




Добился нужного мне результата с помощью того, что при проверке на ошибки каждого ПОЛЯ из формы, я создаю массив, а потом его убиваю. И вот так для каждого поля...это вообще нормально такой подход??
 
 Top
LIME
Отправлено: 28 Января, 2012 - 20:04:36
Post Id


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


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


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




n1k86 ну я так и думал вобщем
проще помещать в форму при выводе значения из GET
если их нет то форма пуста
если ошибка в каком-то значении то вместе с ошибкой unset($_GET['это_значение'])
следовательно у вас появится форма с правильно заполнеными полями и пустотой в полях с ошибкой
а в базу всеже заносить только при отсутствии ошибок все сразу
 
 Top
n1k86
Отправлено: 28 Января, 2012 - 20:07:09
Post Id


Частый гость


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


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




По реализации это сложнее. Так я просто делаю как у меня было, но каждую проверочку инпута обрамляю в так сказать массив. (Союзаю -> Проверяю -> Убиваю)*n-раз. Т.е. сколько принимаю - столько и проверяю. По сути своего добился...спасибо большое!) Я тебе Спасибо нажал;)
 
 Top
LIME
Отправлено: 28 Января, 2012 - 20:17:38
Post Id


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


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


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




n1k86 пишет:
Я тебе Спасибо нажал;)
видимо не за что
значит отработаю спасибку ))
во пример
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if (isset($_GET['name']) && $_GET['name']=='ошибка') {
  3.         $err[]='Ошибка номер раз';
  4.         unset($_GET['name']);
  5. }
  6. if (isset($_GET['age']) && $_GET['age']=='ошибка') {
  7.         $err[]='Ошибка номер два';
  8.         unset($_GET['age']);
  9. }
  10. foreach ($err as $error) echo $error.'<br/>';
  11. ?>
  12. <form>
  13.  <input type="text" value="<?=$_GET['name']?>">
  14.  <input type="text" value="<?=$_GET['age']?>">
  15. </form>

вот что тут сложного в реализации
наоборот меньше гимороя
 
 Top
n1k86
Отправлено: 28 Января, 2012 - 20:20:12
Post Id


Частый гость


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


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




Есть за что. Ты один, кто ответил. Не по ленился) Ну вот смотри код мой(весь файл):
Спойлер (Отобразить)


Куда проще, ведь правда? Кстати, если есть замечания по коду какие-нибудь, т.к. я думаю ты опытнее меня куда больше, подскажи, пожалуйста!)
 
 Top
sKaa
Отправлено: 29 Января, 2012 - 00:07:48
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


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

[+]


n1k86 пишет:
Ну вот смотри код мой(весь файл):
Жесть ваще)))))
 
 Top
n1k86
Отправлено: 29 Января, 2012 - 06:52:44
Post Id


Частый гость


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


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




sKaa пишет:
n1k86 пишет:
Ну вот смотри код мой(весь файл):
Жесть ваще)))))


Ээээ...ну я как бы только учусь....поэтому, может ты лучше подскажешь что-то полезное, а не эмоции выражать будешь???)))
 
 Top
Slesher
Отправлено: 29 Января, 2012 - 14:36:46
Post Id


Гость


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


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




весь код не смотрел что в последнем варианте не смотрел, но могу посоветовать использовать класс Exception, а также try{}, catch {}. можно много автоматизации и упрощения ними сделать.
 
 Top
n1k86
Отправлено: 29 Января, 2012 - 14:38:12
Post Id


Частый гость


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


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




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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB