Задать вопрос
  • Насколько у меня правильный код ООП 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 комментарий
  • Стоит ли ограничивать допустимые символы в пароле?

    Смотря где и как вы эти пароли будете использовать. Например, встроенная авторизация HTTP и SMTP не имеет возможности передать кодировку символа, и в ней в принципе не рекомендуется использовать не-ASCII символы. В IMAP используется UTF-7 в котором могут быть проблемы с передачей emoji. В SSH тоже могут быть проблемы с передачей не-ASCII символов в зависимости от типа терминала. Mac не дает вводить кириллические пароли в паролях очень много где, например для WiFi.

    Что касается веб - ну представьте, пользователь зарегистрирует пароль с emoji а потом попытается с этим паролем войти через мобильный телефон, где просто не будет возможности его ввести.
    Ответ написан
    Комментировать
  • Как правильно реализовать API?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Шаг 1, изучаем https://jwt.io/ - на настоящий момент стандарт для аутентификации.
    Шаг 2. Каждое устройство должно иметь уникальный токен. Пользователь должен иметь возможность деавторизовать любое устройство. При смене пароля все токены автоматически стираются.

    Организация хранения токена должна выглядеть примерно так:
    tokens
    - user_id
    - device_id  - при авторизации через браузер можно подставить md5(User-Agent)
    - device_name  - человеко-понятное имя девайса или название браузера
    - token
    - last_used
    - expires_at

    Про API, вместо передачи дополнительного параметра в запросе очень часто используют HTTP-заголовки.
    Наличие множества токенов практически ничем не грозит, разве что небольшим увеличением размера данных.
    Сброс токенов нужен по времени, по смене пароля, значительной смене географии (другая страна и т.п.), при нажатии кнопки Выход и по желанию пользователя (опции Выйти со всех устройств).
    Ответ написан
    12 комментариев
  • Почему order by ускоряет запрос?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Почему так происходит?
    1. Потому, что выводится в результате меньше ровно на (2 000 000 - 20) записей.
    Или, другими словами, диапазон: 1 999 980 ... 2 000 000
    2. Обратная сортировка 'desc' - смотрит в диапазоне от >='2016-01-24' до последней (самой новой) даты и сортировку этого списка - реверсирует, чтобы начать перебор с конца, поэтому кол-во просматриваемых записей - тут НЕСОИЗМЕРИМО! меньше и из-за этого запрос работает быстрее.
    Ответ написан
    6 комментариев
  • Как создать свою команду в Linux?

    NullByte
    @NullByte
    Bad gateway
    для этого создайте постоянный алиас:
    echo 'alias android="cd /opt/android-studio/bin/; ./studio.sh"' >> ~/.bashrc

    эта команда запишет в файл конфига bash ваш постоянный собственный алиас к необходимой команде (или нескольким через знак ";"). т.е. если будете вбивать "android" от имени своего юзера, то автоматом в данном случае будет осуществлен переход в нужную директорию и запускаться Андроид Студио. я думаю это самый простой способ :)
    Ответ написан
    Комментировать
  • Как создать свою команду в Linux?

    nano /usr/local/bin/android
    Вставить туда

    #!/bin/bash
    cd /opt/android-studio/bin/
    ./studio.sh

    Затем выйти и сохранить. И chmod +x /usr/local/bin/android
    Все
    Ответ написан
    Комментировать
  • Медленный ли Symfony?

    @edb
    SQL
    1. При тестировании несуществующего метода в symfony генерируется исключение, а это всегда дорого и медленно.
    2. Когда тестировался существующий метод, то разница показала реальную производительность фреймворка. И разница в чуть менее в 2 раза не такая уж и большая.
    3. Symfony используют не для выигрыша в производительности. Гораздо важнее тут скорость разработки и качество кода.
    Ответ написан
    2 комментария
  • Правильная перенастройка sendmail в Debian

    ValdikSS
    @ValdikSS
    Просто удалите sendmail и установите exim4, затем dpkg-reconfigure exim-configure или как-то так.
    Ответ написан
    1 комментарий
  • Правильная перенастройка sendmail в Debian

    @bodzilla
    добрый день!

    удалите sendmail — apt-get remove sendmail, а затем установите exim.

    запустите /etc/init.d/exim start

    проверьте отправку писем.

    П.С.
    возможно нужно будет уточнить SMTP-сервер провайдера и через него запустить почту и настроить в exim smarthost.
    Ответ написан
    1 комментарий
  • Способы и средства мониторинга состояния таблиц MySQL?

    XaosSintez
    @XaosSintez
    Если у Вас таблицы MyISAM — попробуйте заменить их на INNODB, нам в одном проекте это помогло. Насколько я понимаю, MyISAM плохо держит большие и часто обновляемые таблицы. Поэтому они и крашатся. А вообще — надо искать источник проблемы, скорее всего это жесткий диск (у вас RAID? ). По возможности кэшируйте запросы, чтобы разгрузить БД
    Ответ написан
    2 комментария
  • Способы и средства мониторинга состояния таблиц MySQL?

    javenue
    @javenue
    Как вариант — подойдет, но лушче делать не раз в сутки, а чаще, например, раз в час. Запись в критичные таблицы лучше лочить на уровне какого-то адаптера, делать проверку скриптом на поломанность, в случае чего — чинить, а потом открывать лок.

    А вообще — стоит хотя бы попробовать найти причину поломки таблиц. Может где-то на форумах найдете описание похожих проблем. Как вариант — попробуйте обновить версию СУБД, может это баг и он уже исправлен.
    Ответ написан
    1 комментарий
  • Не получается видео с youtube вставить

    ertaquo
    @ertaquo
    Для этих целей существует тег <video> Просто вставьте ссылку на видео в него:
    <video>http://www.youtube.com/watch?v=LCFtKXnrbio</video>
    Ответ написан
    1 комментарий
  • Когда вы занимаетесь самообразованием?

    dAverk
    @dAverk
    Когда на работе время есть, а дел уже нет, тогда и самообразуюся ;)
    Ответ написан
    Комментировать