Ir ao conteúdo
  • Cadastre-se

PHP Filtro procura sempre pelo último valor


Ir à solução Resolvido por David Martinho,

Posts recomendados

Eaí galera, tenho um problema que precisava imenso de ajuda urgentemente, eu tenho um sistema de filtragem por checkboxs onde o utilizador pesquisa um produto e depois escolhe as tabelas onde quer ver registos

imagem.thumb.png.4e4543e6cd45193615f39ce0fbb72cb6.png

 

Acontece que se marcar uma tabela ele procura, mas se procurar por mais ou por todas, ele só mostra os registos da ultima caixa selecionada

imagem.thumb.png.54c388258049fa7151a8d0fc0a5a6a3b.png

imagem.thumb.png.c888700b0b9056cf7f8c10239fbe4616.png

 

imagem.png.f8bf6c61f0ce6e1c234ae3255d19dfbb.png

 

No URL ele guarda todos os valores mas só mostra o último, como faço para o site mostrar os registos de todos os valores?

 

Código HTML:

 

<form class="form" action="resultadosrefAS11.php" method="GET">
<input type="checkbox" value="AS11" name="checkar">
<input type="checkbox" value="AS12" name="checkar" class="check">
<input type="checkbox" value="AS13" name="checkar" class="check">
<input type="checkbox" value="AS14" name="checkar" class="check">
<input type="checkbox" value="AS21" name="checkar" class="check">
<input type="checkbox" value="AS22" name="checkar" class="check">
<input type="checkbox" value="AS23" name="checkar" class="check">
<input type="checkbox" value="AS24" name="checkar" class="check">
<input type="checkbox" value="MFT5" name="checkar" class="check">
<input type="checkbox" value="REUSE" name="checkar" class="check">
<input type="checkbox" value="SE1" name="checkar" class="check">
<input type="checkbox" value="SE2" name="checkar" class="check">
<input type="checkbox" value="SE4" name="checkar" class="check">
<input type="checkbox" value="SE5" name="checkar" class="check"> 
  
<script>
	function toggle(source) {
  checkboxes = document.getElementsByName('checkar');
  for(var i=0, n=checkboxes.length;i<n;i++) {
    checkboxes[i].checked = source.checked;
  }
}
</script>
<script>$('#select_all').click(function(event) {
  if(this.checked) {
      // Iterate each checkbox
      $(':checkbox').each(function() {
          this.checked = true;
      });
  }
  else {
    $(':checkbox').each(function() {
          this.checked = false;
      });
  }
});
</script>
<input type="checkbox" onClick="toggle(this)"/>Marcar🗘Desmarcar

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

@David Martinho Se você definir o nome do input igual com colchetes([]) no final o php vai interpretar os valores em uma lista.

 

Exemplo:

 

<form method="GET">
    <input type="checkbox" value="AS24" name="checkar[]">
    <input type="checkbox" value="AS25" name="checkar[]">
    <input type="checkbox" value="AS26" name="checkar[]">
    <input type="submit" value="submit">
</form>

 

// Resultado de um var_dump em $_GET
array(1) { ["checkar"]=> array(3) { [0]=> string(4) "AS24" [1]=> string(4) "AS25" [2]=> string(4) "AS26" } } 

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Moderador

Vê se esse artigo te ajuda:

https://coderdif.wordpress.com/2014/12/01/filtro-de-dados-por-checkbox-com-jquery/

 

 

Embora o exemplo online não esteja mais funcionando, você pode estudar os código que está ali que totalmente funcional.

Basicamente ele é um filtro por checkbox, onde você mostra frases de pessoas selecionadas. NO meu caso, eu fiz de forma que se não escolher nenhum, mostra todas as frases, se escolher os dois mostra todas as frases dos dois selecionados... se escolhe somente um mostra somente de quem foi selecionado... você pode usar eles para implementar no seu.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Em 01/12/2021 às 23:42, GabrielSennaMs disse:

@David Martinho Se você definir o nome do input igual com colchetes([]) no final o php vai interpretar os valores em uma lista.

 

Exemplo:

 

