• Как реализовать автономную прошивку ESP32 (без компьютера и сети)?

    softmart
    @softmart
    Разработчик
    В ESP32 все это реализовано в поставляемой библиотеке - https://docs.espressif.com/projects/esp-idf/en/lat...

    Но на то что там реализовано я бы не надеялся, надежнее реализовать самому. Держать две копии прошивки, при неудачном обновлении загружать предыдущую.
    Ответ написан
    Комментировать
  • Как убрать No 'Access-Control-Allow-Origin' от CORS, если в URL нету знака вопроса?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В определённых случаях браузер делает preflight request. Сначала ресурс запрашивается методом OPTIONS, на который браузер рассчитывает получить ответ 200 с установленными CORS-заголовками. И только если этот запрос прошёл, то делается основной запрос.
    Проверьте, что ваш сервер нормально отвечает на OPTIONS.
    Ответ написан
    9 комментариев
  • Насколько у меня правильный код ООП php?

    @D3lphi
    Здесь плохо всё, к сожалению.

    Начнем с того, что вы неверно наследуете классы. Почему у вас класс, отвечающий за подключение к базе данных является родителем класса, работающим с заказами? Наследование применяется, если можно сказать, что что-то является чем-то. Например, разработчик является работником; компьютер является устройством и тд. Здесь же у вас вообще близко такой логике не получится следовать. Вы должны передавать хотя бы объект для работы с бд через инъекцию, например, в конструктор. В идеале, нужно использовать паттерн репозиторий для работы с базой данных.

    Класс SearchOrder у вас не только выполняет запросы, но еще и работает с данными, хранит состояние этих самых данных, фильтрует данные (strip_tags()). Непорядок. Это все нужно разделять. У вас вообще получаются какие-то богообъекты, которые умеют во все.

    Вы каждый раз повторяете строки с подготовкой запроса, биндингом параметров, отправкой запроса и тд. Не думали, что неплохо бы было написать какую-нибудь обертку и выполнять запросы как-нибудь так:
    $result = $wrapper->select("SELECT * FROM `tablename` WHERE `id` = :id", ['id' => 5]);

    ?

    Вы вызываете connect() в методах. То есть, каждый вызов этого метода будет приводить к установке нового соединения с базой данных, даже если оно уже было установлено. Соединение с базой данных это достаточно дорогостоящая операция.

    Зачем вы используете свойства, если можно обойтись обычными локальными переменными:
    $this->orderID = (int) strip_tags($orderID);
    $this->column = (string) strip_tags($column);
    $this->value = (string) strip_tags($value);

    ?

    Почему вы стриппите тэги у идентификатора? вы настолько не уверены в том, что влетает в функцию:
    strip_tags($orderID);
    ?

    Если вы не используете php 7 и, как следствие, скалярный тайпхинтинг, то должны делать проверки на тип входящего аргумента. Если что-то не так с типом, бросаем исключение (А не приводим его к нужному)! Например:
    if (!is_string($arg)) {
        throw new InvalidArgumentTypeException('string', $arg);
    }

    Это в идеале. Вы не обязаны это делать, конечно же. Но вот такие проверки делают приложение безопаснее. Хотя, опять же, повторюсь, в 2017 нужно начинать новые проекты на php 7.1+.

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

    Кроме всего прочего, почитайте про стандарты оформления кода. Вы им не следуете.

    Вам пока рано писать такие велосипеды. Судя по всему, у вас нет опыта вообще. Посмотрите готовые решения: фреймворки, ORM, изучите их, хотя бы поверхностно разберитесь, как оно работает и уже потом пробуйте что-то сделать, исходя из полученных знаний.

    Желаю успехов!
    Ответ написан
    1 комментарий
  • Как создать новый массив с новым названием объектов?

    0xD34F
    @0xD34F
    Почему бы не использовать array_map? Как-нибудь так:
    array_map(function($n) {
      return [ "url" => "/site/$n[0]", "label" => $n[1] ];
    }, [
      [1, 'Главная'],
      [2, 'Портфолио'],
      [3, 'О нас']
    ]);
    Ответ написан
    2 комментария
  • Плохо ли создавать проекты с нуля? Что значит быть про?

    ТС, надеюсь никому никогда не придется работать с тобой в команде и поддерживать твой код. Одно дело не знать, спрашивать и прислушиваться, другое дело гнуть свою кривую линию.
    Ответ написан
    4 комментария
  • Ошибки авторизации и голосования на Хабре?

    SEObomj
    @SEObomj
    Во всем нужно видеть плюсы. Я вот после проблем с авторизацией стал меньше сидеть на хабре и больше работаю =) А вообще задолбало, да… Как браузер закрою, приходится снова логиниться.
    Ответ написан
    Комментировать
  • Ошибки авторизации и голосования на Хабре?

    @fasi
    А я вот могу все посты в вопросах почему-то плюсовать (а минусовать нет), хотя карма 0. :D
    Что-то не то тут творится.
    Ответ написан
    Комментировать
  • Удаление mysql-binlog'ов?

    click0
    @click0
    Системный & сетевой архитектор
    лучше пусть мускул сам подчищает старые логи, например опция:
    [mysqld]
    . . .
    expire_logs_days = 5
    . . . 
    

    заставит мускул чистить логи старше 5 дней.
    Ответ написан
    1 комментарий