Ответы пользователя по тегу PHP
  • Как правильно сформировать логическое условие в php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых - вы сравниваете строки, что уже хреново.
    Во вторых - в правилах выставления времени уже должны быть ограничения, например что время закрытия больше времени открытия, так же с обедом, и еще надо проверить что обед попадает между закрытием и открытием.
    Ну и когда вы приведете все условия в нормальный вид можно думать о логике, которая по факту проще пареной репы... ну и $work_time по уму должно быть $work_start_time, то же самое с $dinner_time.
    Если все еще не ясна логика:
    $work_time = [
      'work_start_time'=>'09:30',
      'work_end_time'=>'18:20',
      'dinner_start_time'=>'13:30',
      'dinner_end_time'=>'14:00',
    ];
    $answer = 'Closed';
    $date = str_replace(':','',$work_time);
    $now = date('Hi');
    if( $date['work_start_time'] <= $now && $now <= $date['work_end_time'] ) $answer = 'Now we open';
    if( $date['dinner_start_time'] <= $now && $now <= $date['dinner_end_time'] ) $answer = 'Now we on break';
    echo $answer;
    Ответ написан
    3 комментария
  • Как запускать код для всех страниц статического сайта?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Есть код который надо запустить, перед тем как отдать страницу. Сервер Апач...
    Возможно можно в htaccess правило прописать или например через index.php отдавать страницы, но они уже созданы...
    В хтаксесе прописываете переадресацию всех запросов на индекс.пхп (т.н. единая точка входа, нужен модуль апача mod_rewrite), далее в индексе обрабатываете $_SERVER["REQUEST_URI"], достаете путь до хтмл файла и делаете readfile или include... Profit.
    Ответ написан
    1 комментарий
  • Как распознать что сайт пытаются взломать?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Так это классическая работа для fail2ban. Настраиваете на повторяющиеся 404 и спите спокойно...
    Ответ написан
    Комментировать
  • Не работает php код?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Логи смотри, ну или включи вывод ошибок.
    echo('Это имя пользователя уже занято.');
    header('Location: register.php'); // Возврат на форму регистрации
    Здесь стопудоф будет лажа, так как хеадер так не отправляется. Почему - учим матчасть. Собсно в логах это будет отражено.
    Ответ написан
  • Какой самый лёгкий и безопасный способ держать пользователя авторизованным?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Опять не подходит потому что куки могут украсть.
    Откуда вы такие специалисты по безопасности беретесь?..

    Вопрос остаётся - как реализовать нормальный и безопасный способ для такой функции, чтобы больше не приходилось использовать другие варианты после каждой очередной жалобы на взлом?
    Взлом через уведенную куку входит в топ 5 малореальных сценариев взлома, если у вас есть хоть какая-то защита от XSS.

    Хранить IP последнего входа в аккаунт? Идея неплохая, но если каким-то магическим образом БД взломают, то все айпи попадут нехорошим людям.
    Оу, вас это больше всего расстраивает? Учитывая что 80% траффика сейчас идет через мобильные сети, айпи будет разниться при каждой сессии авторизации. И в данном случае вероятность такого взлома вы почему-то оцениваете практически как "магию", в то время как доступ к кукам пользователя у вас на уровне "ну, это точно случится, и скорее всего раньше, чем позже, любой может там гулять как у себя дома"...
    Ответ написан
    2 комментария
  • Как лучше хранить данные при пошаговой регистрации?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Всем привет. Хочу сделать пошаговую регистрацию на сайте. Как бы это сделать правильнее?
    Нет рецепта для общего случая. Всегда есть нюансы, если вы делаете что-то чуть в сторону от классики.

    1. После каждого шага сохранять в БД? Много запросов бессмысленных
    Ого, много это сколько? И почему бессмысленных? Вы же осмысленные данные туда пишете?

    У кого, какое мнение? Где какие подводные камни/нюансы?
    Мнение: С таким описанием нихрена не посоветуешь. По конкретным шагам можно что-то обсуждать.
    В целом же: Если первый шаг позволяет ввести все данные необходимые для входа в аккаунт, то писать надо в бд, ну и соответственно выслать письмо с подтверждением. В бд можно писать так же стадию прохождения. Если остальные пункты не являются критическими для функционала, можно предлагать при следующем логине дозаполнить данные, основываясь на записанном номере стадии. Ну или просот сразу перекидывать на нужную фазу, если она является необходимой.
    Ответ написан
    Комментировать
  • Почему не добавляется в базу данных информация с формы?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    $q = "INSERT INTO post(author, date_p, text_p) VALUES ('$author', '$datep', '$text_content')"; 
    //  ";" в одиночных запросах не ставится, а текстовые значения обрамляются кавычками
    var_dump($q); //смотрим глазками, проверяем в консоли
    $q = "INSERT INTO post(author, date_p, text_p) VALUES (?, ?, ?)"; 
    //никогда не лезем в бд без подготовленных выражений!
    $st = $pdo->prepare($q);
    $sth->execute([$author, $datep, $text_content]);
    Ответ написан
    1 комментарий
  • Не работает return PHP. Ничего не выводит на экран, что делать?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Мне нужно что-бы функция вернула корни уравнения в виде массива.
    Она возвращает

    Однако я получаю пустоту.
    Однако не получаете

    Почему?
    Скорее всего вы подразумевали не "получение" а "вывод". Но никакого вывода на экран вы не используете.

    Не работает return PHP. Ничего не выводит на экран, что делать?
    Формально ответ - по тому что "получение"/"возвращение" и "вывод" абсолютно разные вещи.
    Ответ написан
    Комментировать
  • Какие вещи нужно изучить чтобы подготовить себя к работе с Highload проектами?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Хайлоад это не какой-то особенный тип проекта, это все обычные проекты, но с объемом "туда-сюдирования" данных выше, чем тянул "прошлый сервер", когда проект был еще не хайлоад. В 90% случаев это выражается в росте количества запросов к бд, которая либо становится слаба по железу, либо вылазят косяки в запросах, написаных абы как, включая отсутствие индексов и кривую архитектуру.

    Что делается для "хайлоадинга"?
    1) Меняются сервера на помощнее, но это больше к админам обычно.
    2) Выявляются узкие места, в подавляющем большинстве случаев это либо обращения к бд, либо работа со сторонними сервисами, а-ля АПИ фейсбука и все такое.

    Как разгонять именно такие затыки 2 варианта - есть 3 пути:
    1) Оптимизация. Все что возможно ускорить - ускоряется, находятся самые тормознутые запросы, прогоняются через explain, переписываются, тюнятся, индексируются до состояния максимальной производительности.
    2) Кэширование. Обычно используют кей-валуе инмемори хранилища а-ля мемкеш и редис, и результаты запросов часто используемых, но не часто обновляемых данных пишутся в кэш. Время жизни настраивается в зависимости от необходимой актуализации. По идее на высоких нагрузках даже кэш с времением жизни 5-10 секунд может в разы снизить нагрузку на сервера.
    3) Иногда стандартных средств и инструментов не достаточно, и нужно искать какие-то новые инструменты, например переходить на сфинкс, так как фултекстсерч не вывозит. Или большие объемы данных идут на запись, и стандартной пропускной способности бд уже не хватает и нужно что-то типа систем хранения логов, или наоборот, аналитические бд по типу кликхауса...

    Короче - все то же самое что и в стандарте, только оттюнено и обмазано кэшами и инструментами чуть сложнее мускуля...
    Ответ написан
    Комментировать
  • Некорректное поведение кэша сайта?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Я тут ради интереса глянул первый файл в гите. Увидел что у вас логин пароль и хэш лежит в куках. Понял что в принципе смысла дальше что-либо смотреть нет.

    На случай если вы что-то конкретное будете спрашивать, а не приводить юзекейсы и простыни кода на гитхабе в купе с роликами на ютубе:
    Определите проблему с точностью до куска кода, помещающегося в 10-20 строк.
    Опишите что должно быть и что получается
    По необходимости дайте дампы переменных или уточните запрашиваемые детали.

    По коду - ваш велосипед с авторизацией выглядит как очень квадратноколесый, чем это обусловлено - не понятно, то ли намеренная попытка изобрести что-то не такое как у всех, либо недостатком знаний и заменой их на собственные измышления. Так же, обратите внимание на запросы, которые у вас параметризуются напрямую из переменных, рекомендую завести привычку все запросы выполнять через подготовленные выражения.
    Ответ написан
    Комментировать
  • Нужно ли делать условие перед вызовом метода для избежания выделения дополнительной памяти?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Мне нужно аргументировать ответ, но я не знаю как ответить правильно.
    Очень просто: Так как проверка отнимает процессорное время, то экономия все равно будет липовой, вместо памяти потратится ресурс процессора. Сколь ни будь значительной экономии это не даст ни в том, ни в другом случае, точнее экономия будет в случае отсутствия проверки и существования переменной, что будет происходить скорее всего чаще чем несуществование переменной, ну или по крайней мере в каком-то числе случаев, в то время как проверка будет осуществляться всегда.
    Ответ написан
    Комментировать
  • Как правильно вывести последнее сообщение в блок слева который будет на картинке?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    SELECT m.*, u.login, i.img
        FROM messages m
        LEFT JOIN users u
        ON m.to_user_id = u.id
        LEFT JOIN image i 
        ON m.to_user_id = i.obj_id 
        WHERE m.date > :lastdate # надо выбирать все что позже уже полученных сообщений
        AND image.obj_type = 'user' 
        AND m.from_user_id = :fid  # айди "от юзера"
        AND m.to_user_id = :tid #айди "к юзеру"
        ORDER BY m.date  # по возрастанию все старше последнего полученного
    Ответ написан
    Комментировать
  • Как построить коллекцию на PHP при заданных ниже условиях?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    99% работы с массивами - циклы. Даже под капотом всяких мап тот же цикл, только скомпилированный в функцию. Тут безусловно нужен цикл.
    Ответ написан
    Комментировать
  • Как сделать повтор действия в php если элемент не найден?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    через n-времени начинаем снова искать до тех пор пока не найдем то что ищем в бд.
    То есть если по каким то причинам данные в бд не поступят, то цикл будет вечным... Вам не кажется что тут что-т не правильно?
    Ответ написан
    Комментировать
  • Почему не отправляются фото с формы обратной связи если отправлять с телефона?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    <input type="file" name="fileFF[]" multiple="multiple" multiple id="fileFF" class="w100" name="files[]" />
    Два раза указан атрибут name, причем теперь он files[], а в коде проверяется fileFF
    Ответ написан
    2 комментария
  • Что будет, если убрать из URL уникальный id у новости в CMS?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    что скажите?
    Во первых "скажете". Во вторых не понятна суть вопроса, вы описали 2 разных механизма, один использует slug, другой id, к чему относится ваше описание механизмов определения уникальности - не понятно. Где вопрос?
    Ответ написан
    6 комментариев
  • Почему с формы обратной связи на почту хостинга приходит пустое письмо?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) Проверить что приходит в $_POST
    2) Не использовать стандартную функцию mail(), так как она слишком плохо дебажится, да и в целом не айс.
    3) Поставить нормальный мэйлер, типа пхпмэйлер/свифтмэйлер.
    Ответ написан
    Комментировать
  • Функция move_uploaded_file выдает ошибку 0, что делать?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    move_uploaded_file возвращает true или false, никакого нуля она не возвращает. Ищите варнинги в логах, там все написано.
    Ответ написан
    Комментировать
  • Как исправить ошибку PHP curl_error, curl_errno 77?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Ответ написан
    Комментировать
  • Как корректно обработать строку запроса типа catalog/aloe/aaaa, если третий параметр в роутинге не предусмотрен (только /)?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Разбиваю строку на массив, из первого параметра получаю имя контроллера и создаю соответствующий экземпляр. Если нет второго параметра, вызываю действие по умолчанию: на сайте это отобразить каталог, или страницу со сатьями (uri соответственно mysite.com/catalog или mysite.com/articles). Если же есть второй параметр (это название конкретного растения или id статьи), вызываю другое действие и передаю параметр (получается mysite.com/catalog/aloe)
    то что вы реализовали к роутингу имеет такое себе отношение. Роутинг обычно опирается на правила, а увас тупо захардкорен контроллер. Что будете делать если сложность будет чуть выше, и например, добавится язык перед контроллером?

    При запросе вида mysite.com/catalog/aloe/test, т.е. когда через слеш появляется третий параметр, та же страница с уведомлением для пользователя отображается без стилей
    Логично, стили у вас лежат всегда в одной папке, а вы их каждый раз подключаете из разных "путей" в урл, от которых зачем-то высчитываете сколько папок "выше отмотать". Путь должен быть абсолютным.

    Вот логика проверки, буквально, если в массиве получилось больше двух элементов, отобрази страницу ошибки
    Вообще логика должна быть такой, что если больше 2 параметров, то все что дальше помещается в какой-то массив, например $parameters, который можно получить из роутинга, и дальше в зависимости от значений что-то делать. Правильнее все же было бы сделать сопоставление пути с контроллером, экшеном и параметрами, как во взрослых роутерах, но для начала и так сойдет.
    Ответ написан
    1 комментарий