HiDayurie Dave
HiDayurie Dave

Reputation: 1807

Get multiple filter value parameters

I'm using this SO question to handle my filter search using checkbox.

This is the 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);
      }
  });

And now I try to get the value of fdata to PHP.

On PHP I get this value of variable echo $_GET['fdata'];:

discount=Y&brand=BR0006,BR0003

What I want

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

Is it possible to do like that?

Upvotes: 3

Views: 1588

Answers (3)

Christian
Christian

Reputation: 28124

To do what you want, you have to do two steps:

  1. parse the query string into an array:

    parse_str($_GET['fdata'], $result);
    
  2. And then, extract the array as variables:

    extract($result);
    

A few things to note:

Using extract is very insecure (and somewhat ugly). The user can put things like (for example) isAdmin=1 in the URL and the will affect your code. Basically, you cannot trust your variables anymore.

I would skip step 2 (the extract thingy), and use $result directly, for example echo $result['discount'].

Upvotes: 4

hamidreza nikoonia
hamidreza nikoonia

Reputation: 2165

in one way , you can use explode function in php to separate your item from fdata

you can define some character in your client JS app for example ( , ) and then in explode function in php you must set separator equal comma character

explode function in PHP

explode(separator,string,limit)

in your example separator is comma and string is fdata ( limit optional )

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

and if you have some thing like this in fdata string

para1=223&para2=4353&para3=234

then $arr_ variable like this

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

and if you want separate value and key , you can do this again and use loop

Upvotes: 0

Daniel Bengtsson
Daniel Bengtsson

Reputation: 361

it sounds like you are mixing post and get, is it something like this that you're after?

via GET:

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

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

POST method:

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

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

Upvotes: 0

Related Questions