• Каждую секунду запрос от миллиона пользователей. Как лучше?

    Sanasol
    @Sanasol Куратор тега Веб-разработка
    нельзя просто так взять и загуглить ошибку
    оно тоже должно каждую секунду обращаться к серверу.

    это сервер рассылает сообщения, а не клиенты сервер спрашивают.

    И используют для этого websocket.

    Самый неплохой из готовых вариантов https://github.com/centrifugal/centrifugo
    Ответ написан
    Комментировать
  • Сравнение массивов 5М+ значений?

    @Nc_Soft
    Запишите оба массива в бд и сделайте joinом
    Ответ написан
  • Вывод изображение новости на главной?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    должен выводить если существует $item->image, а почему его там нет - надо смотреть в моделе или в контролере, если конечно виджет используется, судя по коду в index - это не так
    Можете попробовать в index заменить:
    <div class="last-entries-title">
              <?php echo CHtml::link(truncateText($entries->getStrByLang('title'), 80), $entries->getUrl());?>
            
            </div>

    на это:
    <div class="last-entries-title">
              <p><?php echo CHtml::link(truncateText($entries->getStrByLang('title'), 80), $entries->getUrl());?></p>
        <?php if($entries->image):?>
          <div class="imagenews"><?php $src = $entries->image->getFullThumbLink(); ?>
          <?php if($src) : ?>
            <div class="entries-image-list">
              <?php
              $tagAlt = CHtml::encode($entries->getStrByLang('title')); 
              if (issetModule('seo') && isset($entries->image->image_seo) && $entries->image->image_seo->getStrByLang('alt')) {
                $tagAlt = CHtml::encode($entries->image->image_seo->getStrByLang('alt'));
              }
              ?>
              <?php echo CHtml::link(CHtml::image($src, $tagAlt), array('class' => 'sxa')); ?>
            </div>
          <?php endif; ?>
        <?php endif; ?>
            
            </div>

    но это пальцем в небо по Вашим обрывочным данным.
    Ответ написан
    5 комментариев
  • Как правильно сохранять текст в БД и затем выводить его?

    xpert13
    @xpert13
    Full Stack Developer
    Если используете PDO - сохраняйте как есть, без каких либо изменений, если сами пишите запросы, тогда нужно экранировать кавычки.

    var_damp к БД не имеет никакого отношения, не смотрите на него.
    Ответ написан
    Комментировать
  • Как сделать условие подсчёт кол-во символов?

    nazares
    @nazares
    Software Engineer
    Для кириллицы и прочего УТФу надо php.net/manual/en/function.mb-strlen.php
    Ответ написан
    Комментировать
  • Как лучше хранить в бд (сейчас это двумерный массив)?

    qonand
    @qonand
    Software Engineer
    две таблицы
    Worker (Сотрудники)
    - id
    - name

    Work (Таблица работ)
    - id
    - worker_id
    - name
    - price
    Ответ написан
  • Как удалить из строки все, кроме?

    DevMan
    @DevMan
    Ответ написан
    Комментировать
  • Как загрузить БД 100мб в новую БД MySQL?

    Заходим по ssh и вводим mysql -uваш_логин -pваш_пароль имя_вашей_базы < пукт_к_файлу_дампа .
    И не какая панель не нужна...
    Ответ написан
  • Как сформировать список select с помощью Ajax запросив с БД MySQL?

    @dmz9
    брррррр...
    1. для шаблонизатора в пхп лучше делать так
    1.1 даже если шаблонизатор не поддерживает шорт-теги, а шаблон это тупо пхп/хтмл файл - всё же стоит выносить пхп код сборки элементов выше чем хтмл-темплейт сам по себе.
    1.2 множественное открытие/закрытие тегов тоже не особо кул. дело не в перфомансе а в читаемости.
    по сути выглядеть должно как то так
    <?php
    $optionsArray = array();
    if (is_array($organizationList)&&!empty($organizationList))
    {
    	foreach ($organizationList as $org)
    	{
    		$optionsArray[]='<option value="'.$org['idn'].'">'.$org['name'].'</option>';
    	}
    }
    ?><!DOCTYPE html>
    <html>
    ..............
    <select name="organization_id" id="getOrg">
        <option disabled selected>Укажите организацию...</option>
        <?=implode("",$optionsArray)?>
    </select>

    2. сборка селектов на джиквери
    2.1 трогать ДОМ много раз - вредно. семь раз create, один раз append.
    2.2 данные лучше присылать в виде "массива" - в пхп это числовой массив.
    элементами массива уже могут быть объекты - в пхп это ассоциативный массив.
    var data = [{
        idn: 3,
        name: 'first'
    }, {
        idn: 4,
        name: 'second'
    }, {
        idn: 5,
        name: 'third'
    }];
    var $select = $('<select/>', {
        class: 'form-control',
        html: $.map(data, function(org) {
            return $('<option/>', {
                value: org.idn,
                text: org.name
            })
        })
    }).on('change', function() {
        console.log($(this).val());
    }).trigger('change');
    $('.container').append($select)

    можно пойти дальше и $select вообще не заводить а сразу внутри инструкции аппенда написать весь конструктор селекта
    ----------------------------
    собственно - после каждого изменения (внутри change колбека) запрашиваешь данные еще раз (можно кешировать), перерисовываешь селекты. лучше иметь какое то отдельное хранилище - объект js. после сохранения в него данных, запускаешь метод сборки. это 2 отдельные функции.
    можно вынести конструктор селекта в обычную функцию, в которую просто передаешь данные, и возвращается jquery-объект, который в success:function аппендит его в нужное место (а лучше сначала почистить контейнер от старых селектов - $('.container').empty().append($select) ).
    ----------------------------
    для отладки используй хром, открой инструменты разработчика, там есть вкладка network, конкретно должно интересовать тебя - фильтр по XHR, и делай запросы, увидишь что возвращается - json или ошибки от пхп.
    Ответ написан
    4 комментария
  • Как в mysql сделать вес(Читай подробно, объяснить трудно)?

    GavriKos
    @GavriKos
    Вариант в лоб - сделать parent числовым полем. Вариант не в лоб - сделать таблицу соответствия названия parent и числового приоритета, выбрать все записи, и потом уже среди них найти максимальный приоритет.
    Ответ написан
    Комментировать
  • Как в PHP работать с foreign key?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    FOREIGN KEY - это средство обеспечения целостности данных, к PHP никакого отношения не имеет.
    В данном случае нужен обычный INNER JOIN.
    Ответ написан
    Комментировать
  • Какие есть варианты реализации автоматической авторизации?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    Слова "лучше" и "наиболее" здесь, конечно, неприменимы, как и в большинстве связанных с программированием вопросов.
    Я на одном из проектов сделал это так:
    1. Есть таблица token_actions, куда записывается секретный токен, название действия (Enum) и его аргументы в json.
    2. Действия могуть быть многоразовым и единичными.
    3. У токена может быть ограничено время жизни.
    4. Есть классы, каждый из которых обрабатывают конкретное действие, но имеют один интерфейс.
    5. Среди них есть и класс LogIn, который как раз авторизует пользователя.
    6. Есть контроллер, который принимает токен и по нему получает действие, создаёт объект его обработчика и выполняет его (для этого и нужен стандартный интерфейс).
    7. В письма, собственно, вставляются ссылки на обработчик токенов.
    8. Ну и ещё немного мелкой логики, добавляющей красоты и удобства.

    Система получилась очень гибкой (по email можно сделать всё, что можно сделать на сайте - принять заявку в друзья, отправить комментарий со стандартным текстом, открыть форму редактирования чего либо) и безопасной (все важные действия одноразовые и есть проверка по правам доступа, насколько это возможно). А авторизацию по ссылке вы получаете как бонус, потому что каждое действие требует авторизованного пользователя, иначе и токены не нужны были бы.

    Вот, я вам даже часть кода подарю: https://gist.github.com/alexey-m-ukolov/9588dcefc9...
    Ответ написан
    Комментировать
  • Как правильно использвать базы данных на странице php?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    в каком месте нужно закрывать соединение с БД?

    Перед завершением процесса. Хотя оно и так закроется.

    В каждом методе?

    Нет, постоянные реконнекты будут дорого стоить.

    --- Немножко Code Review ---

    // Не давайте общие имена конкретным реализациям
    // Почитайте, проникнитесь и используйте PSR-2 и PSR-4
    class DataBase
    {
        private $mysqli;
        private $dbConfig;
    
        public function __construct()
        {
    // Класс по работе с БД не должен знать даже о существовании неких файлов, где-то там. Это не его забота.
    // Передавайте в конструктор готовое подключение к БД, если нужно.
            $this->dbConfig = require "db/database_config.php";
    // Вот никак понять не могу, за что так любят этот mysqli, ну что в нем прям такого раз такого, по сравнению с PDO?
            $this->mysqli = mysqli_connect($this->dbConfig['host'], $this->dbConfig['username'], $this->dbConfig['password'], $this->dbConfig['db_name']);
    // Почему вдруг класс по работе с БД занимается операцией вывода?
    // Если что-то не так - бросайте исключение, ни каких echo, die, exit, trigger_error
            if (mysqli_connect_errno($this->mysqli)) {
                echo "Не удалось подключиться к MySQL: " . mysqli_connect_error();
            }
        }
    // Вы не проверяете аргументы, это плохо, очень.
    // Что бы нагнуть ваш проект достаточно передать в любой из аргументов: '1; DROP TABLE employees;'
      public function getEmployees($where='1',$start, $perPage){
    // ЗАБУДЬТЕ про подстановку данных через конкатенацию, используйте плейсхолдеры
    // http://php.net/manual/ru/pdo.prepared-statements.php
            $sql="SELECT e.name,e.birthday,d.title_dep,p.title_pos,t.title_type,e.salary FROM `employees` AS e INNER JOIN departments AS d ON e.id_dep=d.id
    INNER JOIN positions AS p ON e.id_pos=p.id
    INNER JOIN payment_types AS t ON e.id_type=t.id  where $where LIMIT $start,$perPage";
    
    // Вам ни переменная $res, ни $row не нужны
            $res = $this->mysqli->query($sql);
            $row=$res->fetch_all(MYSQLI_ASSOC);
            return $row;
        }
    }
    Ответ написан
    2 комментария
  • PDO ошибка, как исправить?

    @holymotion
    По ошибке понятно, что в res у вас булева переменная, значит результат вызова метода query вернул false. Проверьте подключение к бд.

    php.net/manual/en/pdo.construct.php
    php.net/manual/en/pdo.query.php
    Ответ написан
    6 комментариев
  • Нужно ли создавать БД под каждого пользователя?

    @esvlad
    Веб-разработчик
    Примитивно, но как-то так, все в одной БД
    43a5cf8e24434a5d8f8ddb5722485c60.JPG
    Ответ написан
    Комментировать
  • Нужно ли создавать БД под каждого пользователя?

    martin74ua
    @martin74ua Куратор тега MySQL
    Linux administrator
    начните с ТЗ, основ программирования и проектирования
    Ответ написан
    1 комментарий
  • Почему неправильно отрабатывает ХР?

    Melkij
    @Melkij
    PostgreSQL DBA
    Вероятно планировщик не понимает, имеете вы в виду входной параметр или поле таблицы в записи uid = uid и использует оба раза одну и ту же сущность, т.е. true по определению.
    Переименуйте параметр хранимки.
    Ответ написан
    Комментировать
  • Как улучшить php регулярку для замены ссылок на img src?

    @Arik
    завершением надо сделать не расширение, а кавычки двойные, ординарные и пробел, этих символах нет в УРЛ
    Ответ написан
    Комментировать
  • Философский вопрос, а заем вообще нужен атрибут disabled?

    EreminD
    @EreminD
    Кое-что умею
    Зачем нужен readonly, когда есть disabled..?

    А вообще, вот (в зеленой плашке):
    The difference between disabled and readonly is that read-only controls are still focusable, so the user can still select the text and interact with it, whereas disabled controls are entirely non-interactive. (For this reason, only text controls can be made read-only: it wouldn't make sense for checkboxes or buttons, for instances.)
    Ответ написан
    2 комментария
  • Можно ли использовать WHERE при JOIN?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Когда Вы пишите from table1, table2 where...
    sql сначала строит декартово произведение матриц (размером count(table1)*count(table2)), а затем получившуюся огромную таблицу фильтрует.

    Когда вы пишите join - sql делает фильтрацию на стадии построения декартова произведения, что существенно ускоряет процесс и уменьшает потребление памяти на запрос.

    В случае если в какой то из таблиц сильно меньше релевантных записей ( к примеру у нас в базе 1 000 000 пользователей, но всего 10 000 городов) или одна из таблиц не нужна для фильтрации всего запроса (например мы ищем пользователей-женщин без учета города проживания) будет сильно быстрее убрать 2ю таблицу из запроса вообще, получив в первом запросе данные из таблицы users, выбрав на ЯП нужные id и сформировав 2й запрос в базу для получения городов.

    select ... from users where user.sex = 0;
    select ... from city where city_id in (...)

    Imho использование from table1,table2 это признак профнепригодности (к слову как и sql_calc_found_rows хотя это к делу не относится)
    Ответ написан
    7 комментариев