Ответы пользователя по тегу PHP
  • Как вывести дочерние категории через событие ajax?

    rc-dm
    @rc-dm
    Full-Stack Web Developer
    Тебе нужно повесить событие изменения (change) на select, затем отправить AJAX к серверному скрипту который вернёт JSON список дочерних категорий для только что выбранной категории.

    Пример для JQuery:
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title></title>
      </head>
      <body>
    
        <!-- Select родительских категорий -->
        <select name="categoryfilter">
          <option disabled="disabled" selected value="">Выберите категорию</option>
          <option value="1">Категория 1</option>
          <option value="2">Категория 2</option>
        </select>
    
        <!-- Select дочерних категорий -->
        <select name="subcategories"></select>
    
        <!-- Подключение JQuery для примера -->
        <script
            src="https://code.jquery.com/jquery-3.6.0.min.js"
            integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
            crossorigin="anonymous"></script>
    
        <!-- Логика клиентской части -->
        <script type="text/javascript">
          // Вешаем событие изменения на селект категорий
          $('select[name="categoryfilter"]').on('change', function(){
            let val = $(this).val(); // value только что выбранной категории
            $('select[name="categoryfilter"]').html(''); // Очищаем фильтр дочерних категорий
    
            //Запрашиваем данные
            $.ajax({
              url: '/path/to/file', // Путь к файлу PHP от корня сайта
              type: 'POST', // Отправляем данные методом POST
              dataType: 'json', // Ждём что сервер вернёт JSON
              data: {
                category: val, // Отправляем переменную 'category' со значением 'val'
              },
            })
            .done(function(data) {
              // Когда сервер вернул JSON
              // Перебираем данные циклом
              $.each(data, function(index, item) {
                // Добавляем внутрь select'а дочерних категорий новые опции
                $('select[name="subcategories"]').append('\
                  <option value="' + item.id + '">' + item.name + '</option>\
                ');
              });
            })
            .fail(function() {
              // Любая ошибка
              console.log("error");
            })
            .always(function() {
              // Когда запрос завершился успешно или с ошибкой
              console.log("complete");
            });
          });
        </script>
      </body>
    </html>


    Неполная серверная часть на PHP:
    <?php
    
    	//Тут должна быть логика загрузки нужных дочерних
    	//категорий согласно пришедшему значению 'category' ($_POST['category'])
    
    	$subCategories = [
    		[
    			'id' => 1,
    			'name' => 'Дочерняя категория 1',
    		],
    		[
    			'id' => 2,
    			'name' => 'Дочерняя категория 2',
    		],
    		[
    			'id' => 3,
    			'name' => 'Дочерняя категория 3',
    		],
    	];
    
    	//json_encode превращяет массив PHP в JSON, который ждёт AJAX
    	exit(json_encode($subCategories));
    ?>
    Ответ написан
    Комментировать
  • Как сделать выборку дат?

    rc-dm
    @rc-dm
    Full-Stack Web Developer
    Если ты используешь SQL и у тебя есть какая-то запись в таблице хранит в себе данные, по которым должна быть возможна выборка, то тебе стоит сделать две таблицы.

    Например в таблице "Films" хранятся фильмы:
    1. id - Порядковый номер (первичный ключ)
    2. name - Название фильма


    И в таблице "Sessions":
    1. id - Порядковый номер (первичный ключ)
    2. film_id - Номер фильма согласно таблице "Films"
    3. date - Дата сеанса кино


    Таким образом ты можешь делать выборку по нужному фильму и дате.
    Отмечу что благодаря связям можно удалив "фильм" автоматически удалить все "сеансы".

    Если тебе нужно сохранить массив в базе данных, лучше использовать тип ячейки JSON.
    Если очень хочется хранить текст, создай обычный массив и использоваться функцию serialize для того чтобы получить пригодное для хранение представление этого массива. Когда тебе понадобится получить этот массив из базы, достаточно будет применить unserialize
    Но учитывай, что ни по JSON, ни по сериализированному массиву, адекватным образом выбрать из базы не получится. Твой вопрос должен относится к архитектуре базы данных, а не к PHP.
    Ответ написан
    Комментировать
  • Как получить нужную часть ответа от API в PHP?

    rc-dm
    @rc-dm
    Full-Stack Web Developer
    Я получаю такую строку : {"day":0,"week":186,"month":186}
    из неё хочу брать только день и число


    <?php
    
        $url = "http://$server/api/?" .http_build_query($request_params);
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        
        //Получаем JSON
        $response = curl_exec($ch);
        curl_close($ch);
    
        //Декодируем JSON в PHP объект
        $data = json_decode($response);
       
        //Выводим только нужные элементы
        echo 'Day: '.$data->day.PHP_EOL;
        echo 'Week: '.$data->week.PHP_EOL;
        echo 'Month: '.$data->month.PHP_EOL;
    
    ?>
    Ответ написан
    Комментировать
  • Как сделать кликабельный никнейм в сообщении от телеграм бота?

    rc-dm
    @rc-dm
    Full-Stack Web Developer
    Смотри объект сообщения и элемент entities

    Telegram обычно автоматически обнаруживает внутренние ссылки.
    Ответ написан
  • Как изменить значение в html селекторе с помощью php?

    rc-dm
    @rc-dm
    Full-Stack Web Developer
    Можно использовать HTML парсер на PHP (Документация)

    <?php
    
    // Создаём DOM из строки
    $html = str_get_html('
      <div id="hello">Hello</div>
      <div id="world">World</div>
    ');
    
    // Ищем элемент 'div' с 'id="hello"' и меняем его содержимое на 'foo'
    $html->find('div[id=hello]', 0)->innertext = 'foo';
    
    // Ищем второй элемент 'div' по порядку и добавляем ему класс 'bar'
    $html->find('div', 1)->class = 'bar';
    
    echo $html; 
    // Результат:
    // <div id="hello">foo</div>
    // <div id="world" class="bar">World</div>
    
    ?>
    Ответ написан
    Комментировать