Guest User

Untitled

a guest
Jun 25th, 2015
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 11.41 KB | None | 0 0
  1. >>502314
  2.  
  3. Баг: в поле «оценка за ЕГЭ» можно ввести строку вроде 999asdasdasd и он не жалуется. Также, можно ввести число вроде 99999. Проверь, что вводятся только числа в разумных пределах.
  4.  
  5. Можно не заполнить выбор «Приезжий/Местный», в этом случае выпадает ошибка при вставке в БД (спасибо строгому режиму). Надо проверять заполненность этого поля.
  6.  
  7. Уведомление «Ваша информация была сохранена» надо сделать более заметным, я бы выводил его, используя такую зеленую бутстраповскую плашку: http://getbootstrap.com/components/#alerts
  8.  
  9. Когад уведомлений нет, пустой <p> добавляет некрасивый отступ сверху меню. Я думаю, надо не выводить его в этом случае или переделать уведомления на плашки под меню.
  10.  
  11. Кнопка «Редактировать мои данные» на 4-5 пикселей левее чем input выше, некрасиво как-то. Почему так? Надо открыть инспектор (Ctrl + Shift + I) и разобраться. Я вижу, что строки form-row  у тебя почему-то шире самой страницы (из-за margin-right/left: -15px;). Потому внутри form-row «2 колонки» имеют немного другую ширину, нежели не внутри. Как решение, можно засунуть строчку с кнопкой тоже внутрь form-row.
  12.  
  13. Ну и когда ты выровянешь кнопку, у нас остается проблема того, что страница с формой имеет горизонтальную прокрутку. Как я выше написал, form-row имеет отрицательный margin и вылезает за пределы страницы. Очевидно, ты забыл добавить где-то выше (на форме например) класс, который бы добавлял поля и ограничивал ширину. Ну к примеру, можно для формы задать какую-то ширину, к примеру 5 или 6 колонок сетки.
  14.  
  15. Также, я замечу, вместо того чтобы к каждой строчке формы приписывать класс для ширины (col-sm-2), может быть проще задать ширину только для элемента form, а все дочерние элементы растянутся на 100% от нее. А, хотя это так в документации бутстрапа написано, тогда можно оставить как есть.
  16.  
  17. Где-то в коде у тебя написано «Exeption» вместо Exception (судя по ошибке автозагрузки), найди место поиском и поправь.
  18.  
  19. > https://github.com/V3N0m21/StudentList/blob/master/lib/Paginator.php#L43
  20. > $search = u($search);
  21. > $link = http_build_query($data);
  22. Не надо делать urlencode  если ты используешь build_query так как она делает это сама и у тебя данные получаются лишний раз закодированы.
  23.  
  24. > https://github.com/V3N0m21/StudentList/blob/master/lib/init.php#L5
  25. > #if (file_exists($file)) {
  26. Надо сделать чтобы это заработало. Автозагрузчик должен подключать файл только если тот существует.
  27.  
  28. > https://github.com/V3N0m21/StudentList/blob/master/views/list.php#L6
  29. >  "Показаны студенты соответствующие запросу '$search'" :
  30. Это XSS. Обойди все шаблоны, все места, где что-то выводится, и либо поставь там h() либо аргументируй комментарием почему оно не нужно тут.
  31.  
  32. > https://github.com/V3N0m21/StudentList/blob/master/views/main.php#L8
  33. Шаблон не должен лезть в COOKIE/GET, я советую либо выставлять нужную переменную в init.php либо сделать функцию, првоеряющую залогиненность.
  34.  
  35. Мне кажется в твоем случае удобнее сделать третье значение для переменной $page.
  36.  
  37. > https://github.com/V3N0m21/StudentList/blob/master/views/reg.php#L35
  38. > $student->sex == 'M'
  39. > value="M"
  40. Здесь надо использовать константу
  41.  
  42. Для id="M" можно не использовать константу, так как этот id никуда все равно не передается.
  43.  
  44. Аналогично с местом жительства.
  45.  
  46. Также, потрать 5 минут на исправление форматирования в файле  StudentList/views/reg.php. Я попробовал найти форматтер HTML, и единственный, который не ломает PHP код, оказался этот: http://ctrlq.org/beautifier/ — но после него придется руками подрправить PHP код.
  47.  
  48. Файл должен быть отформатирован примерно по такому принципу:
  49.  
  50. — для HTML можно использовать 2 или 4 пробела, у тебя код не сложный так что 4 вполне подойдет
  51. — после блочных тегов вроде div, form, отступ увеличивается
  52. — парные открывающий/закрывающий теги находятся друг под другом
  53. — строчные теги вроде span, label, можно писать в одну строку с их содержимым, можно на разных
  54. — если тег очень длинный, то мы его переносим, добавляя отступ к перенесенной части:
  55.  
  56. <div lala lala lala
  57. ....lalala="...">
  58. </div>
  59.  
  60. — внутри PHP блоков вроде foreach, if, отступ увеличивается
  61.  
  62. <?php include_once './views/main.php'; ?>
  63. <form ....>
  64. ....<div class="form-group <?= !empty($validation->errors['name']) ? "has-error" : '' ?>">
  65. ........<label for="Name" class="control-label col-sm-2">
  66. ............Имя:
  67. ........</label>
  68. ........<div class="col-sm-3">
  69. ............<input type="text" class="form-control" id="Name" name="Name" placeholder="Введите имя"
  70. .................value="<?=h($student->name);?>">
  71. ........</div>
  72.  
  73.  
  74. То, что у тебя, тяжело читать, так как все идет сплошной стеной и не видно что внутрь чего вложено.
  75.  
  76. Я стараюсь не придираться к мелким косякам в оформлении, но у тебя там каждый второй файл не выровнен. Может твой редактор не позволяет удобно это делать?
  77.  
  78. Ну и к следующему проекту разберись с форматированием, редактором, чтобы больше такого бардака не было, так как такого я давно не видел.
  79.  
  80. Теперь вернемся к багу, который я обнаружил ранее, а именно чувствительность поиска к регистру. Если я ввожу «Семе» то он находит Семенов, а вот если ввести в нижнем регистре, ничего не находится. Я сначала подумал что проблемы в моих настройках, но дело не в них. Если я меняю запрос c CONCAT на
  81.  
  82. WHERE Name LIKE ?
  83.  
  84. То внезапно поиск становится нечувствительным к регистру. Более того, если я впишу
  85.  
  86. WHERE CONCAT(Name, Surname) LIKE ?
  87.  
  88. То он тоже работает игнорируя регистр букв. А вот если мы добавим в CONCAT поле BirthDate, все перестает работать.
  89.  
  90. Как так? придется залезть в мануал, на английском:
  91.  
  92. https://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html
  93. > For nonbinary strings (CHAR, VARCHAR, TEXT), string searches use the collation of the comparison operands
  94.  
  95. https://dev.mysql.com/doc/refman/5.0/en/charset-collation-expressions.html
  96. Тут объясняется как определяется используемая Collation (правило сравнения строк) для сложных выражений.
  97.  
  98. > 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.
  99. Если операция (например CONCAT) использует чувствительные и неувствительные к регистру значения, то ее результат будет чувствителен к регистру.
  100.  
  101. > 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.
  102. Если число или дата приводится к строке, она использует binary collation (чувствительную к регистру).
  103.  
  104. Таким образом, если ты используешь число или дату в CONCAT, то результат чувствителен к регистру.
  105.  
  106. Таким образом поиск чувствителен к регистру независимо от настроек базы данных.
  107.  
  108. Значит в твоем случае надо: дописать явно в оператор LIKE какую COLLATION использовать (не учитывающую регистр символов).
  109.  
  110. Проверить collation выражения можно сделав запрос (сделать его можно например в командной строке mysql или если ты пользуешься программами типа phpmyadmin, то в них):
  111.  
  112. SELECT COLLATION(...);
  113.  
  114. Например:
  115.  
  116. SELECT COLLATION(1);
  117. SELECT COLLATION('asdasdad');
  118. SELECT COLLATION(BirthDate) FROM Students;
  119. SELECT COLLATION(CONCAT(Name,1)) FROM Students;
  120.  
  121. Так что попробуй разобраться с этим вопросом и исправить баг. Если что-то непонятно, уточняй.
  122.  
  123. В остальном, все меня устраивает и я думаю, что после исправления всех этих багов ты можешь переходить к следующей задаче. Если не считать оформления кода, то у тебя неплохо получилось.
Advertisement
Add Comment
Please, Sign In to add comment