Задать вопрос
  • Где ошибка в коде?

    DevMan
    @DevMan
    версия пыха старая. конкатенация в пропертях доступна только в 5.6+
    https://3v4l.org/XqSWF
    Ответ написан
    Комментировать
  • Как можно при сохранении картинки через base64 в БД уменьшить количество символов в результате?

    @AnneSmith
    самая ленивая
    а какой смысл пихать картинки в бд?
    у вас же нет аудита на семь лет назад
    Ответ написан
    8 комментариев
  • Как создать игровой мир?

    dio4
    @dio4
    team leader, system engineer, master of sports
    Сначала игровой мир надо...прочувствовать, продумать и...проиграть, хотя бы соло. Или написать сюжет(рассказ, книгу) и дать почитать другим; выложить в Интернет. Когда вы сами полюбите свой игровой мир, так как все любят fallout или forgotten realms или jagged alliance, - вот тогда можно переходить к технической стороне. А до этого момента - это будет не игровой мир, а жалкая выдумка, не стоящая ничьего внимания( в том числе и вашего, вы и сами его любить не будете). А без любви, какая игра может быть????
    Ответ написан
    5 комментариев
  • Какие есть варианты работы в IT без программирования?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Привлекает project management, но можно ли им стать без опыта работы программистом?
    Можно, даже нужно. Навыки программирования обычному PM скорее мешают.
    Нужно общее понимание предметной области и процесса разработки, которое в целом укладывается на листок формата А4 мелким текстом. А вот знания по управлению процессами нужны обязательно.

    Не люблю точные науки
    Главные личные качества PM - это точность в плане сроков, четкость в плане формулировок и умение брать на себя ответственность в плане принятия решений. Творчества в этой работе ровно 0.

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

    Хотите творчество и общаться с людьми - идите в дизайн / ux аналитику / маркетинг.
    Ответ написан
    2 комментария
  • Нужна ли программисту профильная математика?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Чем больше вы знаете, тем лучше. Как обычно, самым важным качеством программиста является поиск решения. Сначала правильного, потом оптимального. Иногда это математическое решение, иногда нет. Но если уж речь идёт об образовании, то его никогда мало не бывает. Неочевидное, нелогичное следствие - учиться надо будет всю жизнь. Эх, если бы мне об этом сказали в первом классе, я бы очень расстроился )))
    Ответ написан
    8 комментариев
  • Сокращенная запись условного оператора if, нельзя использовать без else?

    Xuxicheta
    @Xuxicheta
    инженер
    Используй
    условие && выполнение условия
    
    true && "hello world";
    аналогично
    false || "oh my gosh"
    Ответ написан
    6 комментариев
  • Можно ли в AppAsset публиковать произвольные файлы?

    qonand
    @qonand
    Software Engineer
    Зачем? Вы что-то делаете не то ... AppAsset наследуемый от \yii\web\AssetBundle представляет собой набор ресурсов общих для приложения. Набор ресурсов это стили и скрипты которые необходимые для корректной работы приложение, и в них не место для других файлов
    Ответ написан
    Комментировать
  • Как сохранять большие тексты при частых, но незначительных изменениях?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Произошедшие изменения на клиент сначала пишем в indexeddb/websql (localstorage используем только если нет первых 2-х ибо localstorage синхронный). Можно взять готовые обертки
    https://github.com/tantaman/LargeLocalStorage
    https://github.com/localForage/localForage
    https://github.com/yathit/ydn-db
    Также в localstorage храним флаг помнящий была ли последняя редакция из localstorage удачно отгружена на сервер.

    Дальше думаю понятно.
    Ответ написан
    2 комментария
  • Как сохранять большие тексты при частых, но незначительных изменениях?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Имхо редис + база, все что набирается хранится в клиенте, отсылается порциями на сервер с указанием что с какой позиции набиралось, из редиса вытаскивается текст, вставляется в нужные позиции, после чего сейвится обратно в редис, раз в эн минут все хреначится в базу, при отсутствии изменений в базу писать не нужно, проверяется хешем текста.
    Ответ написан
    Комментировать
  • Как сохранять большие тексты при частых, но незначительных изменениях?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    1. Для создания дельты изменений в чем бы то ни было (в тексте, или в бинарных данных и т.п.) есть утилиты/алгоритмы, уже готовые. Можете взять их и адаптировать под себя, например diff. Как это будет реализовано на уровне JS'а в браузере я пока не очень представляю, но гипотетически - это вполне возможно/реализуемо.

    Как решить эту проблему? Возможно ли частичное обновление поля в MySQL

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

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

    Как выявить частичные изменения, чтобы не гонять весь текст целиком, а только внесённые изменения? Поделитесь опытом.
    Ответ на этот вопрос содержится в 1-м абзаце, выше по тексту :)

    Кроме того, как только пользователей станет много, подозреваю, сервер ляжет.
    Довольно странно будет, если у Вас база ляжет от такой нагрузки... Это скорее больше похоже, опять таки, на серьёзные ошибки в архитектуре, а не проблемы БД/сервера как таковых.
    Ответ написан
    Комментировать
  • Как объединить PHP и HTML?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    2 комментария
  • Где сохраняются пароли если нет php файлов?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Учиться неохота, а зачет по информатике нужен? Купите наши курсы по sql injection и забудьте о несданных экзаменах! Все что вам нужно - найти php и mysql в коде странички! Спешите, только сегодня за уникальную цену - $9,99! Невежество и лень в подарок!

    PS:

    информация о sql инъекциях на просторах интернета на таких сайтах как Habrhabr и webware рассчитана на лохов .
    или же тема о инъекциях специально раскрывается не полностью...
    пил чай - засрал монитор, перепугал кота... )))
    Ответ написан
    2 комментария
  • Как не ждать ответа консольной команды при запуске ее из php?

    @Sad_Bro Автор вопроса
    На темной стороне.
    После бессонной ночи возвращаюсь к битве)

    я не понимаю что я не так делаю.
    есть примитивный клиент
    function buttonRunClick(node)
    {
        $('button.run_current').addClass('disabled'); //disable after click
        //search index row for adding new tr for container
        $(node).closest('tr').after('<tr id="progress_container"><td colspan="4"><div>progress container after run test</div></td></tr>');
    
    
        $.ajax({
            type: "GET",
            url: "/run_current",
            data: { id: node.tagName }
        }).done(function( msg ) {
            alert( "Data Saved: " + msg );
        });
    }


    метод контроллера
    все варианты что я опробовал

    1
    public function runCurrent()
        {
            $process = new Process('ping 8.8.8.8 -c 10 >/home/dmtry/buff &');
            $process->start();
    
            return 'done';
        }


    2
    //запуск shell скрипта в котором 
         // #!/bin/bash
        // sleep20s
    
            Proc_Close (Proc_Open("~/ping.sh --foo=1 &", Array (), $foo));
            return 'done'


    3

    exec ('/usr/bin/nohup ping 8.8.8.8 -c 10 >buffer 2>/dev/null &');
        //или 
        exec ('/usr/bin/nohup ping 8.8.8.8 -c 10 >/dev/null 2>/dev/null &');
       //или 
       system('ping 8.8.8.8 -c 10 >buffer 2>/dev/null &');
       //или 
     $cmd = 'ping 8.8.8.8 -c 10';
     $outputfile = '/home/dmtry/buff';
     $pidfile = '/home/dmtry/pid';
     exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile));
            return 'done'


    во всех случаях скрипт запускается и на этом все, ждем когда он прошагает, потом отдает return.
    пробовал перед exec($cmd) делать echo ''; он даже не запускается, каким то образом exec все равно выполняется первым.
    Система ubuntu 14.04 lts. php7.

    update!

    Наконец получил то что надо, возможно костыльно, но работает,
    помог совет отсюда stackoverflow.com/questions/14555971/php-exec-back...

    exec("screen -d -m -S my_php_session csv.php $file $user", $output);

    UPDATE

    Возникли проблемы с перенаправляением вывода
    Как перенаправить вывод команды в файл? поэтому screen тоже не подошел.
    Но вот еще одно аналогичное решение, короче по записи и не создает дополнительного процесса screen и с перенаправлением потока нет проблем
    exec("tmux -c 'ping 192.168.1.1 -c 10 >~/buff &'")
    Ответ написан
    2 комментария
  • Как сделать конструктор класса правильно?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Обычно это делается в отдельном методе, наподобие Save.

    У пользователя, которого нет в базе, $this->id будет нулевым.

    И для загрузки данных лучше сделать отдельный метод - Load.

    public function __construct($id = NULL)
    {
      $this->id = $id;
      $this->Load();
    }
    
    public function Load()
    {
      // идентификатор не указан, загружать данные не нужно
      if (!isset($this->id) || (int)$this->id == 0)
      {
        return false;
      }
    
      // указан идентификатор, загружаем данные в текущий экземпляр класса
      $mysqli = db_connect();
    
      $req = 'SELECT u.ID, u.name, u.age, u.city_id, c.city_name FROM users AS u '.
             'INNER JOIN cities AS c ON (c.city_id = u.city_id) '.
             'WHERE u.ID = '.$this->id; // опасно так передавать в запрос данные
    
      $res = $mysqli->query($req);
    
      if ($res !== false){
        if ($res->num_rows == 1 )
        {
          // смысла в цикле нет, ожидается ведь одна строка данных
          while ($row = $res->fetch_assoc())
          {
            $this->id = $row['ID'];
            $this->username =  $row['name'];
            $this->city_name = $row['city_name'];
            $this->city_id = $row['city_id'];
            $this->age = $row['age'];
          }
        }
        else
        {
          return false;
        }
      }
      else
      {
        return false;
      }
    }
    
    public function Save()
    {
      $sql = '';
      $params = [];
    
      if (!isset($this->id) || (int)$this->id == 0)
      {
        // запрос на добавление данных в базу
        $sql = 'INSERT INTO users (name, city_id, age) VALUES (?, ?, ?)';
        // параметры запроса
        $params = [$this->username, $this->city_id, $this->age];
      }
      else
      {
        // запрос на обновление данных в базе
        $sql = 'UPDATE users SET name = ?, city_id = ?, age = ? WHERE ID = ?';
        // параметры запроса
        $params = [$this->username, $this->city_id, $this->age, $this->id];
      }
    
      // код выполнения запроса
      // не могу быть уверен в коде, давно не писал и проверять лень
      // должно быть что-то типа такого:
    
      $mysqli = db_connect(); // лучше сделать отдельный метод для создания и закрытия соединений
    
      // подготавливаем запрос
      $s = $mysqli->prepare($sql);
    
      // выполняем запрос с указанными параметрами
      $s->execute($params);
    
      // тут еще неплохо бы закрыть все соединения :-)
    }

    Можно пойти дальше и сделать базовый класс, который будет содержать готовые методы Load и Save.
    Либо сделать отдельный класс, который будет получать данные и заполнять экземпляры классов этими данными, сохранять и удалять данные. В таком случае классы таблиц (сущности) будут просто описывать структуру данных в базе и не будут выполнять никаких действий. Этот вариант мне нравится больше, т.к. он чище (проще) и более гибкий.

    Придется придумать, как сопоставлять данные, если имена свойств не соответствую именам полей в базе. Скорее всего интерфейсы нужно будет использовать. Также учесть свойства, которые не определены в базе (которые следует игнорировать).

    Для работы со структурой классов потребуется использовать Reflection.
    В общих чертах примерно следующим образом:

    // создаем экземпляр класса User
    $instance = new User();
    
    // получаем информацию об экземпляре класса
    $r = new \ReflectionClass($instance);
    
    // получаем список публичных свойств
    $propeties = $r->getProperties(\ReflectionProperty::IS_PUBLIC);
    
    // перебираем все свойства
    foreach ($propeties as $property)
    {
      // получаем имя свойства
      $propertyName = $property->getName();
      // получаем значение свойства
      $propertyValue = $property->getValue();
      // и далее можно использовать полученную информацию
      // для формирования динамических запросов к базе
    
      // полученные из базы данные можно передать в нужные свойства
      $property->setValue("значение из базы");
    }

    Готовое решение найти будет проще :-)
    Ответ написан
    1 комментарий
  • Как организовать связь "родительской" таблицы с 2мя одинаковыми наборами данных в "дочерних"?

    bitver
    @bitver
    Структура у вас нормальная, если учитывать, что в таблице В есть столбец оптсывающий тип.
    Есть другой вариант это все-же сделать 2 разные таблицы, так как для разных сущностей одну таблицу делать это бред, хоть и типы данных у них совпадают.
    Ответ написан
    3 комментария
  • Как при клике на checkbox закрыть блок?

    @soledar10
    html css3 js jquery
    Ответ написан
    Комментировать
  • Готовый плагин vs самописный костыль?

    pm_wanderer
    @pm_wanderer
    junior-HTML
    Если перефразировать вопрос как "Готовый костыль vs самописный плагин", то ответ становится менее очевидным)
    Ответ написан
    Комментировать
  • Лучшее решение для качественной адаптивной верстки?

    @Yadalay
    Php, Mysql, Html, Css, Js/Jquery/Ajax, Laravel
    Добрый день!
    Попробуйте фреймворк от гугла - materializecss.com
    Ответ написан
    1 комментарий
  • Вызов "obj.func()" или" (obj.func)()", есть ли различия?

    obj.func - возвращает функцию

    Верно.

    где используют второй вариант?

    Например, когда нужно, чтобы анонимная функция-обертка выполнилась сразу же после своего объявления. Так часто поступают разработчики плагинов для jQuery, т.к. им необходимо инкапсулировать код плагина, передав в его область видимости некоторые переменные и константы.
    (function($, window, document, undefined) {
        // ...
    })(jQuery, window, document, undefined);
    Ответ написан
    1 комментарий
  • Как определить права для доступа к сущности?

    Прилетел запрос в контроллер, узнали к какой роли относится авторизованный пользователь, исходя из этого делаем запрос к БД. Не?
    Или пришел запрос от пользователя, запросили в БД какие группы ему доступны, сделали к ним запрос.
    Ответ написан
    Комментировать