Busca por ComBox - PHP

Olá pessoal, tudo certo?

Estou fazendo uma listagem dos meus produtos em PHP e eu gostaria de fazer um combobox para o usuário organizar a lista.
Por exemplo: “Exibir por: Maior peso, Menor peso”

Eu consegui fazer algo parecido com isso, só que eu preciso de um botão para confirmar.
Eu fiz pro usuário escolher a opção dele, só que ele precisa clicar em um botão de confirmar para gerar essa busca.
Eu gostaria de uma que fosse automático. Que o usuário escolhesse a opção dele na combobox e não clicasse em um botão confirmar.Texto pré-formatado
Sou novato em PHP, alguém saberia me ajudar?

Segue o código:

<form method="POST" action="estoque.php">
<select id="selecao" name="selecao">
  <option disabled selected>Selecione...</option>
  <option value="abc">Ordem Alfabética</option>
  <option value="maiorPeso">Maior Peso</option>
  <option value="menorPeso">Menor Peso</option>
  <option value="maiorPreco">Maior Preço</option>
  <option value="menorPreco">Menor Preço</option> 
</select>
<input type="submit" name="botaoSelecao" value="Confirmar">
</form>

<?php 
$valor =$_POST['selecao'];

if ($valor == "menorPreco") {
  $sql="select * from produto,estoque where produto.id_produto=estoque.id_estoque order by preco_kg ASC";
} else if ($valor == "maiorPreco") {
  $sql="select * from produto,estoque where produto.id_produto=estoque.id_estoque order by preco_kg DESC";
} if ($valor == "maiorPeso") {
  $sql="select * from produto,estoque where produto.id_produto=estoque.id_estoque order by peso DESC";
} else if ($valor == "menorPeso") {
  $sql="select * from produto,estoque where produto.id_produto=estoque.id_estoque order by peso ASC";
} else {
  $sql="select * from produto,estoque where produto.id_produto=estoque.id_estoque order by nome ASC";
}

No seu form use um name…

<form name="meuForm" method="POST" action="estoque.php">

No seu combo use o evento onchange…

<select id="selecao" name="selecao" onchange="document.meuForm.submit();">

Retire ou comente seu botão confirmar…

Seu php também pode ser melhorado, percebeu que seu sql é praticamente igual em todos os if’s, mudando apenas o order by? Você pode fazer algo assim…

$selecao = [
    "menorPreco" => "order by preco_kg ASC",
    "maiorPreco" => "order by preco_kg DESC",
    "maiorPeso" => "order by peso DESC",
    "menorPeso" => "order by peso ASC",
    "abc" => "order by nome ASC"
];

$valor = $_POST['selecao']; // cuidado! melhor usar filter_input...
$sql = "select * from produto,estoque where produto.id_produto=estoque.id_estoque ";

if (isset($selecao[$valor])) {
    $sql .= $selecao[$valor];
} else {
    $sql .= $selecao["abc"]; // acaba sendo o padrão
}
3 curtidas

Muito Obrigado LostSoldier. Sério.
Sou novo no PHP. Não sei muita coisa, mas estou correndo atrás.

Ainda desconheço sobre o filter_input, mas vou dar uma olhada nisso. :slight_smile:
Obrigado, você me ajudou muito :smiley:

1 curtida