Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal bom dia.
Preciso de uma ajuda com a lógica para montar um select usando o resultado de um FORM.
Formulário:
<form action="form.php" method="get" name="form" id="form" target="_parent">
<?php
//seleciono as opções que tenho
$categoria = sql_exec("SELECT cod_categoria, des_categoria FROM categorias ORDER BY des_categoria ASC");
//aqui monto um chekbox para cada opção
while ( $row_categoria = mysql_fetch_assoc($categoria) ) { ?>
<input type="checkbox" name="cod_categoria" value="<?=$row_categoria["cod_categoria"]?>"/>
<label><?=$row_categoria["des_categoria"]?></label><br>
<? } ?>
<button type="submit" value="buscar" class="busca_botao">Buscar</button>
</form>
Aqui o arquivo form.php que eu trato o resultado:
<?PHP
$sql_prod = "SELECT * FROM produtos WHERE ";
if ( isset($_GET["cod_categoria"])&&$_GET["cod_categoria"]!= "0" ) {
$sql_prod .= "AND cod_categoria = ".$_GET["cod_categoria"]." ";
}
$sql_prod .= " ORDER BY codigo ASC";
$result_prod = sql_exec($sql_prod);
?>
O que acontece é o seguinte, ele inclui na busca somente o resultado do último select marcado.
Como posso listar na busca todos os select marcados??Tenho o form, com os campos de chekbox.
tipo isso:
<form action="form.php" method="get" name="form" id="form" target="_parent">
<input type="checkbox" name="cod_categoria" value="1"/><label>opção 1</label>
<input type="checkbox" name="cod_categoria" value="2"/><label>opção 2</label>
<input type="checkbox" name="cod_categoria" value="3"/><label>opção 3</label>
<input type="checkbox" name="cod_categoria" value="4"/><label>opção 4</label>
</form>
Ai depois no arquivo form.php
pego o resultado e monto uma busca no banco de dados:
<?PHP
$sql_prod = "SELECT * FROM produtos WHERE cod_categoria = ".$_GET["cod_categoria"]." ORDER BY codigo ASC";
$result_prod = sql_exec($sql_prod);
?>
Mas eu queria algo assim:
<?PHP
$sql_prod = "SELECT * FROM produtos WHERE cod_categoria = "campos selecionados do checkbox" ORDER BY codigo ASC";
$result_prod = sql_exec($sql_prod);
?>No nome dos inputs de categoria, adicione um [] para fazer com que o resultado se torne um array.
<form action="form.php" method="post">
<?php
$query = <<<SQL
SELECT
cod_categoria AS codigo,
des_categoria AS descricao
FROM categoria
ORDER BY descricao;
SQL;
$categorias = sql_exec($query, mysql_connect()); <label for="cat_{$row['codigo']}">
<!-- Veja que no 'name' do checkbox, adicionei um [] à frente -->
<input type="checkbox" name="categoria[]" value="{$row['codigo']}" id="cat_{$row['codigo']}">{$row['descricao']}
</label>
HTML;
}
?>
<button class="busca_botao">Buscar</button>
</form>
Depois, é só tratar o campo como um array:
<?php
if (!(isset($_POST['categoria']) and sizeof($_POST['categoria']))) {
die("Nenhuma categoria selecionada.");
}
$sql = <<<SQL
SELECT
*
FROM
produtos
WHERE
cod_categoria IN (%s)
ORDER BY
codigo ASC;
SQL;
$produtos = sql_exec(sprintf($sql, implode(',', $_POST['categoria'])));Resolvido a questão!
Obrigado Evandro!
>
No nome dos inputs de categoria, adicione um [] para fazer com que o resultado se torne um array.
<form action="form.php" method="post">
<?php
$query = <<<SQL
SELECT
cod_categoria AS codigo,
des_categoria AS descricao
FROM categoria
ORDER BY descricao;
SQL;
$categorias = sql_exec($query, mysql_connect()); <label for="cat_{$row['codigo']}">
<!-- Veja que no 'name' do checkbox, adicionei um [] à frente -->
<input type="checkbox" name="categoria[]" value="{$row['codigo']}" id="cat_{$row['codigo']}">{$row['descricao']}
</label>
HTML;
}
?>
<button class="busca_botao">Buscar</button>
</form>
Depois, é só tratar o campo como um array:
<?php
if (!(isset($_POST['categoria']) and sizeof($_POST['categoria']))) {
die("Nenhuma categoria selecionada.");
}
$sql = <<<SQL
SELECT
*
FROM
produtos
WHERE
cod_categoria IN (%s)
ORDER BY
codigo ASC;
SQL;
$produtos = sql_exec(sprintf($sql, implode(',', $_POST['categoria'])));
Cuma?