Задать вопрос
  • Передаёт пустые значение в БД, как это решить?

    @quiplunar
    Ну для начала вам нужно начать использовать php pdo, уже 2020 год на дворе.

    А вот рабочий код:

    $db = new PDO('mysql:host=...;dbname=...', $user, $pass);
    
    if ( !isset($_POST['name']) || !isset($_POST['lastname']) || !isset($_POST['email']) || !isset($_POST['pass']) ) {
         echo 'Не все данные заполнены!!!';
         die;
    }
    
    $name = $_POST['name'];
    $lastname = $_POST['lastname'];
    $email = $_POST['email'];
    $pass = $_POST['pass'];
    
    $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, lastname, email, password) VALUES (:name, :lastname, :email, :password)");
    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':lastname', $lastname);
    $stmt->bindParam(':email', $email);
    $stmt->bindParam(':password', $password);
    $falg = $stmt->execute();
    
    if ($flag) {
         echo 'Успешно';
         die;
    } else {
         echo 'Ошибка';
         die;
    }
    Ответ написан
    9 комментариев
  • Передаёт пустые значение в БД, как это решить?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    ...
    Ну все написано же.
    Вы открыли страницу.
    Выполняется
    $name = $_POST['name'];
    Т.к нет никакого пост запроса, то $_POST['name'] не существует, в переменную $name записывается null и об этом кидается нотис.

    Нотис не останавливает скрипт и все выполняется дальше.
    В базу входит вставка null что абсолютно валидно.

    if (isset($_POST[]))должно вообще вызывать ошибку синтаксиса, т.к это бесмысленная запись.
    Если проверять - то проверять конкретные значения
    if (isset($_POST['name']) && isset($_POST['lastname']) && ... и тд) {
    Ответ написан
    2 комментария
  • Как подключиться к Xdebug запущенному в Docker контейнере на удаленной машине?

    voskobovich
    @voskobovich Автор вопроса
    PHP Developer | 8+ years exp.
    Вот развернутый ответ на мой вопрос.

    Рассмотрим ситуацию со стороны удаленного сервера на котором запущен докер контейнер.
    Докер уже позаботился о бОльшей части проблемы и сделал все роуты так, что ты из контейнера можно было пинговать интерфейс eth0, через который должен поступать интернет на серверную машину. Мало того, из контейнера можно пинговать любой хост на докер-хосте, кроме 127.0.0.1 самого хоста - по вполне понятным причинам (127.0.0.1 из контейнера будет lo интерфейс самого контейнера).
    Допустим IP на eth0 вашего хоста 10.45.6.87. То есть пинг из докер контейнера на 10.45.6.87 должен проходить успешно.
    А раз eth0 это выход во внешний мир, значит можно xdebug`у сказать, что клиент будет на хосту 10.45.6.87 порт 9000, пусть там его ждет. Мы же потом сделаем туда SSH тунель.

    Создаем тунель.
    Пробрасываем удаленный порт через SSH-тунель на локальную машину
    ssh -R 9000:localhost:9000 user@server.com
    и рассчитываем на то, что в итоге бинд на удаленной стороне будет выглядеть так
    10.45.6.87:9000 => 127.0.0.1:9000
    но мы сильно ошибаемся :)
    И эта ошибка стоит нам кучи времени.

    Давайте посмотрим что нам скажет netstat -plnt.
    А сказать он должен, что после запуска тунеля, на удаленной машине мы имеем бинд на
    127.0.0.1:9000, а не 10.45.6.87:9000 как ожидали.
    То есть, получается, что xdebug ждет клиента на 10.45.6.87:9000, а после открытия тунеля клиент оказывается на 127.0.0.1:9000.
    Беда в том, что забиндить клиента мы можем только на локальный хост.
    Так написано в доке man ssh.

    Из контейнера мы 127.0.0.1:9000 докер-хоста увидеть не можем, а значит остается только сделать роутинг пакетов с 10.45.6.87:9000 на 127.0.0.1:9000 внутри удаленной машины.
    Сделать это можно множеством способом, в том числе и iptables. Лично я сделал еще один SSH тунель внутри своего сервера вот так:

    1. В конфигах xdebug указываем
    xdebug.remote_port = 9001
    xdebuh.remote_host = 10.45.6.87

    2. На свою локальную машину через тунель с виртуалки прокидываем порт 9000.
    ssh -R 9000:127.0.0.1:9000 user@server.com
    3. На локальной машине создаем тунель с порта 9000 на 9001
    ssh -g -L 9001:localhost:9000 -f -N 127.0.0.1
    Вот и все.

    Но стоит учесть, что это решение рассчитано только на одного разработчика и полно костылей.
    Так что через пару дней после понятия проблемы я поднял на том же сервере OpenVPN сервер в докере и проблема отпала сама собой.
    Поясняю. VPN создает виртуальную локальную сеть. Моя локальная машина и моя виртуалка которая находится на серверах хостинг-провайдера оказывается в одной локальной сети. А раз так. В таком случае, я могу из docker-контейнера запущеном на виртуалке пинговать свою локальную машину. Значит Xdebug будет подключаться сразу к моей локальной машине без всяких пробросов и костылей.

    При таком раскладе можно настроить Xdebug двумя способами.
    Первый.
    Xdebug будет стучаться на конкретный IP.
    xdebug.remote_port = 9000
    xdebug.remote_host = <IP локальной машины>

    Это полезно когда вы один разработчик на проекте и нужно отлаживать консольные скрипты.

    Второй.
    Xdebug будет стучаться на IP с которого пришел запрос.
    xdebug.remote_connect_back=1
    xdebug.remote_port = 9000

    Удобно, когда работает команда разработчиков, но не удобен когда нужно отладить консольный скрипт. При запуске скрипта в консоли нужно передавать Xdebug`у IP локальной машины разработчика, чтобы он знал куда отдавать дебаг-логи.
    Ответ написан
    1 комментарий
  • Libreoffice Headless. Почему не работает конвертация XLS в pdf, а DOCX в pdf работает?

    coderisimo
    @coderisimo Автор вопроса
    Вопрос решился повторной переустановкой.
    Ответ написан
    Комментировать
  • Как правильно протестировать Express приложение? Запуск http сервера - это норма или нет?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Не вижу ни каких проблем связанных с использованием http серева при тестах. Более того, экспресс сам по себе является таким сервером, и все его роутеры завязаны на него, получая в реквесте кучу информации, включая http заголовки и много чего еще. Теоретически наверно можно создать систему тестирования, работающую без запуска реального сервера, но для этого по крайней мере прийдется написать свой велосипед, который будет делать вид что он http сервер и подсунуть его в экспесс вместо реального. Более того, такой велосипед должен будет в полном объеме эмулировать api модуля http. Возможно такой велик даже существует, но все это кажется мне гораздо более ненадежным и неимеющим смысла. Хотя решать конечно Вам.
    Ответ написан
    4 комментария
  • Как сделать правильную умную кнопку Назад в VueJS?

    alvvi
    @alvvi
    export default apathy;
    Так хорошо, вроде бы все классно. Теперь проблема с прямым переходом по ссылке в запись решена, только вот появляется другая проблема. Позиционирование скролла. При переходе go(-1) у нас сохраняются все записи которые были загружены в список, а при переходе to="/posts" компонент заново загружает записи и позиционируется вверху. Ну ладно, позиционирование, компонент просто еще раз начинает загружать данные.

    Тут не понятно о каком позициноирование и загрузке идет речь, если у вас рендеринг различается при переходе на экран с постами через /posts и через router.go(-1) - это проблема другого характера и решать ее нужно вне этого вопроса. Различаться он может только отсутствием подгрузки во втором варианте, если вы не кэшируете данные и это нормально.
    Проблема третья. Если, допустим, мы перешли в запись не с общего списка, а с предложенных новостей в каком то другом посте блога, то кнопка "назад" должна все-таки вести назад на предыдущую запись, а не в общий список.

    Пишите в Store название роута куда нужно ридеректить при нажатии на Назад, на beforeRouteLeave экрана с предложенными новостями - меняете на другой роут.
    Вроде-бы это как то реализуется через Хуки роутов, но к сожалению у меня нет такого опыта работы с ними.

    В документации есть более чем подробная информация о всех хуках, читайте, пробуйте, получайте опыт.
    Ответ написан
    Комментировать
  • Как передать в дочерний компонент объект и изменять его внутри дочернего, не влияя на родительский VUE.js?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Подключайте lodash, используйте cloneDeep, например:

    data() {
      return {
        order: _.cloneDeep(this.editOrder),
      };
    },

    Или пишите собственный метод клонирования объекта.
    Ответ написан
    1 комментарий
  • Как в vuejs передать параметры компоненту через роутинг?

    Fragster
    @Fragster
    помогло? отметь решением!
    <router-view :prop="var"> работает, но вообще, если такой вопрос возникает, то я бы смотрел в сторону vuex
    Ответ написан
    Комментировать
  • Как делать server-side rendering React.js на php?

    Делайте на PHP rest API и отдельно ставьте nodejs для рендеринга фронтенда... и будет вам счастье!)
    Ответ написан
    Комментировать
  • Разве Composer бесполезен в 2017?

    miraage
    @miraage
    Старый прогер
    же покинуть команду

    Я бы выбрал этот вариант.

    Либо пойти к начальству выше, рассказать что они все некомпетентны, уволить их, стать самому лидом и набрать нормальную команду. Но тут можно услышать штуки про "бизнес", "всё работает, не трогай" итд.
    Ответ написан
    3 комментария
  • Разве Composer бесполезен в 2017?

    opium
    @opium
    Просто люблю качественно работать
    очевидно что тимлид застрял в прошлом не более того
    Ответ написан
    Комментировать
  • Разве Composer бесполезен в 2017?

    Тут мне видится проблема в самом тимлиде. Ему просто не понравилось, что какой-то стажер начал тыкать его мордой в его же дерьмо.
    Ответ написан
    Комментировать
  • Разве Composer бесполезен в 2017?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Вали от туда

    А вообще вопрос глуповат. Если там php 5.4 и Kohana старенькая, то конечно они не используют композер.
    Если нет тестов — не всегда плохо, очень много проектов без тестов работают. Да там ты не научишься хорошему программированию, но не так все ужасно... можно потихоньку их притащить, но не всегда это нужно бизнесу (вообще это задачи тимлидов и гигиены разработчиков)

    А вот ответ Тимлида ужасен. Почему это выяснилось не на собеседовании?

    Не ужели с вашим подходом к программированию и опытом вас не взяли в компанию получше?

    UPD: Очень хороший ответ ниже по ссылке -- Разве Composer бесполезен в 2017?
    Ответ написан
    3 комментария
  • На чем в 2017м писать десктопное приложение под винду?

    Ni55aN
    @Ni55aN
    Под винду на старте будет проще .NET (например WPF). Естественно, Visual Studio в качестве IDE, и язык C#
    Ответ написан
    14 комментариев
  • Селекты из таблицы на 5 млн строк. Если разбить её на 100 таблиц - будет выигрыш в производительности?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Поддерживаю longclaps, вы что, алиекспресс админите? откуда в таблице товаров 5М строк, вы что, спички поштучно учитываете? Это номер раз, второе - если фильтры такие забубенные - делайте в 2-3 запроса через бэк, что у вас там, пых, нода, джанга, ограничивайте по уму количество товаров в первой выборке по самому быстрому индексу и самой ограничивающей выборке, например все товары выбранной категории, далее филтр только на результат выборки по типу id in(1,2,3,4). И все же скажите, не мучьте, ОТКУДА СТОЛЬКО ТОВАРОВ БЛИН, я ж не засну теперь...
    Ответ написан
    14 комментариев
  • Бэкап через git - идиотизм?

    2ord
    @2ord
    Вместо голого git лучше bup, boar, git-annex, ... Bacula.
    Ответ написан
    Комментировать
  • Бэкап через git - идиотизм?

    dummyman
    @dummyman
    диссидент-схизматик
    Для этого есть специальные средства Office Web Apps Server. Читай git для офисных форматов: хранит версии, обеспечивает совместное редактирование, сам сделает бэкап, еще и через браузер можно работать, если у кого "нормальная" ОС.
    Ответ написан
    Комментировать
  • Бэкап через git - идиотизм?

    zooks
    @zooks
    Frontend
    Git - это VCS, т.е. система управления версиями. Но никак не инструмент бекапа.
    Обычно бекапят через rsync.
    Ответ написан
    Комментировать
  • Бэкап через git - идиотизм?

    git annex - децентрализованная система версионирования и бекапирования поверх git. Отлично работает с бинариками, из коробки поддерживает бекап на S3. Для бинариков и разрабатывалась.
    Ответ написан
    Комментировать