• Как подготовиться к устройству на работу?

    Decadal
    @Decadal
    Насколько реально вам собраться, только вам и известно.
    Не надо "хотеть попробовать", пробуйте и всё. Сложно понять, что именно нужно для обретения рабочего места? Ходите на собеседования. Зададут вопросы, дадут тестовые задания, вы поймёте, где пробелы в знаниях и практике.
    Куда лучше сначала поставить себе цель решать реальные задачи, а не "найти работу". В IT платят хорошие деньги не тем, кто ищет работу, а тем, кто решает задачи.
    Какие задачи? Какие угодно. Сделать очередную CMS? Вперёд. Сделать какую-нибудь онлайн-кассу? Делайте. Тогда вы начнёте ставить перед собой практичные вопросы, искать на них ответы и принимать решения, а это и есть опыт.
    Ответ написан
    Комментировать
  • Как организовать связь "родительской" таблицы с 2мя одинаковыми наборами данных в "дочерних"?

    Decadal
    @Decadal
    Сделайте промежуточную таблицу с ключами id_a, id_b1, id_b2. У вас появится сущность, которая описывает сложную связь между А и B, только учтите симметричность id_b1 id_b2
    Ответ написан
  • Почему две параллельные транзакции не блокируют друг друга?

    Decadal
    @Decadal
    думаю, идею можно подсмотреть здесь: dr-magic.blogspot.com/2010/01/3.html
    и ещё один ресурс: https://msdn.microsoft.com/ru-ru/library/aa0416cz(...
    то есть, при сохранении нужно сначала проверить, совпадает ли версия записи, которая бралась транзакцией в начале, с версией, которая на сервере сейчас. Если нет - повторно совершать транзакцию с обновлёнными данными.
    в Gii, генераторе для yii2, есть даже поле под такие потребности - lock называется.

    Также, если говорить конкретно про вашу ситуацию, можно переопределить ActiveQuery - чтобы он выполнял апдейт в таком стиле -
    UPDATE Table1 Set Col1 = :new_val1, lock = :old_lock + 1
    WHERE (lock = :old_lock)
    Ответ написан
  • Как составить кросс-доменный запрос?

    Decadal
    @Decadal
    ajax работает для кросс-доменных запросов только если на сервере стоит Access-Control-Allow-Origin - * заголовок.
    можете убедиться, что проблема именно в этом, открыв консоль браузера и посмотрев на лог ошибок. Вам придётся задействовать back-end, скорее всего.
    Ответ написан
    Комментировать
  • Как защититься от mysql запросов?

    Decadal
    @Decadal
    Если вам тематика не интересна, то просто оберните все переменные, которые передаются в запрос, функцией mysqli_real_escape_string();
    Если интересна - вперёд, к PDO
    *ой, у вас mysql, господи. Тогда mysql_real_escape_string();
    но это очень грустно, да
    Ответ написан
    5 комментариев
  • VK API photos.saveWallPhoto возвращает Invalid hash. Что не так?

    Decadal
    @Decadal
    Постит сам себе на стену фотку.
    VK.Api.call('photos.getWallUploadServer', {}, function (answer) {
        up_url = answer.response.upload_url; // получаем upload_url, куда загружать фото
        $.ajax({
            'type': 'POST',
            'url': apiPoint + '/post-send', //экшн моего сервера, ниже приведу его текст
            data: {
                link: up_url, 
                file: fileName //имя файла, который я хочу загрузить в вк. Лежит на моем сервере
            },
            success: function (request) {
                request = JSON.parse(request);// параметры для сохранения
                //  request.user_id = response.session.mid; 
                VK.Api.call('photos.saveWallPhoto',  // сохраняем
                    request, // передаем параметры полученные от post + uid_того_кому_отправляешь
                    function (result) { // данные о сохраненном фото
                        console.log(result.response[0].id);
                        VK.Api.call('wall.post', // постим на стену
                            { 
                                //   owner_id : result.response[0].owner_id,
                                attachments: result.response[0].id,
                                message: inputedTxt
                            }, 
                            function (r) {
                                if (r.error) {
                                    console.log(r.error);
                                    return false;
                                }
                            });
                    }
                );
            }
        });
    });


    public function actionPostSend() // это то что было в js как apiPoint + '/post-send'
        {
            $this->returnFormatJson(); //выставляю возвращаемый формат
            $fileName = $this->getRequest('post','file'); // принимаю имя файла
            $curl = new CurlHelper();
            $rez = $curl->sendFile([
                'url' => $this->getRequest('post','link', ''),
                'file' => $this->userUpload . DIRECTORY_SEPARATOR . $fileName //физический путь к файлу
            ]);
            return (isset($rez["html"]))
                ? $rez["html"]
                : false;
        }


    пардон, что пришёл с этим своим php.
    Надеюсь, поможет.
    Ответ написан
  • При сохранение в базу - сохраняет знаки ????? а не кириллицу?

    Decadal
    @Decadal
    $mysqli->set_charset("utf8")
    указывается ли кодировка для базы данных (если не используется фреймворк)?
    убедитесь, что кодировка при соединении с базой данных тоже задаётся и что таблицы ей соответствуют.
    JavaScript работает только в utf8. К слову, если вывести полученные данные в php, вы сразу увидите, портит ли их JavaScript или они попадают на сервер целыми, а портятся уже в самой бд.
    Ответ написан
    5 комментариев
  • Как выкачивать страницы второго уровня simple_html_dom.php?

    Decadal
    @Decadal
    //в теле цикла
    $linkPage = file_get_html($element->href);
    // и лучше сделать рекурсивно - оформить парсинг страниц как функцию, принимающую html и кинуть этот контент в неё же 
    //а это для решения вашей задачи
    file_put_contents(<хэш имени файла>, $linkPage);

    если вам нужно спарсить не только страницу, но и всё, на что ссылается целевая страница, то лучше использовать cURL. По крайней мере, если уровень вложенности будет больше двух.
    Ответ написан
    Комментировать
  • Как исправить ошибку в phpmyadmin?

    Decadal
    @Decadal
    Права на базу данных opencart отсутствуют у того юзера, под которым вы залогинены
    Зайдите под юзером с правами или переназначьте их на этого пользователя
    Ответ написан
    Комментировать
  • Как сказать серверу, что все абсолютные пути должны начинаться с текущей директории?

    Decadal
    @Decadal
    опция DocumentRoot определяет где лежат файлы для веб доступа. Обычно эта опция находится в файле:
    /etc/apache2/httpd.conf или /etc/apache2/apache.conf
    если её там нет, то добавить в файл конфигурации строку
    DocumentRoot "C:/Sites/home/localhost/www"
    или
    DocumentRoot "/var/www/your_domain/a/b"
    после чего перезагрузить апач
    возможно, это подойдёт для решения вашей проблемы
    Ответ написан
    3 комментария
  • Правильно ли я делаю подзапрос?

    Decadal
    @Decadal
    upd: Убери as x и лишние скобки. должно быть in (запрос).
    Ответ написан
  • Чем отличается Riot.js от react.js?

    Decadal
    @Decadal
    Ответ написан
    Комментировать
  • Как реализовать следующее в JS?

    Decadal
    @Decadal
    (".open-1").click(function() {
       var opened = $(this).data("opened"),
       $bTag = $("b");
       if(opened)
       {
          $(this).html("+");
          $bTag.fadeIn(0);
          $(this).data("opened","");
       }
       else 
       {
          $(this).html("-");
          $bTag.fadeOut(0);
          $(this).data("opened","1");
       }
        $(".answer-one").slideToggle();
      })

    но учтите, что при использовании нескольких элементов такого вида вы должны оборачивать каждый элемент в некоторый родительский контейнер, и указывать родителя при работе с тегом b. На данный момент код, который подхватывает "b", будет работать со всей страницей вообще.

    каждая конструкция такого вопроса должна представлять из себя следующее:
    <div class="quest-content">
    <div class="open">+</div>
    <b>Вопрос? </b>
    <div class="answer">Всплывающий текст-подсказка</div>
    </div>


    тогда вы сможете создать несколько экземпляров (просто копировать-вставить разметку выше), задать в каждом - свой текст, вопрос и прочее, и написать общий код:

    (".open").click(function() {
       var opened = $(this).data("opened"),
       $parent = $(this).parent(".quest-content"),
       $bTag = $parent.find("b");
       if(opened)
       {
          $(this).html("+");
          $bTag.fadeIn(0);
          $(this).data("opened","");
       }
       else 
       {
          $(this).html("-");
          $bTag.fadeOut(0);
          $(this).data("opened","1");
       }
        $parent.find(".answer").slideToggle();
      })


    это, наверное, плохо оптимизировано, но должно работать.
    Ответ написан
    5 комментариев
  • Кнопка показать больше, как сделать что бы скрывала только часть текста?

    Decadal
    @Decadal
    А вы сделайте блок, в который не всё влазит. CSS-класс с конкретной высотой и overflow-y: hidden;
    По нажатию на "показать всё" CSS-класс удалять, и блок сам развернётся "во весь рост".
    Ответ написан
  • Готовый плагин vs самописный костыль?

    Decadal
    @Decadal
    Ответ на ваш вопрос зависит от контекста применения того или иного решения. Работаете ли вы над проектом сам или командой? Документируете ли свои костыли или такой привычки не имеете? Может возникнуть потребность отдать все исходники кому-то, или приобщить юниора к сопровождению вашей системы, и всякое такое.
    Слишком мало сказано, чтобы дать вам конкретный ответ.
    Если над проектом работает больше одного человека или проект в перспективе будет развиваться, просто используйте плагин. Гибкость это вклад в будущее.
    Если вы решите, что ваш костыль достаточно прост, юзабелен, понятно описан, а в будущем быстро и безболезненно может быть заменён на плагин, оставьте костыль.
    Ответ написан
    Комментировать
  • Будет ли выполнятся PHP скрипты при закрытие веб страницы?

    Decadal
    @Decadal
    1) Браузер или его альтернатива отправляет запрос на сервер. 2) Сервер обрабатывает запрос (этот момент и есть началом работы php-скрипта). 3) Сервер возвращает ответ на запрос (факт отправки ответа говорит о том, что php-скрипт прекратил своё выполнение, т.е., результатом выполнения php-скрипта есть ответ браузеру).

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

    Decadal
    @Decadal
    учитывая то что по умолчанию в функции render $actionData = [], вы подразумеваете, что это нормально. Нет возможности выбирать, какому параметру оставлять значение по умолчанию, а какому присваивать, поэтому выживаем как можем
    upd:
    если вас этот факт смущает, сделайте часть параметров передаваемыми через ассоциативный массив.
    и будет у вас
    function render($actionView, $params = []) {
    // понеслось 
     $actionData = (isset($params["actionData"]) && $params["actionData"]) 
     ? $params["actionData"]
    : [];
    //и тд
    }
    Ответ написан
    Комментировать
  • Подойдет ли Флэнаган книг для js?

    Decadal
    @Decadal
    если вы про ту, которая на 1000+ страниц, то она не скоро устареет, но изучение js лучше начать с электронных ресурсов наподобиe https://learn.javascript.ru/
    Флэнаган скорее как справочник хорош.
    Ответ написан
    Комментировать
  • Не работает preventDefault Что я неправильно сделал?

    Decadal
    @Decadal
    https://jsfiddle.net/0mn1L72m/

    Всё нормально работает. Скорее всего, у вас в другой части JavaScript есть ошибка, которая не позволяет выполнить данный фрагмент кода, и вас кидает по ссылке как обычно.
    Ответ написан
  • Как добавить переменные в модель формы?

    Decadal
    @Decadal
    Модель описывает структуру сущности как таковой. Если вы извлекаете все записи из БД, то формируете массив данных, описывающих одну и ту же сущность. Поэтому для обработки массива нужно создать другую модель, которая будет содержать в себе массив Names, и вот уже в него будут попадать ваши чекбоксы. Кстати, было бы проще вам помочь, если бы вы сказали, что делает форма на главной.

    Во вьюхе, чтобы передать массив данных, нужно рендерить что-то вроде <input name="names[]" type="checkbox">
    в цикле
    как сделать это в стиле yii2, не знаю, не задавался вопросом (кстати, yii в теги)
    upd:
    Вот и вопрос, как добавлять в модель формы эти переменные?

    ещё раз: эти переменные не требуют того, чтобы быть описаными в модели поимённо, поскольку смыславая нагрузка у них одна и та же - это значения поля "name".
    Поэтому хранить их следует в другой модели, у которой есть поле names, обозначающее массив имён. Тогда ваш вопрос уйдёт в сторону от создания динамической модели с полями на основе данных, и упрётся только в рендер чекбоксов из массива данных и передачу массива в поле модели.
    Ответ написан
    1 комментарий