За последние 24 часа нас посетили 22720 программистов и 1183 робота. Сейчас ищут 803 программиста ...

Как быстро освоить PHP

Тема в разделе "PHP для новичков", создана пользователем fenix_63, 16 мар 2015.

  1. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    mkramer нравится это.
  2. mainprofilemail

    mainprofilemail Активный пользователь

    С нами с:
    14 апр 2018
    Сообщения:
    101
    Симпатии:
    2
    @Fell-x27, буду очень рад так как мне важно мнение каждого человека чтобы в будущем совершать меньше ошибок, а то и исключить из вообще.

    @Dimon2x уже некоторое время ищу инфу про MVC в сети но пока что внятного толкового урока для новичка не нашел. Вот к примеру даже взять этот https://m.habr.com/ru/post/150267/ в архиве очень много выскакивает ошибок поэтому , немогу полностью доверять данному автору. Хочеться учить сразу по правильном чтобы потом не переучиваться.

    @mkramer очень бы рад поэкспериментировать Laravel, Slim. Но если про MVC я хоть имею представление как оно все работает (но немогу сделать на практике) то про эти я вообще не слышел. Думаю для начала лучше сосредоточится на чем-то одном, а потом постепенно расширять горизонты)
     
    #652 mainprofilemail, 30 янв 2019
    Последнее редактирование: 30 янв 2019
  3. mainprofilemail

    mainprofilemail Активный пользователь

    С нами с:
    14 апр 2018
    Сообщения:
    101
    Симпатии:
    2
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Дим, пожалуйста, не лезь в менторы и не давай советы/ценные указания. Без обид, но тебе рано.

    @mainprofilemail, поехали.
    1)

    upload_2019-1-30_22-8-32.png
    31 февраля, ну ты понял.

    2) После регистрации я не хочу попадать на страницу входа. Я уже предоставил все данные для этого, система меня зарегала, она знает, что я - это я. Зачем мне еще и входить заново? :) Это раздражает, это не нужно. Просто сразу логинь человека, как только он зарегался. И это описано в ТЗ пятым пунктом. После регистрации или входа сразу должен появляться счетчик.

    3) Открыл счетчик сразу в двух окнах. В одном разлогинился, в другом нажал +1. В итоге получил неавторизованный доступ к системе, оставшись в ней, параллельно вызвав ворнинги. Дебажь.

    upload_2019-1-30_22-42-46.png

    Счетчик при этом продолжил работать.
    4) По высоте форма не совсем по центру, кстати, но это мелочи. И попробуй отцентрировать ее не марджинами, а флексбоксом.
    5) Делаем раз:
    upload_2019-1-30_22-51-59.png
    Делаем два, сработало!
    upload_2019-1-30_22-52-57.png

    Это по внешке.

    Далее, по коду:
    0) Твоя версия пхп очень старая. Очень. Из-за этого тебе недоступны многие очень удобные и полезные фичи.
    Судя по этой вот штуке, твоя версия PHP - 5.2 максимум. Это очень плохо.
    И вообще, желательно без фреймворков. Даже для БД. Попробуй сам поработать с БД. Фреймворки - это круто, но ты должен понимать, что они делают, как и зачем. Значит, должен уметь обходиться без них. А иначе будешь как те хипстеры, которые "в совершенстве владеют JQuery", но понятия не имеют, как кодить на JS. Фреймворк должен экономить твое время, но не замещать собой пробел в знаниях и навыках.

    1)
    PHP:
    1. $data = $_POST;
    Это, в общем-то не обязательно. Почти всегда можно напрямую адресоваться к $_POST, он уже пришел, он уже здесь. Если хочешь экспортировать из него данные, то делай это через фильтры. Это оч крутая и удобная штука.

    2) Помнишь ошибку в пункте 3 в предыдущей секции? Вот ее источник:
    PHP:
    1. if(isset($data['do_counter'])){
    в index.php
    Твоя задача - понять почему и исправить. Нет, в самой строчке нет ошибки. Думай шире.

    3)
    PHP:
    1. if(password_verify($data['password'], $user->password)){
    Молодец.

    4)
    PHP:
    1.  $result = '<div class="result result_door" >'.array_shift($errors).'</div>';
    Какой смысл был накапливать массив ошибок, чтобы показать только одну? :)
    Бахнул бы уж implode();
    Справедливо и для реги и для логина.

    5)
    PHP:
    1. if(R::count('users', "login = ?", array($data['login'])) > 0){
    Подумай, как еще можно решить эту задачу, не делая выборку на наличие пользователя. То, как сделал ты - не ошибка. Но можно изящнее. Это проверка на знание БД и MySQL в частности.

    6)
    Это не ошибка ни разу, все правильно сделано, но...
    PHP:
    1. $dayArray = range(1, 31);
    Впервые вижу новичка в пхп, юзающего рэндж. Признайся - раньше кодил на питоне? ;)

    7)
    PHP:
    1. ($day == @$data['day']) ? 'selected' : '';
    Первое - @ == зло, постарайся не пользоваться ими и делать явные проверки.

    8)
    PHP:
    1. $formattedMonthArray = array(
    2.                     "1" => "01", "2" => "02", "3" => "03", "4" => "04",
    3.                     "5" => "05", "6" => "06", "7" => "07", "8" => "08",
    4.                     "9" => "09", "10" => "10", "11" => "11", "12" => "12",
    5.                 );
    Ну вот, а тут забыл про range и решил сделать китайский код..
    А потом, в комментах оставляешь строку, которая добивает нули на выводе :)
    Почему бы не бахнуть range, а после воспользоваться str_pad+ом, раз ты уже его в коде обозначил?

    9)
    PHP:
    1. <?php echo @$data['password'];?>
    На php7+ это можно сделать без echo и без собаки. Вот так:
    PHP:
    1. <?=  $data['password'] ?? '' ?>
    10) В данный момент у тебя в проекте аж 3 точки входа. index.php, signup.php, logout.php. В реальном проекте ты с ума сойдешь, если на каждое действие у тебя будет по отдельной точке. Потому что их могут быть многие десятки. И в каждой будет одинаковый инициализирующий код. В идеале этого быть не должно. Должна быть одна и только одна точка входа index.php, в которой скрипт решает, куда перенаправить вызов, в зависимости от входящих данных. Исключение - отдельные точки входов и шлюзы для AJAX, но это пока за бортом оставляем. Хотя, в идеале, AJAX-ы тоже должны идти на index.php, а там уже разруливаться. Это не значит, что index.php должен вмещать в себя содержимое остальных файлов. Нет. Файлов может быть хоть миллион. А точка входа - одна. А остальные файлы должны быть недоступны при прямом вызове.

    Резюме:
    Отдельно хочу отметить простоту твоего кода. Это прекрасно. Без лишних нагромождений, без изощрений, решил простую задачу простым кодом. Читабельность, понятные имена переменных и методов. Это хорошо, тут ты молодец. В остальном же - критических проблем, в общем-то нет. Есть баги. Ты их исправь. Есть мелкие недочеты, но это не ошибки, а вкусовщина. Из минусов - очень старая версия PHP. Переходи на PHP7+. Если сидишь под виндой на денвере - выкинь его и поставь хотя бы опенсервер. В идеале - виртуалочка->линукс->ручками собранное веб-окружение. Все равно тебе придется рано или поздно с этим столкнуться. Все равно на сервере будет линукс.

    Собсно вот.
    --- Добавлено ---
    Кто тут по-твоему самый злостный хацкер?
    [​IMG]
    --- Добавлено ---
    А еще у тебя там XSS можно протолкнуть в логин. Что я удачно сделал. Это относим к проблемам безопасности - ты не обрабатываешь выводимые данные. Пруф в аттаче.
    Логин
    PHP:
    1. <script>alert('HACKED!!!');</script>
    , пароль 123
     

    Вложения:

    Walk и mainprofilemail нравится это.
  5. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Раздражает? Да некоторых это конкретно выбешивает!!!
     
  6. mainprofilemail

    mainprofilemail Активный пользователь

    С нами с:
    14 апр 2018
    Сообщения:
    101
    Симпатии:
    2
    спасибо за столь обширный ответ и ряд советов по улучшению кода. Я внимательно считаюсь во все советы, подумаю и исправлю существующие ошибки. После обязательно отпишусь и скину ссылочку на исправленный проект или интересующий вопрос

    P.S.: у меня смартфон на Android :D
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Это не для тебя было про Laravel.
     
  8. mainprofilemail

    mainprofilemail Активный пользователь

    С нами с:
    14 апр 2018
    Сообщения:
    101
    Симпатии:
    2
    :)
     
  9. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @mkramer ого поздравляю с повышением:)
     
    mkramer нравится это.
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Не хочу показаться бестактным, но...что ты этим хотел сказать в контексте виртуалки с линуксом? Еще у тебя роутер на линуксе, еще у тебя телевизор, скорее всего, на линуксе, даже если бы у тебя был айфон, а не аднройд, то это тоже unix-based операционка. Только при чем это, когда речь идет о сборке дев-окружения?
     
  11. mainprofilemail

    mainprofilemail Активный пользователь

    С нами с:
    14 апр 2018
    Сообщения:
    101
    Симпатии:
    2
    @Fell-x27
    О том что весь написанный ранее код был через телефон и php тоже учу через телефон у меня нет компа)))
     
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Однако... Ну....даж хз. Материальные проблемы? Печально, но решаемо. Как вариант - купи Raspberry Pi в комплекте с картой памяти и кабелями за 3.5 килорубля на али. Будет тебе комп достаточный для обучения. Ну...еще клавомышь нужна. Комп же. Втыкать можно через hdmi в любой телек не старше 10-13 лет
     
  13. mainprofilemail

    mainprofilemail Активный пользователь

    С нами с:
    14 апр 2018
    Сообщения:
    101
    Симпатии:
    2
    Мне кажется я тебя немного рассмешу следующим ..... У меня нет телека :)

    P.S.: Возможность купить как бы есть просто собираем с женой на свою квартиру)));)
     
  14. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Да ну брось, тут смешиться нечем. Нет и нет, дело-то хозяйское.

    В общем, я тебя понял. Но блин...тернистый ты путь обучения выбрал. Ох тернистый. С мобилки ж неудобно кодить ппц. Ну хотя бы планшет. Планшеты на рынке есть очень дешевые, за те же 3-5 тысяч. Но диагоняль уже от 7 дюймов. С этим уже можно что-то пытаться кулибить.
     
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    @mainprofilemail, компы на avito от 2500 :) Не сильно повлияет на сбор денег на квартиру. Не скажу, что на таком компе будет комфортно работать, но возможно.
     
  16. mainprofilemail

    mainprofilemail Активный пользователь

    С нами с:
    14 апр 2018
    Сообщения:
    101
    Симпатии:
    2
    Покачто как-то так, а там посмотрим может возьму какой-то ноут. А то насчёт неудобства я с тобой соглашусь. Ещё печатать это одно, а вот найти подходящий сервер и все остальное это для меня стало целым испытанием длинною в месяц (может больше)
    --- Добавлено ---
    Спасибо Бро)) Загляну как будет свободная минутка)))
     
  17. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    учиться разрабатывать без компа, это как учиться лазить по канату без каната.
     
    Walk и Dimon2x нравится это.
  18. karmay

    karmay Активный пользователь

    С нами с:
    9 ноя 2017
    Сообщения:
    180
    Симпатии:
    18
    Адрес:
    Н.Новгород
    MVC для новичка можно тут посмотреть
     
  19. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @Fell-x27 запускай свою школу
     
  20. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Я много раз уже говорил - у меня нет столько свободного времени.
     
  21. mainprofilemail

    mainprofilemail Активный пользователь

    С нами с:
    14 апр 2018
    Сообщения:
    101
    Симпатии:
    2
    @Fell-x27 Всем привет я вернулся, компа у меня так и нету:( поэтому скоро мой Willey Fox задаст жару:)))) Времени у меня немногого но в ближайшее время постараюсь выполнить следующий этап устранения багов в задании
     
  22. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Слушай, ну найти на avito б/у-шный комп за копейки вообще не проблема! Наверное ты недостаточно хочешь.
     
    Fell-x27 и TeslaFeo нравится это.
  23. resident01

    resident01 Новичок

    С нами с:
    13 дек 2018
    Сообщения:
    4
    Симпатии:
    0
    Всем привет! Всю тему не читал, первые несколько страниц. Решил попробовать.
    Вчера наваял, вот - https://github.com/AndreyGel/test
     
  24. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    @resident01, выложи куда-нибудь, чтоб @Fell-x27 мог своё крутое хакерское конфу опробовать :)

    По коду от меня, что сразу бросилось:
    1. Проверки на кривую дату нету
    2. Странная идея - писать число в базу только по логауту. А если он сам собой произойдёт (я пощёлкал и закрыл окно, к примеру, а не нажимал кнопку выход)
    --- Добавлено ---
    Также не проверяешь на сервере, на пустые логин и пароль. Да, ты в вёрстке расставил required, но заполнить форму в браузере - это не единственный способ её тебе прислать.
     
  25. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @resident01, больше похоже не на наваял, а сваял откуда-то частично или всё разом.