Pull to refresh

Comments 10

Поздравляю, вы, кажется, во-первых изобрели велосипед, во-вторых, написали ужасный код, который стоит использовать разве только в качестве подборки bad practice'ов. alert() для отображения ошибок, отсутствие шаблонизации, die() в PHP-коде, вот это всё — оно нехорошо.
UFO just landed and posted this here
а где SQL-инъекцию нашли? Там есть проверка через regex, и как её обойти я что-то не представляю
UFO just landed and posted this here
Хороший пример того, как не надо писать.
Вот поэтому и не любят PHP-шников:( У НЛО, наверное, всё плохо, раз за такие статьи инвайты дают.
Уважаемый автор. В вас наверное сейчас кипит негодование, ведь вашу статью раскритиковали, и минусов в карму наставили. И вполне логично ожидать, что в хабре вы разочаровались. Поэтому дам вам немного развернутой критики. Возможно вы задумаетесь об архитектуре своего кода и будете писать получше.
0) Почитайте www.phptherightway.com, там даже на русском есть
1) Код-стайл. У вас его нет. Где-то скобки на строке с оператором, где-то ниже. Отступы сбиты. Выберите один стиль (рекомендую PSR-2) и исходите из него.
2) Запросы к базе+PHP+HTML (который к тому же генерируется через echo)+Javascript в одном файле. Это невозможно дебажить и расширять. Если будет хоть какое-то усложнение логики, всё пропало. Проще будет выкинуть и переписать. Старайтесь держать работу с данными отдельно, бизнес-логику отдельно, шаблоны (даже если будете шаблонизировать через PHP (только без echo '<table>', пожалуйста!) — на первое время он неплохо с этим справится) отдельно, Javascript отдельно. По возможности избавляйтесь от onclick в тэгах.
3) Именование переменных. Дочитав до $d[$i]=$cd, я заплакал. Понять, что это значит, решительно невозможно. В итоге «самое интересное» (по вашим словам) осталось для меня недоступным.
4) Попробуйте класс DateTime для работы с датами, вам должно понравиться
5) Используйте подготовленные выражения, прекратите конкатенировать запросы. В данном конкретном примере инъекции не будет, т.к. вы делаете проверку через preg_match, но в жизни бывает всё значительно сложнее. Кстати, у вас ошибка вот тут: «AND enddate>=$fromdate». Не хватает кавычек в запросе. Забавно, что mysql воспримет это без выбрасывания ошибки, т.к. в выражении «AND enddate>=2014-09-01» он вычислит разность и выведет результат.
6) У вас при запросе скрипта через AJAX возвращается календарь вместе с тэгом script, после чего вы его innerHTML-ите. Когда я это понял, волосы встали дыбом. Это исключительное везение, что в ваших скриптах только функция переопределяется, да изменяется значение глобальных переменных (к счастью, тоже на правильные). Если бы у вас там было навешивание событий, к примеру, были бы дикие глюки.
Пожалуй хватит для начала. Постарайтесь, пожалуйста, писать чуть более с оглядкой на архитектуру. Вы сами поймёте, как это удобно и хорошо, когда ощутите, насколько меньше багов у вас получается.
Большое спасибо за конструктивную критику. Планирую в ближайшее время все исправить и надеюсь, эта статья кому-то поможет, потому что в свое время я не нашел подробной информации как сделать календарь событий. Поэтому и написал эту статью как мог. Вам спасибо, а всем остальным — нет! Потому что не написали почему им не понравилось и что для этого нужно сделать. Написать «фу, какая гадость...» я тоже могу
Вы поймите — плохого кода и начинающих программистов так много, что отвечая каждому внятно и конструктивно у опытных программистов просто не останется времени на написание хорошего кода. Вот поэтому у программистов очень ценится самообучение, изучение чужого кода и практик программирования, а так же самостоятельная работа над своими ошибками.

Статья же может помочь только вам — понять свои ошибки и постараться не допускать их в будущем, новичков, к сожалению, к статье подпускать нельзя — не понимая нюансов они растащат по своим проектам.
Sign up to leave a comment.

Articles