Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- >>502314
- Баг: в поле «оценка за ЕГЭ» можно ввести строку вроде 999asdasdasd и он не жалуется. Также, можно ввести число вроде 99999. Проверь, что вводятся только числа в разумных пределах.
- Можно не заполнить выбор «Приезжий/Местный», в этом случае выпадает ошибка при вставке в БД (спасибо строгому режиму). Надо проверять заполненность этого поля.
- Уведомление «Ваша информация была сохранена» надо сделать более заметным, я бы выводил его, используя такую зеленую бутстраповскую плашку: http://getbootstrap.com/components/#alerts
- Когад уведомлений нет, пустой <p> добавляет некрасивый отступ сверху меню. Я думаю, надо не выводить его в этом случае или переделать уведомления на плашки под меню.
- Кнопка «Редактировать мои данные» на 4-5 пикселей левее чем input выше, некрасиво как-то. Почему так? Надо открыть инспектор (Ctrl + Shift + I) и разобраться. Я вижу, что строки form-row у тебя почему-то шире самой страницы (из-за margin-right/left: -15px;). Потому внутри form-row «2 колонки» имеют немного другую ширину, нежели не внутри. Как решение, можно засунуть строчку с кнопкой тоже внутрь form-row.
- Ну и когда ты выровянешь кнопку, у нас остается проблема того, что страница с формой имеет горизонтальную прокрутку. Как я выше написал, form-row имеет отрицательный margin и вылезает за пределы страницы. Очевидно, ты забыл добавить где-то выше (на форме например) класс, который бы добавлял поля и ограничивал ширину. Ну к примеру, можно для формы задать какую-то ширину, к примеру 5 или 6 колонок сетки.
- Также, я замечу, вместо того чтобы к каждой строчке формы приписывать класс для ширины (col-sm-2), может быть проще задать ширину только для элемента form, а все дочерние элементы растянутся на 100% от нее. А, хотя это так в документации бутстрапа написано, тогда можно оставить как есть.
- Где-то в коде у тебя написано «Exeption» вместо Exception (судя по ошибке автозагрузки), найди место поиском и поправь.
- > https://github.com/V3N0m21/StudentList/blob/master/lib/Paginator.php#L43
- > $search = u($search);
- > $link = http_build_query($data);
- Не надо делать urlencode если ты используешь build_query так как она делает это сама и у тебя данные получаются лишний раз закодированы.
- > https://github.com/V3N0m21/StudentList/blob/master/lib/init.php#L5
- > #if (file_exists($file)) {
- Надо сделать чтобы это заработало. Автозагрузчик должен подключать файл только если тот существует.
- > https://github.com/V3N0m21/StudentList/blob/master/views/list.php#L6
- > "Показаны студенты соответствующие запросу '$search'" :
- Это XSS. Обойди все шаблоны, все места, где что-то выводится, и либо поставь там h() либо аргументируй комментарием почему оно не нужно тут.
- > https://github.com/V3N0m21/StudentList/blob/master/views/main.php#L8
- Шаблон не должен лезть в COOKIE/GET, я советую либо выставлять нужную переменную в init.php либо сделать функцию, првоеряющую залогиненность.
- Мне кажется в твоем случае удобнее сделать третье значение для переменной $page.
- > https://github.com/V3N0m21/StudentList/blob/master/views/reg.php#L35
- > $student->sex == 'M'
- > value="M"
- Здесь надо использовать константу
- Для id="M" можно не использовать константу, так как этот id никуда все равно не передается.
- Аналогично с местом жительства.
- Также, потрать 5 минут на исправление форматирования в файле StudentList/views/reg.php. Я попробовал найти форматтер HTML, и единственный, который не ломает PHP код, оказался этот: http://ctrlq.org/beautifier/ — но после него придется руками подрправить PHP код.
- Файл должен быть отформатирован примерно по такому принципу:
- — для HTML можно использовать 2 или 4 пробела, у тебя код не сложный так что 4 вполне подойдет
- — после блочных тегов вроде div, form, отступ увеличивается
- — парные открывающий/закрывающий теги находятся друг под другом
- — строчные теги вроде span, label, можно писать в одну строку с их содержимым, можно на разных
- — если тег очень длинный, то мы его переносим, добавляя отступ к перенесенной части:
- <div lala lala lala
- ....lalala="...">
- </div>
- — внутри PHP блоков вроде foreach, if, отступ увеличивается
- <?php include_once './views/main.php'; ?>
- <form ....>
- ....<div class="form-group <?= !empty($validation->errors['name']) ? "has-error" : '' ?>">
- ........<label for="Name" class="control-label col-sm-2">
- ............Имя:
- ........</label>
- ........<div class="col-sm-3">
- ............<input type="text" class="form-control" id="Name" name="Name" placeholder="Введите имя"
- .................value="<?=h($student->name);?>">
- ........</div>
- То, что у тебя, тяжело читать, так как все идет сплошной стеной и не видно что внутрь чего вложено.
- Я стараюсь не придираться к мелким косякам в оформлении, но у тебя там каждый второй файл не выровнен. Может твой редактор не позволяет удобно это делать?
- Ну и к следующему проекту разберись с форматированием, редактором, чтобы больше такого бардака не было, так как такого я давно не видел.
- Теперь вернемся к багу, который я обнаружил ранее, а именно чувствительность поиска к регистру. Если я ввожу «Семе» то он находит Семенов, а вот если ввести в нижнем регистре, ничего не находится. Я сначала подумал что проблемы в моих настройках, но дело не в них. Если я меняю запрос c CONCAT на
- WHERE Name LIKE ?
- То внезапно поиск становится нечувствительным к регистру. Более того, если я впишу
- WHERE CONCAT(Name, Surname) LIKE ?
- То он тоже работает игнорируя регистр букв. А вот если мы добавим в CONCAT поле BirthDate, все перестает работать.
- Как так? придется залезть в мануал, на английском:
- https://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html
- > For nonbinary strings (CHAR, VARCHAR, TEXT), string searches use the collation of the comparison operands
- https://dev.mysql.com/doc/refman/5.0/en/charset-collation-expressions.html
- Тут объясняется как определяется используемая Collation (правило сравнения строк) для сложных выражений.
- > For an operation with operands from the same character set but that mix a _bin collation and a _ci or _cs collation, the _bin collation is used.
- Если операция (например CONCAT) использует чувствительные и неувствительные к регистру значения, то ее результат будет чувствителен к регистру.
- > For implicit conversion of a numeric or temporal value to a string, such as occurs for the argument 1 in the expression CONCAT(1, 'abc'), the result is a binary string for which the character set and collation are binary.
- Если число или дата приводится к строке, она использует binary collation (чувствительную к регистру).
- Таким образом, если ты используешь число или дату в CONCAT, то результат чувствителен к регистру.
- Таким образом поиск чувствителен к регистру независимо от настроек базы данных.
- Значит в твоем случае надо: дописать явно в оператор LIKE какую COLLATION использовать (не учитывающую регистр символов).
- Проверить collation выражения можно сделав запрос (сделать его можно например в командной строке mysql или если ты пользуешься программами типа phpmyadmin, то в них):
- SELECT COLLATION(...);
- Например:
- SELECT COLLATION(1);
- SELECT COLLATION('asdasdad');
- SELECT COLLATION(BirthDate) FROM Students;
- SELECT COLLATION(CONCAT(Name,1)) FROM Students;
- Так что попробуй разобраться с этим вопросом и исправить баг. Если что-то непонятно, уточняй.
- В остальном, все меня устраивает и я думаю, что после исправления всех этих багов ты можешь переходить к следующей задаче. Если не считать оформления кода, то у тебя неплохо получилось.
Advertisement
Add Comment
Please, Sign In to add comment