• Где ошибка в коде?

    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 представляет собой набор ресурсов общих для приложения. Набор ресурсов это стили и скрипты которые необходимые для корректной работы приложение, и в них не место для других файлов
    Ответ написан
    Комментировать
  • Правильно ли я понимаю паттерн модели из MVC?

    arutyunov
    @arutyunov
    Mooza.ru — Делаем сайты
    Рекомендую посмотреть кусок выступления Дмитрия Науменко из команды Юи2: https://youtu.be/WL0-bd2Afho?t=5m55s

    Там он как раз говорит о разнице между моделью во фреймворке и моделью из МВС.
    Ответ написан
    4 комментария
  • Правильно ли я понимаю паттерн модели из MVC?

    IvanCher
    @IvanCher
    Мысли шире
    Вы представляете себе, что Модель это что-то конкретное, но на деле это просто абстрактный слой и Вы сами решаете какие классы в него входят, а какие нет. На деле в модели содержится ВСЁ, что связано с данными и бизнес-логикой над ними. Далее идет уже реализация, которая может быть очень и очень разной. Например, есть шаблоны проектирования ORM DataMapper и ActiveRecord. Они чуть ли не противоположно разные в реализации, но они обе модели. При этом есть более низкоуровневые архитектуры, например Domain Driven Development и Data Driven Development. В обоих случаях уровень Модели может быть размазан на несколько слоёв приложения.
    Я сейчас работаю в проекте с Domain Driven и там модель размазывается просто на кучу слоёв приложения. Как она будет размазана завист от того, какие слои для своего приложения Вы сами определили изначально.
    И Ваше утверждение, что большинство фреймворщиков ничего не понимают в этом - полная глупость. Фреймворк Симфони - это просто эталон академичности проектирования в пхп. На его основе Ларавель - тоже достаточно грамотный фреймворк. Есть еще Yii, которые пошли другим путем, но тоже очень четко разделяют внутри модель MVC, хотя и дают много возможности наговнокодить и всё смешать в кучу.
    Тут скорее Вы не понимаете, что модель - это не что-то конкретное, а лишь один из 3х компонентов, из парадигмы mvc, ответственный за хранение и изменение состояния данных. Реализаций может быть столько сколько существует программистов и даже больше.
    Еще более неопределенное - это то, как взаимодействуют эти 3 компонента из MVC между собой. Они могут на основе событийной модели взаимодействовать, или явно вызывая друг друга, и еще огромным числом разных способов.
    Касательно Вашего примера, то Вы описали слой хранения данных, переходящий в модель. Моделью, в Вашем случае, является 3ий уровень - строка таблицы(ну может и таблица тоже). 1ый уровень у Вас - это уровень, который должен синхронизировать модель с хранилищем данных. Причем таких "синхронизаторов" может быть несколько и хранилища могут быть очень разными. Например ORM и ODM. Они будут проэцировать и синхронизировать модели с хранилищями данных, но по сути к моделям они не относятся, хотя если нам нужно их всё же определить только в рамках MVC, то это конечно же будет моделью. Но в mvc есть много вещей, которые не относятся ни к одному из этих 3х компонентов, а являются связующими звеньями этих компонентов, например те же ORM, ODM, валидаторы(иногда их в модель зашивают, хотя они могут использоваться и во вне), роутинг, событийные компоненты, логер и прочее-прочее.
    Ответ написан
    4 комментария
  • Как сохранять большие тексты при частых, но незначительных изменениях?

    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 самописный плагин", то ответ становится менее очевидным)
    Ответ написан
    Комментировать