<form method="GET">
    <input type="checkbox" value="AS24" name="checkar[]">
    <input type="checkbox" value="AS25" name="checkar[]">
    <input type="checkbox" value="AS26" name="checkar[]">
    <input type="submit" value="submit">
</form>

 

// Resultado de um var_dump em $_GET
array(1) { ["checkar"]=> array(3) { [0]=> string(4) "AS24" [1]=> string(4) "AS25" [2]=> string(4) "AS26" } } 

 

 

 

 

Antes de mais, obrigado pela ajuda, eu fiz do jeito que você me disse, mas agora dá erro no fetch dos resultados, diz que estou a tentar passar de um array para uma string.

 

O que eu posso fazer para funcionar?

 

Obs: O que é esse "%5B%5D", só apareceu depois de por os inputs name com []

image.png.57eb5dcc46d06fb12ec01b8a78e1179a.png

image.thumb.png.666600f5721bbb2f4b744adf0e26eca6.png

 

$checkar = ($_GET['checkar']);
$ref = "%".trim($_GET['ref'])."%";
$dbh = new PDO('mysql:host=127.0.0.1;dbname=moviblock', 'root', '');

$sth = $dbh->prepare('SELECT * FROM `as11` WHERE `Equipa` = :checkar AND `Referência` LIKE :ref
                      UNION SELECT * FROM `as11` WHERE `Equipa` = :checkar AND `Localização` LIKE :ref 
					  UNION SELECT * FROM `as11` WHERE `Equipa` = :checkar AND `Referência` LIKE :ref 
					  UNION SELECT * FROM `as11` WHERE `Equipa` = :checkar AND `Categoria` LIKE :ref');
                      /* eu não coloquei a query toda porque é um pouco grande */

$sth->bindParam(':checkar', $checkar, PDO::PARAM_STR);
$sth->bindParam(':ref', $ref, PDO::PARAM_STR);
$sth->execute();
$resultados = $sth->fetchAll(PDO::FETCH_ASSOC);

	if (count($resultados)) {
	foreach($resultados as $Resultado) {
?>
<?php

 

Link para o comentário
Compartilhar em outros sites

  • Solução
Em 01/12/2021 às 23:42, GabrielSennaMs disse:

@David Martinho Se você definir o nome do input igual com colchetes([]) no final o php vai interpretar os valores em uma lista.

 

Exemplo:

 

<form method="GET">
    <input type="checkbox" value="AS24" name="checkar[]">
    <input type="checkbox" value="AS25" name="checkar[]">
    <input type="checkbox" value="AS26" name="checkar[]">
    <input type="submit" value="submit">
</form>

 

// Resultado de um var_dump em $_GET
array(1) { ["checkar"]=> array(3) { [0]=> string(4) "AS24" [1]=> string(4) "AS25" [2]=> string(4) "AS26" } } 

 

 

 

 

EDIT: JÁ CONSEGUI MT OBGRIGADO PELA AJUDA, fiz o que você disse e na página dos resultados coloquei um foreach

 

<?php
$checkar = ($_GET['checkar']);
$ref = "%".trim($_GET['ref'])."%";
$dbh = new PDO('mysql:host=127.0.0.1;dbname=moviblock', 'root', '');

$sth = $dbh->prepare('SELECT * FROM `as11` WHERE `Equipa` = :checkar AND `Referência` LIKE :ref
                      UNION SELECT * FROM `as11` WHERE `Equipa` = :checkar AND `Localização` LIKE :ref 
					  UNION SELECT * FROM `as11` WHERE `Equipa` = :checkar AND `Referência` LIKE :ref 
					  UNION SELECT * FROM `as11` WHERE `Equipa` = :checkar AND `Categoria` LIKE :ref');
                      /* eu não coloquei a query toda porque é um pouco grande */

foreach($checkar as $valores){
					  
$sth->bindParam(':checkar', $valores, PDO::PARAM_STR);
$sth->bindParam(':ref', $ref, PDO::PARAM_STR);
$sth->execute();
$resultados = $sth->fetchAll(PDO::FETCH_ASSOC);

	if (count($resultados)) {
	foreach($resultados as $Resultado) {
?>

 

 

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...