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
Форумы портала PHP.SU :: Версия для печати :: Как вы реализуете вывод ошибок
Форумы портала PHP.SU » PHP » Пользовательские функции » Как вы реализуете вывод ошибок

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

1. n1k86 - 28 Января, 2012 - 14:42:52 - перейти к сообщению
Ребят, всем привет. Сложилась такая ситуация, что я всё не могу никак подойти к тому, как же лучше всё-таки делать ошибочки при тех или иных ситуациях. Вот остановлся на таком варианте:

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 то продолжаем, то получается, если честно, бред.

Подскажите, как лучше это всё реализовать, как вы это реализовываете.
2. LIME - 28 Января, 2012 - 16:37:01 - перейти к сообщению
n1k86 пишет:
то если где-то вот проходит ошибка, то можно сказать весь скрипт ступориться
имеется ввиду необходимость снова заполнять форму?
3. n1k86 - 28 Января, 2012 - 16:40:31 - перейти к сообщению
Нет. Смотри, вот у меня есть страница. В ней есть форма с полями: имя, фамилия, возраст.
Дальше я вот беру обрабатываю всё, заношу как бы эти ошибки в массив $error, если они будут. Ну вдруг он введет имя меньшего размера или в Фамилию не укажет. Так вот. В моём коде получается, что если вдруг будет ошибка хоть где-то, и count($error) покажет значение не равное 0 (т.е. будут ошибки), то скрипт остальные данные не хочет обрабатывать. Т.е. сразу тормозит и показывает, вот мол, вы в имени ошиблись. Хотя возможно, что фамилия и возраст то были указаны верно, и их можно было и сохранить, и написать, мол:
!Ваше имя короче 3 символов.
Фамилия успешно сохранена.
Возвраст успешно сохранён.

Ну вот так, как-то....думаю сейчас понятно объяснил?
4. n1k86 - 28 Января, 2012 - 18:40:52 - перейти к сообщению
Добился нужного мне результата с помощью того, что при проверке на ошибки каждого ПОЛЯ из формы, я создаю массив, а потом его убиваю. И вот так для каждого поля...это вообще нормально такой подход??
5. LIME - 28 Января, 2012 - 20:04:36 - перейти к сообщению
n1k86 ну я так и думал вобщем
проще помещать в форму при выводе значения из GET
если их нет то форма пуста
если ошибка в каком-то значении то вместе с ошибкой unset($_GET['это_значение'])
следовательно у вас появится форма с правильно заполнеными полями и пустотой в полях с ошибкой
а в базу всеже заносить только при отсутствии ошибок все сразу
6. n1k86 - 28 Января, 2012 - 20:07:09 - перейти к сообщению
По реализации это сложнее. Так я просто делаю как у меня было, но каждую проверочку инпута обрамляю в так сказать массив. (Союзаю -> Проверяю -> Убиваю)*n-раз. Т.е. сколько принимаю - столько и проверяю. По сути своего добился...спасибо большое!) Я тебе Спасибо нажал;)
7. LIME - 28 Января, 2012 - 20:17:38 - перейти к сообщению
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>

вот что тут сложного в реализации
наоборот меньше гимороя
8. n1k86 - 28 Января, 2012 - 20:20:12 - перейти к сообщению
Есть за что. Ты один, кто ответил. Не по ленился) Ну вот смотри код мой(весь файл):
Спойлер (Отобразить)


Куда проще, ведь правда? Кстати, если есть замечания по коду какие-нибудь, т.к. я думаю ты опытнее меня куда больше, подскажи, пожалуйста!)
9. sKaa - 29 Января, 2012 - 00:07:48 - перейти к сообщению
n1k86 пишет:
Ну вот смотри код мой(весь файл):
Жесть ваще)))))
10. n1k86 - 29 Января, 2012 - 06:52:44 - перейти к сообщению
sKaa пишет:
n1k86 пишет:
Ну вот смотри код мой(весь файл):
Жесть ваще)))))


Ээээ...ну я как бы только учусь....поэтому, может ты лучше подскажешь что-то полезное, а не эмоции выражать будешь???)))
11. Slesher - 29 Января, 2012 - 14:36:46 - перейти к сообщению
весь код не смотрел что в последнем варианте не смотрел, но могу посоветовать использовать класс Exception, а также try{}, catch {}. можно много автоматизации и упрощения ними сделать.
12. n1k86 - 29 Января, 2012 - 14:38:12 - перейти к сообщению
В принципи вопрос исчерпан, хотя мне предлагал друг сделать тру и кэтч. Но это же для ооп, так ведь? Или нет?

 

Powered by ExBB FM 1.0 RC1