@Fell-x27, буду очень рад так как мне важно мнение каждого человека чтобы в будущем совершать меньше ошибок, а то и исключить из вообще. @Dimon2x уже некоторое время ищу инфу про MVC в сети но пока что внятного толкового урока для новичка не нашел. Вот к примеру даже взять этот https://m.habr.com/ru/post/150267/ в архиве очень много выскакивает ошибок поэтому , немогу полностью доверять данному автору. Хочеться учить сразу по правильном чтобы потом не переучиваться. @mkramer очень бы рад поэкспериментировать Laravel, Slim. Но если про MVC я хоть имею представление как оно все работает (но немогу сделать на практике) то про эти я вообще не слышел. Думаю для начала лучше сосредоточится на чем-то одном, а потом постепенно расширять горизонты)
@Fell-x27, @Dimon2x, @mkramer Ка так? У кого получилось зарегистрироваться с пустыми значениями? Где моя ошибка? https://ibb.co/PFdcKsw
Дим, пожалуйста, не лезь в менторы и не давай советы/ценные указания. Без обид, но тебе рано. @mainprofilemail, поехали. 1) 31 февраля, ну ты понял. 2) После регистрации я не хочу попадать на страницу входа. Я уже предоставил все данные для этого, система меня зарегала, она знает, что я - это я. Зачем мне еще и входить заново? Это раздражает, это не нужно. Просто сразу логинь человека, как только он зарегался. И это описано в ТЗ пятым пунктом. После регистрации или входа сразу должен появляться счетчик. 3) Открыл счетчик сразу в двух окнах. В одном разлогинился, в другом нажал +1. В итоге получил неавторизованный доступ к системе, оставшись в ней, параллельно вызвав ворнинги. Дебажь. Счетчик при этом продолжил работать. 4) По высоте форма не совсем по центру, кстати, но это мелочи. И попробуй отцентрировать ее не марджинами, а флексбоксом. 5) Делаем раз: Делаем два, сработало! Это по внешке. Далее, по коду: 0) Твоя версия пхп очень старая. Очень. Из-за этого тебе недоступны многие очень удобные и полезные фичи. Судя по этой вот штуке, твоя версия PHP - 5.2 максимум. Это очень плохо. И вообще, желательно без фреймворков. Даже для БД. Попробуй сам поработать с БД. Фреймворки - это круто, но ты должен понимать, что они делают, как и зачем. Значит, должен уметь обходиться без них. А иначе будешь как те хипстеры, которые "в совершенстве владеют JQuery", но понятия не имеют, как кодить на JS. Фреймворк должен экономить твое время, но не замещать собой пробел в знаниях и навыках. 1) PHP: $data = $_POST; Это, в общем-то не обязательно. Почти всегда можно напрямую адресоваться к $_POST, он уже пришел, он уже здесь. Если хочешь экспортировать из него данные, то делай это через фильтры. Это оч крутая и удобная штука. 2) Помнишь ошибку в пункте 3 в предыдущей секции? Вот ее источник: PHP: if(isset($data['do_counter'])){ в index.php Твоя задача - понять почему и исправить. Нет, в самой строчке нет ошибки. Думай шире. 3) PHP: if(password_verify($data['password'], $user->password)){ Молодец. 4) PHP: $result = '<div class="result result_door" >'.array_shift($errors).'</div>'; Какой смысл был накапливать массив ошибок, чтобы показать только одну? Бахнул бы уж implode(); Справедливо и для реги и для логина. 5) PHP: if(R::count('users', "login = ?", array($data['login'])) > 0){ Подумай, как еще можно решить эту задачу, не делая выборку на наличие пользователя. То, как сделал ты - не ошибка. Но можно изящнее. Это проверка на знание БД и MySQL в частности. 6) Это не ошибка ни разу, все правильно сделано, но... PHP: $dayArray = range(1, 31); Впервые вижу новичка в пхп, юзающего рэндж. Признайся - раньше кодил на питоне? 7) PHP: ($day == @$data['day']) ? 'selected' : ''; Первое - @ == зло, постарайся не пользоваться ими и делать явные проверки. 8) PHP: $formattedMonthArray = array( "1" => "01", "2" => "02", "3" => "03", "4" => "04", "5" => "05", "6" => "06", "7" => "07", "8" => "08", "9" => "09", "10" => "10", "11" => "11", "12" => "12", ); Ну вот, а тут забыл про range и решил сделать китайский код.. А потом, в комментах оставляешь строку, которая добивает нули на выводе Почему бы не бахнуть range, а после воспользоваться str_pad+ом, раз ты уже его в коде обозначил? 9) PHP: <?php echo @$data['password'];?> На php7+ это можно сделать без echo и без собаки. Вот так: PHP: <?= $data['password'] ?? '' ?> 10) В данный момент у тебя в проекте аж 3 точки входа. index.php, signup.php, logout.php. В реальном проекте ты с ума сойдешь, если на каждое действие у тебя будет по отдельной точке. Потому что их могут быть многие десятки. И в каждой будет одинаковый инициализирующий код. В идеале этого быть не должно. Должна быть одна и только одна точка входа index.php, в которой скрипт решает, куда перенаправить вызов, в зависимости от входящих данных. Исключение - отдельные точки входов и шлюзы для AJAX, но это пока за бортом оставляем. Хотя, в идеале, AJAX-ы тоже должны идти на index.php, а там уже разруливаться. Это не значит, что index.php должен вмещать в себя содержимое остальных файлов. Нет. Файлов может быть хоть миллион. А точка входа - одна. А остальные файлы должны быть недоступны при прямом вызове. Резюме: Отдельно хочу отметить простоту твоего кода. Это прекрасно. Без лишних нагромождений, без изощрений, решил простую задачу простым кодом. Читабельность, понятные имена переменных и методов. Это хорошо, тут ты молодец. В остальном же - критических проблем, в общем-то нет. Есть баги. Ты их исправь. Есть мелкие недочеты, но это не ошибки, а вкусовщина. Из минусов - очень старая версия PHP. Переходи на PHP7+. Если сидишь под виндой на денвере - выкинь его и поставь хотя бы опенсервер. В идеале - виртуалочка->линукс->ручками собранное веб-окружение. Все равно тебе придется рано или поздно с этим столкнуться. Все равно на сервере будет линукс. Собсно вот. --- Добавлено --- Кто тут по-твоему самый злостный хацкер? --- Добавлено --- А еще у тебя там XSS можно протолкнуть в логин. Что я удачно сделал. Это относим к проблемам безопасности - ты не обрабатываешь выводимые данные. Пруф в аттаче. Логин PHP: <script>alert('HACKED!!!');</script> , пароль 123
спасибо за столь обширный ответ и ряд советов по улучшению кода. Я внимательно считаюсь во все советы, подумаю и исправлю существующие ошибки. После обязательно отпишусь и скину ссылочку на исправленный проект или интересующий вопрос P.S.: у меня смартфон на Android
Не хочу показаться бестактным, но...что ты этим хотел сказать в контексте виртуалки с линуксом? Еще у тебя роутер на линуксе, еще у тебя телевизор, скорее всего, на линуксе, даже если бы у тебя был айфон, а не аднройд, то это тоже unix-based операционка. Только при чем это, когда речь идет о сборке дев-окружения?
@Fell-x27 О том что весь написанный ранее код был через телефон и php тоже учу через телефон у меня нет компа)))
Однако... Ну....даж хз. Материальные проблемы? Печально, но решаемо. Как вариант - купи Raspberry Pi в комплекте с картой памяти и кабелями за 3.5 килорубля на али. Будет тебе комп достаточный для обучения. Ну...еще клавомышь нужна. Комп же. Втыкать можно через hdmi в любой телек не старше 10-13 лет
Мне кажется я тебя немного рассмешу следующим ..... У меня нет телека P.S.: Возможность купить как бы есть просто собираем с женой на свою квартиру)))
Да ну брось, тут смешиться нечем. Нет и нет, дело-то хозяйское. В общем, я тебя понял. Но блин...тернистый ты путь обучения выбрал. Ох тернистый. С мобилки ж неудобно кодить ппц. Ну хотя бы планшет. Планшеты на рынке есть очень дешевые, за те же 3-5 тысяч. Но диагоняль уже от 7 дюймов. С этим уже можно что-то пытаться кулибить.
@mainprofilemail, компы на avito от 2500 Не сильно повлияет на сбор денег на квартиру. Не скажу, что на таком компе будет комфортно работать, но возможно.
Покачто как-то так, а там посмотрим может возьму какой-то ноут. А то насчёт неудобства я с тобой соглашусь. Ещё печатать это одно, а вот найти подходящий сервер и все остальное это для меня стало целым испытанием длинною в месяц (может больше) --- Добавлено --- Спасибо Бро)) Загляну как будет свободная минутка)))
@Fell-x27 Всем привет я вернулся, компа у меня так и нету поэтому скоро мой Willey Fox задаст жару))) Времени у меня немногого но в ближайшее время постараюсь выполнить следующий этап устранения багов в задании
Слушай, ну найти на avito б/у-шный комп за копейки вообще не проблема! Наверное ты недостаточно хочешь.
Всем привет! Всю тему не читал, первые несколько страниц. Решил попробовать. Вчера наваял, вот - https://github.com/AndreyGel/test
@resident01, выложи куда-нибудь, чтоб @Fell-x27 мог своё крутое хакерское конфу опробовать По коду от меня, что сразу бросилось: 1. Проверки на кривую дату нету 2. Странная идея - писать число в базу только по логауту. А если он сам собой произойдёт (я пощёлкал и закрыл окно, к примеру, а не нажимал кнопку выход) --- Добавлено --- Также не проверяешь на сервере, на пустые логин и пароль. Да, ты в вёрстке расставил required, но заполнить форму в браузере - это не единственный способ её тебе прислать.