• Как сделать LIMIT по первой таблице?

    romy4
    @romy4
    Exception handler
    выбрать сперва два бренда простым запросом и потом сделать джойн этой выборки на таблицу автомобилей
    select * 
    from (select ... from brands ... limit 2 ) b 
    left join auto ....
    Ответ написан
    1 комментарий
  • Что делать, если мой сайт скопировали?

    @lubezniy
    Отвечаю по возможным целям. На моей памяти два подобных случая - оба давностью в несколько (около 5) лет.

    В первом - некие злодеи сделали страницу с нашим дизайном трёхлетней давности, разместили на взломанном постороннем сервере и пристроили туда для скачивания некие программы, требующие отправить платную SMS для установки (наши программы такого точно не требуют). Узнали мы об этом из жалобы одного из потенциальных пользователей, от него же получили ссылку. Через whois нашли контакты владельца домена, связались с ним - в общем, через несколько часов гадость исчезла.

    Второй случай. В небольшом городе есть штук 7-8 контор (маленьких - в пределах 10 сотрудников), оказывающих услуги бизнес-клиентам. Клиентура их в абсолютном большинстве местная, привлекается путём городской рекламы, объявлений в местной газете и других подобных способов. Одна из контор с целью привлечения дополнительных клиентов сделала себе сайт. Делала самостоятельно, без привлечения сторонних специалистов, так что контент оказался вполне себе уникальным и в чём-то даже полезным. А использование нормальной (в целом) CMS и размещение на платном, хоть и недорогом, хостинге позволило ещё и принимать с сайта обратную связь. Результат этой работы вышел положительный; конкуренты об этом, естественно, узнали, и двое из них через некоторое время тоже решили обзавестись сайтами. Первый пошёл по пути создания сайта с нуля и наполнения его своим контентом; ему ресурсы это позволяли. А вот второй решил упростить и удешевить себе процесс: "создал" сайт на narod.ru и надёргал туда часть контента с чужого сайта, поменяв в нём только контактные данные. На нормальный дизайн там, наверное, даже ресурсов не хватило: выглядело сиё творение, мягко говоря, убого. А про фидбек и речи толком не шло. Тем не менее, владелец оригинального контента высказал своё недовольство по контактному номеру с того сайта и был готов сделать abuse в Яндекс. Но последнего не потребовалось; в течение суток после звонка претензионный контент был убран.
    Ответ написан
    Комментировать
  • Что делать, если мой сайт скопировали?

    lukoie
    @lukoie
    А что Вы можете им предъявить? У Вас есть подтвержденное право интеллектуальной собственности на дизайн? Или на код верстки? Может Вы точно так же откуда то его скопировали? Или купили на одной бирже или у одного разработчика, который продает такой сайт каждому за 3 доллара? Может и контент у Вас имеет подтвержденное право собственности? Да, можно в подвале написать что все права на текст принадлежат вашему сайту. А у них будет написано что все права на этот текст принадлежат их сайту.
    Вы вообще сможете как либо доказать свои права на сайт?
    Ответ написан
    3 комментария
  • Что делать, если мой сайт скопировали?

    @lehha
    Торговцы, только с другой целью - сайт проиндексируется, поставят ссылки и будут получать рублики за это. А может и конкуренты.

    Нужно бороться:
    1. написать претензию владельцу домена. Если это RU/РФ - через форму связи с администратором (при просмотре whois в поле admin-contact). Напишите про интеллектуальную собственность и желание подать в суд на владельца домена с привлечением правоохранительных органов.
    2. если в течение нескольких дней не будет реакции - пишите такую же претензию хостеру. Пробить IP в Whois и посмотреть ящик abuse@. Хостер отреагирует 100%, если он Российский. Зарубежные неохотно, но они боятся ключевых слов: Роскомнадзор, блокировка на всей территории РФ.
    3. если никто не реагирует - жалобу в РКН, там примут меры.
    Ответ написан
    8 комментариев
  • Как соединить два запроса (INSERT, IF) в один?

    Melkij
    @Melkij
    PostgreSQL DBA
    Можно воспользоваться insert .. select. Если select даст 0 строк - то это валидный запрос, который ничего не вставит в таблицу.
    insert into tablename (field1, field2)
    select 'const1', 'const2'
    from (select null) dummyonerowtable
    where not exists(select 1 from anothertable where ... limit 1 offset 9) -- и нет 10 строки по какому-то критерию


    Фокусы сложнее - через хранимки. Только mysql и хранимки... Лучше выберите что-то одно из них и не смешивайте.
    Ответ написан
    Комментировать
  • Как сделать редирект после вывода заголовка?

    @entermix
    Нужно убрать заголовки, которые отправляет сторонний скрипт, Вы не можете делать редирект на PHP после отправки какого либо вывода, только через браузер (JS, http-equiv).
    Ответ написан
    Комментировать
  • Как сделать редирект после вывода заголовка?

    Вашу задачу можно решить с помощью мета-тега
    <meta http-equiv="refresh" content="1;URL=http://yandex.ru" />

    Здесь 1 - задержка перед переадресацией.
    Редирект делает уже браузер, а не PHP.
    <?php
    //URL для переадресации
    $url = "";
    //выводим мета-тег для переадресации
    echo ("<meta http-equiv=\"refresh\" content=\"1\;$url\"");
    ?>

    redirekt.info/article/redirekt-na-html-s-zaderzhko...
    Ответ написан
    Комментировать
  • Как правильно сделать ключ для ИНН?

    pxz
    @pxz
    ✔ Совет: Вам помогли? Отметьте ответы решением.
    Из документации:
    > Величины типа CHAR при хранении дополняются справа пробелами до заданной длины
    То есть, вы создадите себе проблем с обработкой ИНН в дальнейшем.

    Так что, лучше сделать VARCHAR(12) и всё будет ок.
    Ответ написан
    Комментировать
  • Как защитить поддомен без авторизации?

    webinar
    @webinar Куратор тега PHP
    Учим yii: https://youtu.be/-WRMlGHLgRg
    2 поддомена, а сессия одна.
    https://yandex.ru/search/?text=одна%20сессия%20для...
    Ответ написан
    Комментировать
  • Как защитить поддомен без авторизации?

    А передача сессии уже не популярна? Или вы отказались от стандартных сессий?)
    Ответ написан
    4 комментария
  • Как организовать структуру БД для интернет магазина?

    @sisn
    Нормализация не рулит в данном случае.
    Серьезно потеряете в производительности, когда будете отбирать по атрибутам.

    EAV - вообще полная ж. по производительности.
    Для упорядочивания хранения, чтобы не пухла голова программиста - EAV годится хорошо.
    А вот для выборки....

    Я бы положился на что-то более подходящее для этого случая - ElasticSearch, денормализованную форму в NoSQL и тп. - у них будет нормальная производительность.

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

    Google Keep
    Ответ написан
    Комментировать
  • Как называется такой метод собирания страницы?

    Как вариант - очередная самописная реализация MVC, думаю таким многие баловались.

    Если лень гуглить - на хабре есть статья на тему, где прям на примере всё разжевано, вот.
    Ответ написан
    4 комментария
  • Правильно ли я использую класс?

    1) Почему функции и переменные с нормальным неймингом, а класс как "Отщит"?) Никаких f - называйте все своими именами.
    2) Модель формы - выносятся в отдельный класс. Валидация полей в моделях формы. И вид тоже в отдельном файле.
    3) Использование супер глобальных переменных POST GET - не допустимо, данные должны пробрасываться/инжектится в класс, а не использоваться внутри. Как правило они используются в контроллерах в рамках MVC.
    4) Переводы и надписи выносятся тоже в отдельный файл i18n. Представьте ситуацию, вам завтра позвонили и сказали, надо сделать на немецком языке. Вы лезете в каждый класс, что бы это все исправить? А если классов 100 ?)
    5) Метод Save можно превратить в апдейт одновременно. Если в метод добавлено Id то делаете апдейт записи, если нет, то создаете.
    6) Я бы еще добавил исключений, но то уже такое, каждый делает где ему удобно.

    Почему на босса есть сеттер, а на директора add Хотя это тоже сеттер ?)
    Ответ написан
    6 комментариев
  • Правильно ли я использую класс?

    @D3lphi
    public function setBoss($name)
      {
        $this->boss = $name;
      }


    В данном случае, от этого метода - сеттера нет никакой практической пользы, он не проверяет ничего, не возвращает объект, чтобы можно было производить вызовы методов цепочкой $obj->a()->b(); В данном случае, целесообразнее использовать свойство напрямую.

    Не нужно писать конструкции вот так:
    if (...)
    {
      //
    }

    Пишем так:
    if (...) {
      //
    }

    Это не относится к классам, методам и функциям (в них скобку нужно писать на отдельной строке). Про это все, кстати, написано в PSR. Выберите стиль именования методов, чтобы он был один на протяжении всего кода, а то у вас в одном месте camelCase, в другом - under_scope.

    if(file_put_contents($filename, $content))
        {
          return 'Отчет сохранен';
        }
        else
        {
          return 'Ошибка сохранения';
        }

    Не надо возвращать строку! Возвратите true или false. И запомните: если что-то не так, бросайте исключение!
    Ответ написан
  • Правильно ли я использую класс?

    zorca
    @zorca
    Что делает это метод )))
    public function replaceBoss($name)
    {
    if(!empty($boss))
    {
    $this->boss = $boss;
    }
    }
    Ответ написан
    4 комментария
  • Можно ли один раз использовать глобальную переменную?

    @Zubastik_1
    Я бы искал причину если проект планируете развивать и улучшать программу а не просто поддерживать на плаву. Где то по видимому косяк.
    Ответ написан
    1 комментарий
  • Можно ли один раз использовать глобальную переменную?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Странно, в тексте упоминается объект $pdo, а в коде статический вызов, у которого никаких проблем с видимостью в принципе быть не может.

    Но есть отвечать буквально, то

    1. Если код процедурный, то global для $pdo или статический вызов через DB:: - это нормально. Если код объектный, то передавать $pdo как параметр в конструктор, присваивать локальной переменной класса и потом уже использовать только ее.
    2. В данную конструкцию никакая инъекция не пролезет

    Писать, кстати, можно короче, чтобы не канителиться.

    $data = array(
      'email' => $_POST['email'],
      'id' => $_POST['id']
    );
    $res = DB::prepare("UPDATE `users` SET `email` = :email WHERE `id` = :id")->execute($data);
    Ответ написан
    1 комментарий
  • Можно ли один раз использовать глобальную переменную?

    AxianLTD
    @AxianLTD
    1. Глобальными переменными не гнушаются и гранды. Я бы только подумал чтобы вынести все в отдельный файл.
    2. А то как же ;-) Кто фильтровать ввод будет?
    Ответ написан
    3 комментария