Получить несколько параметров значения фильтра

avatar
HiDayurie Dave
8 апреля 2018 в 03:05
1031
3
3

Я использую этот SO-вопрос для обработки моего поиска по фильтру с помощью флажка.

Это JS

$('input[type="checkbox"]').on('change', function (e) {
      var data = {},
          fdata = [],
          loc = $('<a>', { href: window.location })[0];
      $('input[type="checkbox"]').each(function (i) {
          if (this.checked) {
              if (!data.hasOwnProperty(this.name)) {
                  data[this.name] = [];
              }
              data[this.name].push(this.value);
          }
      });
      // get all keys.
      var keys = Object.keys(data);
      var fdata = "";
      // iterate over them and create the fdata
      keys.forEach(function(key,i){
          if (i>0) fdata += '&'; // if its not the first key add &
          fdata += key+"="+data[key].join(',');
      });
      $.ajax({
        type: "get",
        url: "/ajax/get",
        data: {
              "_token": "{{ csrf_token() }}",
              "fdata": fdata
            },
        success: function (response) {
          $('#d2d-results').html(response);
        }
      });
      if (history.pushState) {
          history.pushState(null, null, loc.pathname + '?' + fdata);
      }
  });

А теперь я пытаюсь получить значение fdata для PHP.

В PHP я получаю это значение переменной echo $_GET['fdata'];:

discount=Y&brand=BR0006,BR0003

Чего я хочу

$discount="Y";
$brand="BR0006,BR0003";

Возможно ли так?

Источник
Hikarunomemory
8 апреля 2018 в 03:06
0

сохранить fdata как объект

HiDayurie Dave
8 апреля 2018 в 03:07
0

Привет, @Hikarunomemory, можешь привести пример?

Hikarunomemory
8 апреля 2018 в 03:44
0

вы пробовали $_GET['fdata']['discount'];?

HiDayurie Dave
8 апреля 2018 в 03:46
0

Только что попробовал и получил ошибку: Warning: Illegal string offset 'discount' in

Hikarunomemory
8 апреля 2018 в 03:50
0

вот похожий пост ссылка

Ответы (3)

avatar
Christian
8 апреля 2018 в 03:58
4

Чтобы сделать то, что вы хотите, вы должны сделать два шага:

  1. разобрать строку запроса в массив:

    parse_str($_GET['fdata'], $result);
    
  2. А затем, извлечь массив как переменные:

    extract($result);
    

Несколько замечаний:

Использование extract очень небезопасно (и несколько некрасиво). Пользователь может поместить такие вещи, как (например) isAdmin=1 в URL-адрес, и это повлияет на ваш код. По сути, вы больше не можете доверять своим переменным.

Я бы пропустил шаг 2 (эта штука extract) и использовал $result напрямую, например echo $result['discount'].

avatar
hamidreza nikoonia
8 апреля 2018 в 03:42
0

одним из способов вы можете использовать функцию взрыва в php, чтобы отделить ваш элемент от fdata

вы можете определить какой-либо символ в своем клиентском JS-приложении, например ( , ), а затем в функции взрыва в php вы должны установить разделитель, равный символу запятой

функция взрыва в PHP

explode(separator,string,limit)

в вашем примере разделителем является запятая, а строкой является fdata (ограничение необязательно )

$fdata = $_GET['fdata'];
$arr_ = explode('&',$fdata);

и если у вас есть нечто подобное в строке fdata

para1=223&para2=4353&para3=234

затем переменная $arr_ вот так

$arr_ = [para1=223 , para2=4353 , para3=234];

и если вы хотите разделить значение и ключ, вы можете сделать это снова и использовать цикл

avatar
Daniel Bengtsson
8 апреля 2018 в 03:15
0

похоже, вы смешиваете post и get, вам нужно что-то подобное?

через GET:

if(isset($_GET['discount'])) {
    $discount = $_GET['discount'];
} else {
    $discount = '';
}

if(isset($_GET['brand'])) {
    $brand = $_GET['brand'];
} else {
    $brand = '';
}

Метод POST:

if(isset($_POST['discount'])) {
    $discount = $_POST['discount'];
} else {
    $discount = '';
}

if(isset($_POST['brand'])) {
    $brand = $_POST['brand'];
} else {
    $brand = '';
}