Аватар для SanchO-SEK
61 / 23 / 7
Регистрация: 22.05.2012
Сообщений: 89

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

26.05.2015, 04:07. Показов 1691. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru