Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
  • Как лучше сделать функцию Запомнить меня?

    Driver86
    @Driver86
    Немодератор toster.ru
    Куку могут своровать. И пароль могут своровать.
    При регистрации пользователя генерируем ему уникальную строку и сохраняем в БД. После запоминания ставим её в куках. Для защиты от кражи кук можно привязывать строку к IP, но не всем пользователям это подойдёт
    Ответ написан
    Комментировать
  • Как задать второе значение переменной если 1 не найдено?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    $city = $gorod ?? 'Текст';
    Ответ написан
    1 комментарий
  • Как переписать подключение к базе данных, по принципам ООП?

    DollyPapper
    @DollyPapper
    Откуда берется вся эта херотень про "принципы ООП". Нет никаких принципов ООП кроме 7-8 (в большинстве статей в интернете 4). Абстракция, инкапсуляция, полиморфизм и наследование. DRY, KISS, SOLIDы всякие и прочее и прочее это не принципы ООП, это принципы программирования вообще. ООП это надстройка над процедурщиной. Процедурщина абстрагировала логику в функции, ООП сказал - "давайте еще и данные абстрагируем". Так получились классы и объекты. То есть у нас имеются умные обьекты которые хранят в себе данные, хранят свое состояние, и показывают наружу интерфейс взаимодействия. Всё. Вот ваш ООП. Отсюда и не понимание - "а как переписать на ООП", потому что в интернете столько всякого дерьма, и каждый любой придуманный или услышанный им принцип называет "принцип ООП". Нет.
    Это если с идеологической стороны подходить. А с практической FanatPHP правильно сказал - это инструмент который следует применять к месту. И это место - большие проекты где очевидна выгода от этого подхода. Начни с объектной декомпозиции. Гради Буча покури попробуй. То есть нужно сначала понять концепцию, а потом уже пытаться что-то написать в "стиле ООП". Иначе будут возникать вопросы на которые вы не ответите, типа - "А вот этот класс который я написал, это реально объект в понимании ООП или структура данных с обвязкой из процедур".
    Ответ написан
    Комментировать
  • База данных "съела" все знаки "\" в столбце. Мне нужно передать ссылку к файлу,а без косой черты никак. Что делать?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Используйте подготовленные запросы с плейсхолдерами, а не прямую подстановку в строки. Будет гораздо меньше таких проблем.
    Ответ написан
    2 комментария
  • Как обновить данные в одной таблице, после обновления данных в другой?

    @Akela_wolf
    Extreme Programmer
    Подумать. Потому что такая проблема указывает что база данных денормализована, соответственно это может быть ошибка проектирования. Если это не ошибка - подумать еще раз. Если все равно так и должно быть - читать про триггеры, либо закладывать логику синхронизации таблиц в логику приложения.
    Ответ написан
    Комментировать
  • Как в php реализовать отображение содержимого каталогов рекурсивно?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Комментировать
  • Как заставить скрипт постоянно отслеживать состояние объекта и реагировать если добавлен/удалён класс?

    Vextor-ltd
    @Vextor-ltd
    Webdeveloper
    На странице php-код управляет видимостью элементов интерфейса


    Бэк не не должен управлять видимостью элементов, он должен выдавать лишь данные. Всё остальное делай с помощью JS.
    Ответ написан
    1 комментарий
  • Как организовать хранение данных для новостной ленты социальной сети?

    hint000
    @hint000
    у админа три руки
    2. Готовить ленту для каждого пользователя отдельно. То есть возникает в какой-либо сфере событие, его нужно записать в ленту для миллиона подписчиков.
    Беда этого варианта в том, что из миллиона подписчиков половина не заходили в ленту полгода+, ещё 200 тысяч не заходили месяц+, ещё 200 тысяч не заходили неделю+, а ваша БД всё это время бесполезно молотит для всего миллиона.

    Здесь нет простого решения (в соцсетях вообще много непростого). Вам нужно как минимум комбинировать первый и второй метод (а может быть ещё и какой-то третий и какой-то четвёртый). И чтобы делать это оптимально (не требуя на миллион подписчиков столько же мощностей, сколько Вконтактик потратил бы на 10 миллионов подписчиков), потребуются действительно умные алгоритмы, а не только совет насчёт подходящей СУБД. Навскидку, для событий от друзей больше подходит второй метод, а для событий сфер - первый метод. Но это не точно. Можно применять второй метод только для тех, кто заходил не больше суток назад и т.п.
    Ответ написан
    Комментировать
  • Парсер JSON на PHP или Python?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    JSON не надо парсить, это стандартизированный формат, для чтения которого есть библиотеки на почти каждом языке. Нужно просто читать. Это самая элементарная вещь, не требующая вообще ума.
    Ответ написан
    3 комментария
  • Как в столбец SQL-таблицы записать массив?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега SQL
    Седой и строгий
    Не надо в столбец записывать массив, это идёт в разрез с принципами работы реляционных баз данных и нарушает нормализацию.
    Ответ написан
    2 комментария
  • Как увеличивать id на случайную величину в таблице sql при добавлении?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    SET @@auto_increment_increment=2;
    SET @@auto_increment_offset=2;
    Ответ написан
    1 комментарий
  • В чем ошибка применения функции sleep()?

    DevMan
    @DevMan
    1. такие задачи нужно выполнять через консоль, а не вэб.
    2. sleep тут вообще ни к месту.
    Ответ написан
  • Нужно ли как-то обрабатывать код перед записью его в БД через PDO?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Вы понимаете, что делает каждая строка в вашей найденной супер-функции?

    // убираем концевые пробельные знаки (пробел, таб, переводы строк и т.п)
    $value = trim( $value );
    
    // преобразуем строку в строку, да еще с подавлением ошибки O_O. Даже не знаю что сказать
    @strval($value)
    
    // убираем все символы кроме кодов с 20 (пробел) по FF
    $value = preg_replace("/[^\x20-\xFF]/","",@strval($value)); 
    
    // Убираем html теги
    $value = strip_tags( $value );


    Вот теперь сами и скажите – вам всё это нужно делать?

    Пользователь может через форму, обрабатываемую таким образом, загрузить вредоносный код?

    Тут нужно понять, что вы имеете ввиду под вредоносным кодом.

    SQL инъекции тут не будет.
    HTML код загрузить можно. И если вы не будете его обрабатывать при выводе на страницу, он сработает (там может быть какой-то js скрипт).
    Но это совершенно не значит, что вам нужно искать какую-то мега-универсальную функцию очистки данных.
    Всегда нужно смотреть по ситуации. Например, в форме комментирования могут быть разрешен некоторый набор html тегов для форматирования сообщения (как, например, на этом сайте), и применять не глядя strip_tags ко входным данным, будет ошибкой.
    На международном сайте могут регистрироваться люди с именами, включающими символы, которые вы запретили (/[^\x20-\xFF]/).

    Короче, ко всему и всегда нужно подходить с умом.
    И никогда не копипасти код из интернета, если не понимаешь каждую строчку.
    Ответ написан
    4 комментария
  • Как правильно отправлять почту через PHP?

    @Flying
    Очень странно, что письма, высланные через Mailgun имеют плохую доставляемость. Подобные сервисы как раз, в частности, и используют из-за того, что они нормально реализуют все стандартные средства идентификации отправителей, а также обладают хорошей репутацией с точки зрения spam list'ов и прочих сервисов мониторинга.

    Честно говоря, с учётом вопроса, я бы порекомендовал вам как раз оставаться с Mailgun, а не пытаться создать свой SMTP. Логика очень простая - человек, задающий подобный вопрос вряд ли детально понимает как обеспечить хорошую доставляемость писем в собранном вручную SMTP сервере, так что результат явно будет хуже.

    Также не очень понятно само описание проблемы. "Из-за отсутствия шифрования" чего? Возможно вы просто что-то неправильно используете или не настроили?

    Возвращаясь к вопросу о библиотеках - я бы склонялся в сторону Symfony Mailer. Это "наследник" SWIFTMailer, который в свою очередь, думаю, был самым популярным решением для этой задачи на PHP, всё-таки больше 270 миллионов скачиваний, у PHPMailer в 10 раз меньше.

    Понятно, что Symfony Mailer хорошо интегрирован в сам Symfony, но он легко (хотя и менее удобно) используется и отдельно. Из несомненных плюсов данного подхода - возможность подключения различных транспортов (в том числе и того же Mailgun), что позволяет использовать разные методы отсылки писем без необходимости менять код. Также Symfony Mailer интегрируется с Symfony Messenger, который в свою очередь предоставляет mailer'у возможность асинхронной рассылки писем с retry стратегиями, отслеживанием ошибок отсылки и т.п.
    Ответ написан
    Комментировать
  • #1143 - Команда SELECT запрещена пользователю 'mysql.infoschema'@'localhost'?

    karabanov
    @karabanov
    Системный администратор
    Да сломана у тебя база. Забей и сделать заново - чинить это смысла нет.
    Ответ написан
  • Как реализовать отправку данных в БД с форм выведенных циклом?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Фанат выше верно отметил – можно сделать отдельные формы на каждый блок.
    Так как в таблицу нельзя впихнуть тег form, то можно сделать так.

    <form name="form1" method="post" action="/save/1"></form>
    <form name="form2" method="post" action="/save/2"></form>
    <form name="form3" method="post" action="/save/3"></form>
    <table>
    <tbody>
      <tr>
        <td><input type="text" name="param1" form="form1"></td>
        <td><input type="text" name="param2" form="form1"></td>
      <tr>
      <tr><td><button type="submit" form="form1">Send</button></td><tr>
    </tbody>
    <tbody>
      <tr>
        <td><input type="text" name="param1" form="form2"></td>
        <td><input type="text" name="param2" form="form2"></td>
      <tr>
      <tr><td><button type="submit" form="form2">Send</button></td><tr>
    </tbody>
    <tbody>
      <tr>
        <td><input type="text" name="param1" form="form3"></td>
        <td><input type="text" name="param2" form="form3"></td>
      <tr>
      <tr><td><button type="submit" form="form3">Send</button></td><tr>
    <table>


    Но, в принципе можно и одной формой обойтись. Тогда и кнопку Save можно сделать общую.

    <form method="post" action="/save">
    <table>
      <tr>
        <td><input type="text" name="data[ОУР][param1]"></td>
        <td><input type="text" name="data[ОУР][param2]"></td>
      <tr>
      <tr>
        <td><input type="text" name="data[ОЭБ][param1]"></td>
        <td><input type="text" name="data[ОЭБ][param1]"></td>
      <tr>
      <tr>
        <td><input type="text" name="data[ОНК][param1]"></td>
        <td><input type="text" name="data[ОНК][param1]"></td>
      <tr>
      <tr><td><button type="submit">Send</button></td><tr>
    </tbody>
    <table>
    </form>

    Ответ написан
    Комментировать
  • Чем плох md5(md5($pass)) для пароля?

    Adamos
    @Adamos
    Вопрос: почему не использовать тот хэш, который быстрее - это же оптимизация?
    Ответ: да потому, что это оптимизация взлома!
    Ответ написан
    3 комментария
  • Чем плох md5(md5($pass)) для пароля?

    @galaxy
    1. Нет соли
    2. Слишком быстрый
    Ответ написан
    Комментировать
  • Можно ли написать функцию, которая меняет значение таблицы автоматически в зависимости от времени?

    rozhnev
    @rozhnev Куратор тега SQL
    Fullstack programmer, DBA, медленно, дорого
    Я бы ввобще использовал одно поле например:
    create table bookings (
        id int,
        active_til datetame
    );


    И уже ничего не нужно редактивировать
    Ответ написан
    Комментировать