За последние 24 часа нас посетили 17496 программистов и 1296 роботов. Сейчас ищут 1809 программистов ...

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

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

  1. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    1) Ввод даты. Та же проблема, что и у всех. Народ либо использует строку "введи по шаблону", что не правильно и ставит пользователя в тупик, оставляя маневр для ошибки, либо HTML5-компонент даты, который до сих пор не стандартизирован, имеет в каждом браузере свой внешний вид и логику взаимодействия, предоставляет разный пользовательский опыт, а, самое главное, на некоторых браузерах может вообще не поддерживаться и тупо отображаться как строка для ввода текста.

    Дата делается тремя выпадающими списками. День, месяц, год. Проверено. Работает.

    2)
    Хэширование и шифрование - разные термины. Шифрование обратимо. Хэширование - нет.

    3)
    PHP:
    1. $login = htmlspecialchars(trim($_POST['login']));
    2.         $pass = htmlspecialchars($_POST['pass']);
    Преобразование данных желательно делать перед выводом, но, в случае с логином, допустимо и при сохранении. А вот преобразование в пароле не нужно вовсе, он все равно будет захеширован, но преобразованием ты вносишь в него изменения. Таким образом, правильных паролей становится уже два. Это плохо.

    4) Проверка на существование логина тоже может быть реализована проще. Просто сделай логин уникальным индексом и сразу пытайся создать учетную запись. Бд вернула успех операции? Окей. Бж вернула ошибку нарушения уникальности индекса? Упс, логин занят. При этом не будет лишних запросов. Я об этом тоже многократно писал.

    5)
    PHP:
    1.  $insert = $db->query("INSERT INTO `user` (`login`,`pass`,`bdate`,`schet`) VALUES ('$login','$pass','$bdate','0')");
    Окей. Логин ты экранировал. Пароль ты захешировал. Ну а bdate-то почему оставил в чистом виде из $_POST? :) Думаешь, если у тебя на странице компонент, позволяющий ввести только дату, то подсунуть тебе левые данные не получится? Однажды ты продублируешь этот код, но без "дурацких фильтров на 150-летний возраст", просто забыв о них, и влетишь по-полной. Связность кода должна быть минимальной.

    6)
    PHP:
    1. header("Location: /index.php");
    Всегда после перенаправлений сразу ставь die или exit. Если ты решил сделать перенаправление, то остальной код уже не важен. Важно как можно быстрее отдать браузеру ответ с этим заголовком. Это ведь перенаправление, все, что будет сделано потом, будет просто отброшено.

    7) На 100 и 135 строке словилось дежавю. Почему бы не вынести повторяющийся код в функцию?

    8) 143 строка:
    PHP:
    1. header("Location: /index.php");
    2.             ifAuth($login, $db);
    А потом смотрим в функцию ifAuth, 19 строка:
    PHP:
    1. header("Location: /index.php");
    Во-первых, ты вызываешь какую-то логику после перенаправления, это не правильно. Перенаправление должно быть точкой остановки. После него только die или exit. Вся логика должна быть вызвана до него. Так принято. Так сразу понятно, что к чему.
    Во-вторых, у тебя перенаправление выбрасывается в функции, вызываемой после перенаправления. Складывается впечатление, что ты не совсем понимаешь, что это и как работает, и просто пишешь везде на всякий случай. Так делать не надо. Надо точно понимать, что у тебя творится. Если встречается неоднозначность логики, значит нужен рефакторинг, чтобы разделить логические процессы.

    На самом деле, все обработки $_POST можно вынести в одну секуию if(!empty($_POST)){}, внутри которой все сортировать и дергать нужные функции, а потом радостно все прихлопывать одним-единственным перенаправлением, потому как сейчас код несколько хаотичен.

    9) Названия. Имя функции "ifAuth" ничего нам о ней не говорит. Самодокументированный код должен быть очевиднее. Во-первых, функция - это действие. Названия функций должны быть глаголами или отглагольными словами. Во-вторых они должны описывать ее суть, а не условия, при которых она вызывается. Название типа "check_counter" уже пошло бы лучше. Хотя, в твоем случае функцию вообще следует разделить на функции "show_counter" и "increment_counter". Заметь, я просто написал названия, но уже понятно, что они должны делать. Ну и да, в php принят snake_case, а не camelCase. Даже если второй тебе привычнее. Что поделать. Я вот тоже в php пишу снейком, а в JS кемелом. Жизнь боль.
     
    san4ez нравится это.
  2. san4ez

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

    С нами с:
    13 авг 2016
    Сообщения:
    331
    Симпатии:
    47
  3. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.584
    Симпатии:
    1.761
    В PSR-ах для функций вроде верблюд.
     
  4. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Ну snake_case насколько я видел по старой документации Zend'a использовался раньше пока неймспейсы не ввели.Сейчас же если брать те же самые фреймворки c PSR4 autoload я слабо представляю использование snake_case.
     
    mahmuzar нравится это.
  5. san4ez

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

    С нами с:
    13 авг 2016
    Сообщения:
    331
    Симпатии:
    47
    вообще не читал про стандартизацию =) сейчас вот читаю... смутил пункт в psr-2:
    "Для оформления отступов ДОЛЖНЫ использоваться четыре пробела (но не знак табуляции)."
    А чем это лучше таба?
     
  6. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Оно конечно круто, мол, у нас взрослый язык, давайте писать кемлом как в шарпах, яве или тех же плюсах, даже JS верблюдный, а мы что не люди? Только сам php при этом вдоль и поперек snake_case-овый. Ну ок, не на 100%. Процентов 70 в нем змеей написано, а еще 30% - тупосклеиваниемсловбезверблюда. В сочетании с PSR получаем стилевой венигрет. По мне, лучше один стиль, родной, насколько это возможно, для языка, чем режущая глаза мешанина.

    Это мое ИМХО, разумеется.
    --- Добавлено ---
    Пробел имеет ширину в 1 символ. Таб же трактуется каждым редактором так, как ему угодно. Плюс, при навигации стрелочками начинаются безумные скачки. А еще есть холивар, мол, нажать один раз кнопку проще, чем четыре. Однако, в современных хороших редакторах кода и IDE такой проблемы нет, потому что:
    1) В настройках обязательно есть пунктик о том, как интерпретировать табы.
    2) В зависимости от этой настройки они автоматом конвертятся в то, что нужно.

    Я вот в phpStorm для выставления отступов пользуюсь сочетанием alt+F8, которое автоматом выравнивает код жмакаю TAB. Но при этом шторм сдвигает строку на 4 пробела. SHIFT+TAB сдвигает строку на 4 пробела в обратную сторону. И любой код с табами будет сконвертирован в код с пробелами. И волки сыты и овцы целы. И все, пользуйся на здоровье табами, но не имей с того головняк :) Ессно, это все в настройках можно подкручивать на свой вкус, если есть необходимость.
     
    san4ez нравится это.
  7. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    В нетбинсе то же самое. Хотя после того же npp непривычно, т.к. там таб - это таб. И он не преобразуется в 4 пробела.
     
  8. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @SamyRed раньше настройка была, сейчас убрали?
     
  9. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Нет,не убирали.Там есть настройки Tab.
     
  10. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @alexblack а ок. Просто давно не пользовал нпп. Было бы забавно такую простую и полезную опцию убрать из такого классного редактора.
     
  11. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Да кому оно надо, убирать это. Это даже в Brackets есть. А брекеты - это просто хипстерский Notepad++, не более.
     
  12. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нафиг они пошли, старпёры ебАные
    Это ж требование из прошлой эпохи.
     
  13. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Но тем не менее у тебя штормы по дефолту конвертируют табы в пробелы. На самом деле, в таком разрезе вообще пофигу.
     
    SamyRed нравится это.
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    и господь их храни! потому, что я юзаю два пробела, а не четыре. И если у меня в исходнике табы, то я его вижу так, как я люблю - с двумя пробелмаи, и ты видишь его так, как ты любишь - с четырьмя! Да хоть с десятью даже! И все довольны.

    Более того, скобка после функции/класса/метода и вот вся эта хрень - всё это должно рисоваться не меняя исходник. Рисоваться, как HTML - так, как тебе нравится больше. А не переформатировать к чертям исходник каждый раз, чтобы показать скобочку сообразно локальным настройкам.
     
    Fell-x27 нравится это.
  15. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Топик вроде про "быстро освоить" а обсуждаются дебри какие-то, даты, до табов дело дошло (табы рулят, холивар понеслася)

    Чтоб просто освоить РНР надо чётко ставить перед собой задачу. Если есть задача "сделать регистрацию юзера" достаточно поставить эту задачу более чётко "нужен скрипт добавляющий в базу юзеров одну запись" когда задачи будут ставиться максимально чётко, тогда и освоится РНР...

    (Куда сложнее понять нужна ли регистрация юзеров, её пихают уже везде где не лень, как дань моде, вот отказаться от оной, это искусство...)
     
  16. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну т.е. потрахаться три вечера это уже не быстро? Это типа чета затянуто как-то? Надо чтобы на ютубчик щка, видосик пщю - пущь-пущь-пущь - теперь ты пхп кодер!
     
  17. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Если бы три вечера по теме, это было бы быстро, а посторонние темы типа табов и пробелов, это топтание на месте...
     
  18. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну табы мы обсудили в качестве переменки.
     
  19. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    чья бы 6лядь корова мычала :D я помню как ты в залупу полез из-за того что у меня блок открывается следующей строкой а тебе видишь ли { на этой же нужен. Теперь тебе еще и табы вместо пробелов подавай. Ты только и делаешь, что требуешь, эгоист паршивый :cool: Тебе похоже принципиально именно бороться с системой
     
  20. Mal4uk

    Mal4uk Новичок

    С нами с:
    15 фев 2017
    Сообщения:
    5
    Симпатии:
    1
  21. san4ez

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

    С нами с:
    13 авг 2016
    Сообщения:
    331
    Симпатии:
    47
    ну по внешнему виду несоответствие пунктам 1 (должна быть в центре экрана), 4 (почему только с 1920 года?:)), 5 (вместо числа 0 пишет вы зареганы), и напиши код всего этого тут
    --- Добавлено ---
    и при входе над +1 и выходом пустота, пока не начнешь кликать по +1 =)
    --- Добавлено ---
    и кстати. помоему все должно быть в одной странице (index.php) или я ошибаюсь?))
     
  22. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    подъебал :D

    короче я считаю, что IDE должна к исходнику относиться как браузер к коду html. и показывать его так как мне нравится, а форматирование не трогать, пока я конкретно курсор между скобками не вкрячу и по энтеру не жмякну. Такое моё мнение.
     
  23. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Не знаю, убрали ли, но, я так понял, что правильно всё таки 4 пробела? Так что меня и так устраивает.
     
  24. Mal4uk

    Mal4uk Новичок

    С нами с:
    15 фев 2017
    Сообщения:
    5
    Симпатии:
    1
    Уважаемые модераторы ведь вы модераторы и понимаете что это не та тема что бы тут обсуждать табуляцию!
     
    mahmuzar нравится это.
  25. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768