Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для SanchO-SEK
61 / 23 / 7
Регистрация: 22.05.2012
Сообщений: 89

Ужасный код :-(

26.05.2015, 04:07. Показов 1653. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Несколько лет практикую программирование, и именно в PHP у меня получается некоторое недоразумение, насчет решения которого даже не знаю что думать Дело вот в чем. Для примера покажу свой ход мыслей при написании кода, например, авторизации:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
...
// Получим и подготовим рабочие данные (в коде ниже должно быть удаление пробелов и т.д. и т.п., но сейчас не об этом)
$login = ...;
$pass = ...;
 
if(!strlen($login) || !strlen($pass))
    // Если любое из полей осталось пустым
    exit('Поля заполнены неправильно!');
 
// Если код продолжает выполняться, значит поля не пустые. Продолжаем работу!
// Получаем данные из СУБД
$result = ...; // результат выполнения запроса
// СУБД могла либо вернуть пустой результат (нет указанного пользователя), либо запрос мог вообще не выполниться:
if(!$result)
    exit('При загрузке данных произошла ошибка!');
 
// Если код выполняется до сих пор - ответ от СУБД получен. Но вдруг результат пуст?
if(mysql_num_rows($result)==0)
    exit('Указанный пользователь не найден!'); // Это для примера!
 
// Данные есть. Продолжаем!
$data = mysql_fetch_assoc($result); // $data['login'] и $data['password'] - логин и пароль соответственно
 
if($data['login'] != $login || $data['password'] != $pass)
    exit('Неправильный логин или пароль!');
 
// Логин и пароль правильные. Авторизуем пользователя!..
Этим примером я хотел показать, что при работе с данными происходит множество проверок их правильности, и на каждую ошибку нужно не просто отреагировать, а и вывести ответ пользователю на полноценной странице. Одно дело, когда код разметки находится в одном файле с программным кодом, и совсем другое, когда использую шаблонизатор (в моём случае Smarty). Вот небольшой пример кода выше, только с использованием Smarty:

PHP
1
2
3
4
5
6
if(!strlen($login) || !strlen($pass)) {
    $page->assign('message', 'Поля заполнены неправильно!');
    $page->assign('valueLogin', $login);
    $page->display('login.tpl');
    exit();
}
И так вот для каждой проверки данных выводится такая куча кода. Очень нехорошо это всё! Как вариант думал написать пользовательскую функцию, чтобы не писать каждый раз столько строк, но тогда для каждого случая придется писать собственную функцию. Еще вариант - написать класс, и чтобы его дочерние классы выводили относящиеся к ним ошибки, но этот вариант мне не очень нравится. Есть еще какие-нибудь соображения?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.05.2015, 04:07
Ответы с готовыми решениями:

ПЛЮШКИ - русский язык, ужасный баг
VOT TAKAIA problema. Ispol'zuiu gotovyj skript magazina. Kogda vstavliaiu tovarv bd - na russ. iaz. vse normal'no, vse otobrazhaetsia...

Как написать ужасный код
Здравствуйте. Поругался с преподавателем по программированию и решил сделать следующую лабу максимально нечитабельной. Пишу на си++....

Кажется написал ужасный код. Можно его как-то оптимизировать?
Решал одну задачку: Даны натуральное число n, целые числа x 1 , ..., x n (все числа попарно различны). Поменять местами наибольший и...

8
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
26.05.2015, 06:42
SanchO-SEK, так сразу и не скажешь, как Вам сделать правильно. Тут много тонкостей. Может Вам стоит попробовать framework? И по аналогии сможете у себя сделать...
1
 Аватар для SanchO-SEK
61 / 23 / 7
Регистрация: 22.05.2012
Сообщений: 89
26.05.2015, 07:07  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
SanchO-SEK, так сразу и не скажешь, как Вам сделать правильно. Тут много тонкостей. Может Вам стоит попробовать framework? И по аналогии сможете у себя сделать...
Не хотелось бы работать с фреймворками! Надо бы еще покопошиться в кодах таких продуктов, как, например, phpBB, InstantCMS и т.д. и т.п. - их авторы гораздо более профессиональней, чем авторы скриптов на свалках типа visavi.net!..
А тем временем надеюсь, здесь будут еще ответы Спасибо за внимание!
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
26.05.2015, 07:11
Цитата Сообщение от SanchO-SEK Посмотреть сообщение
их авторы гораздо более профессиональней, чем авторы скриптов на свалках типа visavi.net
Так, а кто спорит? Или Вы думаете, что framework'и берутся с visavi.net? Сильно ошибаетесь.
Если не хотите пока с framework знакомиться - можете почитать для начала о MVC. Потом быстро выйдите на путь истинный.
1
 Аватар для SanchO-SEK
61 / 23 / 7
Регистрация: 22.05.2012
Сообщений: 89
26.05.2015, 07:29  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
Так, а кто спорит? Или Вы думаете, что framework'и берутся с visavi.net? Сильно ошибаетесь.
Я имел ввиду то, что в скриптах с визави настолько ужасный код, что ничему хорошему по нему не научишься

Цитата Сообщение от Para bellum Посмотреть сообщение
Если не хотите пока с framework знакомиться - можете почитать для начала о MVC.
Читал однажды, но очень поверхностно, и единственное, чему научился в тот момент, это использовать шаблонизатор. Благодаря только ему (не используя идею MVC в полной мере) уже стало удобней работать (верстальщикам проще стало писать шаблоны скриптов, а мне проще приделать их к программному коду).
Так-с, тогда надо будет погрузиться в литературу по MVC для более глубокого знакомства. В этом вопросе Google мне в помощь!
Большое спасибо за совет, но вопрос еще не закрыт!
0
Заблокирован
26.05.2015, 11:42
Можно делать "если ошибка, то выход; если ошибка, то выход; ...". Такой вариант хорошо подходит, если вы перед выходом сохраняете информацию об ошибке и делаете перенаправление, чтобы потом эту ошибку "оформить", как следует. Если "оформить" ошибку нужно в рамках обработки текущего запроса, то используете вложенные ветвления. Например:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
 
$warning='';
 
if (OK)
{
  if (OK)
  {
    ...
  }
  else $warning='Ошибка #2';
}
else $warning='Ошибка #1';
 
?><?= $warning ?>
Если может быть накоплено несколько ошибок (для этого опять-таки используется простая последовательная схема, о которой я писала в самом начале), то накапливайте их в массиве ($warning[]='Ошибка'), а потом выводите в цикле, или просто используйте конкатенацию, если вам так удобнее (например, когда не нужно обрамлять сообщения об ошибке какими-то дополнительными тегами при выводе).
1
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
26.05.2015, 18:20
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function error($error) {
        $page = '<!DOCTYPE html><html><head><title>Ошибка</title><meta charset="UTF-8"></head><body>';
        if (__DEBUG__) {
            $page.='<h3>Ошибка</h3><p>';
            $page.=$error;
            $page.='</p>';
        } else {
            //mail($page, $subject, $mail); // можно мыло админу отправить
            /* посетителю незачем видеть отчеты о наших ошибках */
            $page.='<h3>Непредвиденная ошибка</h3><p>Мы делаем все, чтобы ее устранить. Приносим свои извинения.</p>';
        }
        $page.='</body></html>';
        exit($page);
    }
Цитата Сообщение от SanchO-SEK Посмотреть сообщение
Еще вариант - написать класс, и чтобы его дочерние классы выводили относящиеся к ним ошибки, но этот вариант мне не очень нравится.
а зря

зы мой пример конечно для отлова ошибок программиста, а не кривого ввода пользователя, но этот же принцип можно использовать для пользовательских ошибок. просто делаете спец. страничку для вывода ошибок и подставляете туда конкретные значения. А лучше возьмите фреймворк, потом сможете написать свой..
1
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
26.05.2015, 23:03
Цитата Сообщение от SanchO-SEK Посмотреть сообщение
Есть еще какие-нибудь соображения?
Все очень просто.
Передавать в шаблон объект ОшибкиМодели. Ключи этого объекта будут ОшибкаПоля. ОшибкаПоля будет содержать список ошибок для конкретного поля.

Добавлено через 1 минуту
Цитата Сообщение от SanchO-SEK Посмотреть сообщение
Надо бы еще покопошиться в кодах таких продуктов, как, например, phpBB, InstantCMS и т.д. и т.п. - их авторы гораздо более профессиональней, чем авторы скриптов на свалках типа visavi.net!..
Нет, там такой же отвратительный код.
1
88 / 88 / 34
Регистрация: 22.05.2012
Сообщений: 404
27.05.2015, 21:11
Цитата Сообщение от OnYourLips Посмотреть сообщение
Нет, там такой же отвратительный код.
Отвратительный это даже мягко сказано !!!!
Лучше поройся скажем в Yii2 штука хорошая ( не без изянов есественн. ) но это лучший вариант для начинающих в php ООП.
Цитата Сообщение от SanchO-SEK Посмотреть сообщение
Еще вариант - написать класс, и чтобы его дочерние классы выводили относящиеся к ним ошибки, но этот вариант мне не очень нравится
Это ты зря ООП действительно творит чудеса
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.05.2015, 21:11
Помогаю со студенческими работами здесь

Ужасный, ужасный линукс!!
По требованию начальства установила линукс-мастер на комп. теперь не могу установить к нему принтер самсунг scx-4220. Перепробовала...

Ужасный запоминатель
Помогите составить программу. На форме текстовое поле едит и кнопки запомнить и вывести. Пишешь что-то в текстовом поле потом нажимаешь...

Ужасный шрифт
установил восмерку (так чисто что бы потестировать) но тут начались приколы))))))) сначала (до активации она выглядела очень ужасно)...

Ужасный трабл с флешкой
есть флешка на 8 гигов... я залил туда образ img. он мне стал показывать что мол места там теперь 0. потом я форматнул флешку через винду и...

UAC великий и ужасный
Это какая-то жесть. Систему поставил с нуля пару недель назад. Несколько дней назад UAC решил отключить, ибо достал. Потом узрел целый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru