• Как удалить из строки все, кроме?

    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 комментариев
  • Как безопасно использовать sqlite3 в php?

    MaxDukov
    @MaxDukov
    впишусь в проект как SRE/DevOps.
    PDO?
    Хотя какой-бы ни был инструмент - им надо уметь пользоваться. в принципе в sql-инъекциях нет ничего невероятного, и PDO дает все необходимые для защиты инструменты.
    Ответ написан
    Комментировать
  • Где взять хорошие чужие коды для разбора в целях обучения?

    uDenX
    @uDenX
    PHP Developer
    Можно взять репозиторий крупного фрейворка и изучать(например: symfony, yii и т.д.)
    Ответ написан
    Комментировать
  • Как поймать вторую строку в регулярных выражениях?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    /([^"]*)$/
    Ответ написан
    Комментировать
  • Сортировка значений в массиве по дате?

    SilenceOfWinter
    @SilenceOfWinter Куратор тега PHP
    та еще зажигалка...
    а что мешает хранить даты в виде год, месяц, день? тогда сортировка значительно упрощается
    Ответ написан
    4 комментария
  • Какой поставить ценник на лендинг, при том что я с Украины, а работодатель с России и у него на сайте лендинги от 30к?

    DevMan
    @DevMan
    не важно кто заказчик, откуда он и откуда ты.
    значение имеет только то, за сколько ты готов сделать эту работу.
    Ответ написан
    19 комментариев
  • Обязателен ли индекс для внешнего ключа InnoDB MySQL?

    qonand
    @qonand
    Software Engineer
    Обязателен ли индекс для внешнего ключа InnoDB MySQL?

    Да обязателен

    Таблица нормально создается и без индекса.

    При создании таблицы индекс на внешние ключи добавляется автоматически.

    Некоторые не советуют создавать индексы при проектировании таблиц, только при накоплении нескольких тысяч записей в таблице для ускорения запросов

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

    Вопрос 1: зачем встроили создание индекса?

    Это плата за независимость от СУБД

    Вопрос 2: разве при удалении таблицы индекс и ключ не удаляются вместе с ней? Или в разных СУБД бывает по-разному?

    Аналогично с предыдущим пунктом, это плата за независимость от СУБД
    Ответ написан
    2 комментария