Mount the parameters of a URL dynamically

4

I have a page on a system where I list the products registered in the DB, I am implementing some filters within this page, and I would like to update the links of the filters as requested in the URL (GET REQUEST):

At the beginning of the page the links of the filters contained in it should start as follows:

Category

<a href="meusite.com.br/produtos?_categoria=1">Categoria 1</a> 
<a href="meusite.com.br/produtos?_categoria=2">Categoria 2</a> 
<a href="meusite.com.br/produtos?_categoria=3">Categoria 3</a> 

Numbering

<a href="meusite.com.br/produtos?_numeracao=34">34</a>
<a href="meusite.com.br/produtos?_numeracao=35">35</a>
<a href="meusite.com.br/produtos?_numeracao=36">36</a>

If the user accesses the page filter, link's should update as follows:

If you access the category filter the numbering filter links should be:

<a href="meusite.com.br/produtos?_categoria=1&_numeracao=34">34</a>
<a href="meusite.com.br/produtos?_categoria=1&_numeracao=35">35</a>
<a href="meusite.com.br/produtos?_categoria=1&_numeracao=36">36</a>

If you access the numbering filter the category filter the links

<a href="meusite.com.br/produtos?_categoria=1&_numeracao=34">Categoria 1</a>
<a href="meusite.com.br/produtos?_categoria=2&_numeracao=34">Categoria 2</a>
<a href="meusite.com.br/produtos?_categoria=3&_numeracao=34">Categoria 3</a>

I would like a direction to start, because I am not able to find the logic of how to do it.

    
asked by anonymous 10.03.2015 / 12:21

2 answers

6

With the same principle of @BorgeB's response, I have adapted to the generation of the filters specified in the question edition. Leveraging, I've added an option to remove an existing filter:

<?php
   $categoria = $_GET['_categoria'];
   $numeracao = $_GET['_numeracao'];

   $f_categoria = empty( $categoria ) ? '' :'&_categoria='.$categoria;
   $f_numeracao = empty( $numeracao ) ? '' :'&_numeracao='.$numeracao;

   if ( empty( $categoria ) ) {
      echo '<a href="meusite.com.br/produtos?_categoria=1'.$f_numeracao.'">Categoria 1</a>';
      echo '<a href="meusite.com.br/produtos?_categoria=2'.$f_numeracao.'">Categoria 2</a>';
      echo '<a href="meusite.com.br/produtos?_categoria=2'.$f_numeracao.'">Categoria 3</a>';
   } else {
      echo '<a href="meusite.com.br/produtos?_categoria='.$f_numeracao.'">Todas as categorias</a>';
   }

   if ( empty( $numeracao ) ) {
      echo '<a href="meusite.com.br/produtos?_numeracao=33'.$f_categoria.'">Numero 33</a>';
      echo '<a href="meusite.com.br/produtos?_numeracao=34'.$f_categoria.'">Numero 34</a>';
      echo '<a href="meusite.com.br/produtos?_numeracao=35'.$f_categoria.'">Numero 35</a>';
   } else {
      echo '<a href="meusite.com.br/produtos?_numeracao='.$f_categoria.'">Todas as numeracoes</a>';
   }
?>

If you're going to do something more complex with many different filters, it makes sense to automate the whole process, using for example arrays and loops .     

11.03.2015 / 01:03
3

You can do this with a simple GET :

$categoria = $_GET['_categoria'];
$cor       = $_GET['_cor'];
$tamanho   = $_GET['_tamanho'];

Then just check if the fields are filled:

$url  = "Location: meusite.com.br/produtos.php?";

if(!empty($categoria)) 
    $url .= "_categoria=$categoria";

if(!empty($cor) && substr($url, -1)!="?")
    $url .= "&_cor=$cor";
else if(!empty($cor) && substr($url, -1)=="?")
    $url .= "_cor=$cor";

if(!empty($tamanho) && substr($url, -1)!="?")
    $url .= "&_tamanho=$tamanho";
else if(!empty($tamanho) && substr($url, -1)=="?")
    $url .= "_tamanho=$tamanho";

header('$url');

This response is the answer to the first publication of the AP, anyway the idea is the same and for the latest edition just consult @Bacco's answer .

    
10.03.2015 / 13:02