• Php pdo почему возвращает false?

    pickHabr
    @pickHabr
    fullstack разработчик
    То что
    new PDO($dsn, $username, $pass);
    возвращает false говорит о том, что он не может создать подключение к базе, значит скорее всего проблема где-то в твоих параметрах подключения. Проверить пароль? Проверить без
    charset=utf8
    ? Мб порт надо указать?
    Ответ написан
  • Связи в ООП, Агрегация в PHP как часто используется?

    pickHabr
    @pickHabr
    fullstack разработчик
    то только в виде композиции, а не агрегации.
    я бы сказал наооборот, чем новее код (и опытнее разработчики) тем чаще реализуют агрегацию, а не композицию и обусловлено это буквой D в SOLID
    Ответ написан
  • Laravel Request - как работает?

    pickHabr
    @pickHabr
    fullstack разработчик
    Потому что у тебя в request1 и в request2 лежит индекс одного и того же объекта https://www.php.net/manual/ru/language.oop5.refere...
    Ответ написан
    23 комментария
  • Как исправить ошибку Missing required parameter?

    pickHabr
    @pickHabr
    fullstack разработчик
    Привет!

    Вместо index.blade.php лучше бы ты предоставил как указан маршрут в web.php (f.e.) и не весь файл, а только один этот маршрут. Точно так же и с контроллером, все остальные методы кроме update можно было бы убрать.

    В ошибке сказано
    URI: admin_panel/services/{service} Missing parameter: service


    Я вижу несколько возможных причин:
    1
    action="{{ route('services.update', $services['id']) }}"
    указан не на той форме, которая отправляется (надо проверить html форму прежде чем нажать сабмит, если это так то надо привести отправляемую форму в порядок)
    2 в
    action="{{ route('services.update', $services['id']) }}"
    не всегда был
    $services['id']
    , а после добавления его в шаблон на фронте страница не обновлялась или закеширована (надо проверить html формы прежде чем нажать сабмит, если это так, то надо обновить страницу и проверить html формы еще раз, если в поле action все еще не подставлен айдишник, то надо выполнить php artisan view:clear на сервере и обновить страницу на фронте, если не помогает, то надо проверить, что измененный шаблон подкинут на сервер, а не лежит чисто локально
    3 таблица services не имеет primary key на id (надо выполнить миграцию, которая это добавит), можешь дополнить вопрос миграцией для создания таблицы services
    4 $services['id'] имеет значение null (надо дебажить и смотреть почему туда попадает такое значение, скорее всего оно будет таким потому что нужно поменять на $services->id но это не точно)
    Ответ написан
    5 комментариев
  • Как отследить прямое обращение к картинкам и выполнять php?

    pickHabr
    @pickHabr
    fullstack разработчик
    Если я правильно понял, то нужно, чтобы файлы отдавал nginx напрямую, а после этого нужно чтобы вызывался пхп код. Можно попробовать покопать в сторону post_action, эта директива позволяет выполнить дополнительные действия после того, как Nginx отдает ответ клиенту.

    Например что-то типо такого:
    server {
        //
    
        location ~* \.(jpg|jpeg|png|gif)$ {
            try_files $uri =404;
            post_action /post_handler.php;
        }
    }
    Ответ написан
    Комментировать
  • Почему при нажатии на кнопку слайдера картинка пропадает js?

    pickHabr
    @pickHabr
    fullstack разработчик
    Привет!

    Коммент выше решает твою проблему, а я с оффтопным моментом. Как-то странно что при движении влево переменная увеличивается, а при движении вправо уменьшается :D я бы поменял
    upBtn.addEventListener("click", () => {
      let index = cardIndex + 1;
      if (index >= cards.length) {
        index = 0;
      }
      show(index);
    });
    
    downBtn.addEventListener("click", () => { 
      let index = cardIndex - 1;
      if (index < 0) {
        index = cards.length - 1;
      }
      show(index);
    });
    Ответ написан
    1 комментарий
  • В чем ошибка в коде?

    pickHabr
    @pickHabr
    fullstack разработчик
    Привет, ознакомься с документацией

    https://laravel.com/docs/11.x/routing#dependency-i...

    И попробуй внести правки в свой код в соответствии с докой

    use Illuminate\Http\Request;
    
    Route::post('/contact/submit', function (Request $request) {
        return $request->all();
    })->name('contact-form');
    Ответ написан
    1 комментарий
  • Как передать значение из одной страницы в скрипт формы, чтобы результат работы этого скрипта вывести в новой вкладке?

    pickHabr
    @pickHabr
    fullstack разработчик
    Привет)

    Ну, можно сделать что-то вроде
    1) Нужный номер подставить как query параметр ссылки на стороне js (htt://page2?number=123) или подставить в какое-то поле с id со стороны пхп прежде чем выплюнуть страницу
    2) На второй странице
    $( document ).ready(function() {
        // если передал через ссылку
        let params = window.location
                           .search
                           .replace('?','')
                           .split('&')
                           .reduce(
                              function(p,e){
                                  let a = e.split('=');
                                  p[ decodeURIComponent(a[0])] = decodeURIComponent(a[1]);
                                  return p;
                              },
                              {}
                          );
        console.log( params);
    
        // если подставил в поле с бэка
        $("#id").val();
    });


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

    pickHabr
    @pickHabr
    fullstack разработчик
    Как выводить значения из базы данных, которые не равны нулю


    как сделать чтоьв выводило значения которые не равны Ничему


    Товарищ, определитесь!

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

    Если опираться только на код, то нужно что-то вроде

    SELECT zakaz FROM users
    where zakaz not null


    (если в поле может быть записано значение 0 или пустая строка то можно добавить
    and zakaz != 0 (если поле целочисленное)
    and zakaz != "" (если поле символьное)
    )

    PS
    Еще, мне кажется что-то не то со структурой БД если айди заказа хранится в таблице users
    Ответ написан
    Комментировать
  • Почему не работает POST-запрос от React(+Redux) к PHP?

    pickHabr
    @pickHabr
    fullstack разработчик
    Undefined array key "perem" on line 49


    $perem = $data['perem'];
    - вот тут у тебя нет в массиве data (а это переданный массив POST) нужной переменной.

    Пропиши
    var_dump($data);
    exit;

    перед
    $perem = $data['perem'];
    например и посмотри что там в принципе лежит (если будешь дергать из браузера то надо смотреть в разделе network response)

    UPD
    Не обратил внимание сразу, с фронта уходит

    Content-type: application/json


    PHP не умеет обрабатывать такое через суперглобальную переменную $_POST
    Поменяй либо получение данных с

    addTableNote($conn, $_POST);

    на
    $data = json_decode(file_get_contents('php://input'), true);
    addTableNote($conn, $data);


    либо с фронта отправляй как FormData
    Ответ написан
    2 комментария
  • Есть ли способ запустить vite/vue приложение без сервера?

    pickHabr
    @pickHabr
    fullstack разработчик
    чтобы его можно было просматривать без сервера и без npm run preview

    Да, можно

    в vue.config.js нужно чтобы было
    module.exports = defineConfig({
      transpileDependencies: true,
      outputDir: "./pathToSource",
      filenameHashing: false,
    })


    выполнить npm run build
    в index.html прописать линки до js/css в pathToSource

    запустить vite/vue приложение без сервера

    Локально да, на проде все равно будет использоваться сервер, в твоем случае сервер вк видимо, но это частный случай
    а в общем случае, даже если не нужна никакая логика на бэке, то для этого все равно понадобится как минимум настроеный apache/nginx
    Ответ написан
    Комментировать
  • Как преобразовать UNION-запрос в простой?

    pickHabr
    @pickHabr
    fullstack разработчик
    Наркомания, но должно работать

    SELECT
        CASE 
            WHEN FirstField LIKE '*о*' THEN FirstField
            WHEN SecondField LIKE '*о*' THEN SecondField
        END AS Field
    FROM Table
    WHERE FirstField LIKE '*о*'
    OR SecondField LIKE '*о*';


    UPD
    Хорошо, продолжаем наркоманить :D

    С учетом комментария Vitsliputsli

    SELECT DISTINCT
        CASE 
            WHEN t1.FirstField  LIKE '*о*' THEN t1.FirstField
            WHEN t2.SecondField  LIKE '*о*' THEN t2.SecondField
        END AS Field
    
    FROM Table t1
    
    LEFT JOIN Table t2 ON 1=1
    
    WHERE t1.FirstField LIKE '*о*'
       OR t2.SecondField LIKE '*о*';


    Добавили distinct чтобы не было повторений, добавили join той же таблицы, по t1 проверяем подходит ли FirstField по t2 - SecondField. Единственный вопрос, а допустимо ли в этой задаче использовать join)

    PS разумеется запрос говна, про оптимизацию речи не идет
    Ответ написан
    1 комментарий
  • Как синхронизировать ТГ-канал и сайт?

    pickHabr
    @pickHabr
    fullstack разработчик
    Возможно ли

    Да, это можно реализовать. Для этого нужно чтобы бэк бота вписывал нужные данные в базу/файловую систему, а фронт сайта запрашивал эти данные у бэка. (А чтобы не требовалась перезагрузка страницы можно повесить обновление данных на вебсокеты)

    Понимаю, возможно реализация платная

    Если вам нужна реализация, то формулируйте ТЗ и идите на фриланс
    Ответ написан
  • Почему может возникать mysql ошибка 2006, если timeout 28800?

    pickHabr
    @pickHabr
    fullstack разработчик
    Ещё пишут про буфер, однако у меня в данных SELECT * FROM joblist ORDER BY id DESC LIMIT 1, что не очень похоже на переполненный буфер.

    Это единственный запрос, который выполняется к этой базе?

    MySQL server has gone away - означает, что клиент потерял соединение с MySql сервером. Если есть другие запросы, которые сильно нагружают базу, то стоит попробовать увеличить буфер или настроить кластер или увеличить память. Если серьезной нагрузки нет, то стоит посмотреть в сторону смены сервера, на котором крутится mysql, на случай если проблема связана с сетью.

    Еще стоит глянуть что происходит в логах самого mysql, есть ли там что-то интересное.

    В качестве быстрого решения можно обернуть выполнение запроса в try catch, внутри catch пересоздать подключение и повторить попытку. Либо в catch делать запись например в файл что был фейл, завершать скрипт, а после перезапуска (например кроном) как-то это обрабатывать
    Ответ написан
  • Стоит ли работать в тех поддержке?

    pickHabr
    @pickHabr
    fullstack разработчик
    Стоит ли тратить время на развитие в IT с техподдержки?

    А почему нет? Эту работу тоже кто-то должен делать

    Есть ли там какое то карьерное развитие или это тупик?

    Разумеется, но лучше на 3 линию, да и в отделе поддержки тоже есть менеджмент, в который можно вырасти из специалиста

    или идти стажироваться тестировщиком/аналитиком вне компании

    Знаю лично аналитика, который раньше работал сотрудником поддержки в одном банке. Для аналитика важно понимать продукт, а когда ты видишь все его проблемные места изнутри поддержки это очень помогает, тебе стоит больше коммуницировать с командами разработки на предмет как и почему тут все сделано. Просто приставать к ним и мотать на ус, пригодится.

    Подытоживая. Если тебе совсем не нравится, то лучше уходи и доучивайся, если тебе норм, но хочется иметь в виду возможный рост в дальнейшем, то расти в поддержке есть куда, ди и путь в аналитику вполне не иллюзорен. Еще посоветую посматривать вакансии внутри компании и ходить собеседоваться на интересные тебе (хотя бы списываться с командами в которые открыта вакансия и пообщаться с ними)
    Ответ написан
    Комментировать
  • Почему unserialize возвращает пустое значение?

    pickHabr
    @pickHabr
    fullstack разработчик
    "Тип гостиницы" 13 символов, а в сериализованной строке указано как 25


    Кириллица это мультибайтовые символы, там где у тебя русские буквы там будет занято 2 байта. Типгостиницы - 12 букв * 2 = 24 + 1 пробел = 25.

    Почему в админке эта же самая строка десереализуется?


    Если у тебя есть один и тот же код, который в разных окружениях работает по разному, то это значит, что либо
    1) код все-таки не одинаковый
    2) есть различия в настройках окружения (например php.ini, env, конфиги)

    unserialize(htmlspecialcharsback($value));


    Как тебе уже подсказали, если у тебя проблема решается через htmlspecialcharsback значит где-то до сериализации есть htmlspecialchars которого быть не должнопро который ты не рассказал в вопросе)
    Ответ написан
    Комментировать
  • Как вывести сумму значений из MySQL в общую таблицу?

    pickHabr
    @pickHabr
    fullstack разработчик
    Можно выводить динамически. Если фронт отображается через html + php, то надо будет в цикле прописать еще один td и echo. Если через js, то соответственно там добавить вывод td с суммой
    Ответ написан
  • Как исправить ошибку Laravel 5.8 с правами на логирование?

    pickHabr
    @pickHabr
    fullstack разработчик
    sudo chown -R $USER:www-data storage
    sudo chown -R $USER:www-data bootstrap/cache
    chmod -R 775 storage
    chmod -R 775 bootstrap/cache
    Ответ написан
    Комментировать
  • Как применить свойство к псевдоэлементу?

    pickHabr
    @pickHabr
    fullstack разработчик
    Я немного поигрался, выглядит так, что лучше создать полноценный блок в качестве фоновой подложки, а не использовать псевдоэлемент. Достойного обоснования у меня нет)

    <div class="block">Lorem ipsum...</div>
    <div class="block-before"></div>


    .block {
        background: rgba(0,0,0, 0.5);
        width: 500px;
        height: 500px;
        display: block;
        margin: 50px;
        position: relative;
        backdrop-filter: blur(10px);
    }
      
     .block-before {
        content:""; 
        background: yellow;
        width: 500px;
        height: 200px;
        display: block;
        margin: 50px;
        position: absolute;
        top: 10px;
        right: 0;
        left: 10px;
        bottom: 0;
        z-index: -1;
    }
    Ответ написан
  • Как сделать проверку на корректную вложенность в скобки ((([])){})?

    pickHabr
    @pickHabr
    fullstack разработчик
    /**
     * @param {string} s
     * @return {boolean}
     */
    var isValid = function (s) {
        //hash function for partheses
        let map = { "}": "{", "]": "[", ")": "(" };
        let temp = [];
    
    
    
        //Iterates
        for(i in s){
            //if a index that matches a closing bracket - continue
            if(s[i] in map){
                //if the temp isn't empty, and the top of the stack is that closing bracket - pop it
                if(temp.length > 0 && temp[temp.length-1] === map[s[i]]){
                    temp.pop();
                }
                //else we break it - return false
                else{
                    return false;
                }
            }
            //else we push the opening bracket onto the stack
            else{
                temp.push(s[i]);
            }
        }
        //else we return true if the temp is empty
        return temp.length === 0;
    };


    Прямо в литкоде есть решения, можно открыть Solutions, отфильтровать по языку и читать с описанием, можно перейти к all submissions и выбрать самое быстрое решение.
    Ответ написан
    5 комментариев