Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia Pessoal
Estou desenvolvendo um sistema de busca onde existem 2 checkboxs (Presencial e EAD). Segue abaixo o formulário:
<form id="pesquisa-modal" action="resultado_bolsa.php" method="post">
<div class="grid-8">
<select class="select" name="categoria">
<option value="Pós-Graduação">Pós-Graduação</option>
</select>
</div>
<div class="grid-8">
<select class="select" name="curso">
<option value="">Curso:</option>
<?php
// Instancia o objeto PDO
$pdo = new PDO('mysql:host=localhost;dbname=bolsascursos', 'root', '');
$consulta = $pdo->query("SELECT * FROM cursos;");
while ($linha = $consulta->fetch(PDO::FETCH_ASSOC)) {
$nome_curso = $linha['nome'];
$curso_id = $linha['id'];
?>
<option value="<?php echo $nome_curso ?>"><?php echo $nome_curso ?></option>
<?php
}
?>
?>
</select>
</div>
<div class="grid-8">
<select class="select" name="cidade">
<option value="">Cidade:</option>
<?php
// Instancia o objeto PDO
$pdo = new PDO('mysql:host=localhost;dbname=bolsascursos', 'root', '');
$consulta = $pdo->query("SELECT * FROM cidade;");
while ($linha = $consulta->fetch(PDO::FETCH_ASSOC)) {
$nome_cidade = $linha['nome'];
$cidade_id = $linha['id'];
?>
<option value="<?php echo $nome_cidade ?>"><?php echo $nome_cidade ?></option>
<?php
}
?>
?>
</select>
</div>
<div class="grid-8">
<div class="selectdiv">
<input type="checkbox" checked class="check" name="tipo_curso" value="Presencial">Presencial <input type="checkbox" class="check" name="tipo_curso" value="EAD">EAD-Ensino a Distancia
</div>
</div>
<div class="grid-8">
<br>
<button type="submit">BUSCAR BOLSAS</button>
</div>
</form>
O sistema está funcionando perfeitamente, me retorna os valores. Mas se o usuário marcar as 2 opções (Presencial e EAD) ele só retorna os valores do EAD. Mas se marcar somente Presencial ou somente EAD ele retorna os valores corretos. O problema é quando marca os 2.
Abaixo o código que recebe os valores.
<?php
$curso = $_POST['curso'];
$categoria = $_POST['categoria'];
$cidade = $_POST['cidade'];
$tipo_curso = $_POST['tipo_curso'];
$busca_query = "SELECT bolsas.*, instituicoes.foto as img_instituicao, instituicoes.nome as instituicao, cursos.nome as curso, cidade.nome as cidade, categorias.nome as categoria, turno.turno as turno from bolsas
INNER JOIN cursos ON bolsas.id_curso = cursos.id
INNER JOIN cidade ON bolsas.id_cidade = cidade.id
INNER JOIN turno ON bolsas.id_turno = turno.id
INNER JOIN instituicoes ON bolsas.id_instituicao = instituicoes.id
INNER JOIN categorias ON bolsas.id_categoria = categorias.id WHERE bolsas.id_curso LIKE '%$curso%' AND bolsas.tipo_curso = '$tipo_curso' AND bolsas.id_categoria = '$categoria' AND bolsas.id_cidade = '$cidade'";
try {
$result = $conexao->prepare($busca_query);
$result->execute();
$contar = $result->rowCount();
if($contar>0) {
while($dados = $result->FETCH(PDO::FETCH_OBJ)) {
?>
<div id="mostrar-bolsas" class="grid-16" style="margin-bottom: 20px">
<div class="grid-5"><img src="img/<?php echo $dados->img_instituicao; ?>" style="max-width: 175px; width: auto;"></div>
<div class="grid-6" style="margin-top: 30px;">
<h3><?php echo $dados->curso; ?></h3>
<h4><?php echo $dados->instituicao; ?> - <?php echo $dados->cidade; ?></h4>
<h5><?php echo $dados->categoria; ?> | <?php echo $dados->tipo_curso; ?> | <?php echo $dados->turno; ?></h5>
....
Alguém sabe o que é?Na verdade ele pode escolher os 2 .. o problema é que quando ele escolhe os 2 o resultado só vem pra EAD.
Então é usar names diferentes, coloque por exemplo:
tipo_curso_presencial e o outro com tipo_curso_ead
E pegue da mesma forma no PHP
Sim .. mas essas duas opção de Presencial e EAD se encontram na mesma coluna (tipo_curso) que fica na tabela bolsas.
To confuso nessa parte:
WHERE bolsas.id_curso LIKE '%$curso%' AND bolsas.tipo_curso = '$tipo_curso' AND bolsas.id_categoria = '$categoria' AND bolsas.id_cidade = '$cidade'";
Como ficaria se eu colocasse 2 names diferentes? Já que as 2 opções se encontram na mesma coluna.Já tentou colocar dessa maneira no sql?
bolsa.tipo_curso IN ('$tipo_curso')
Faz um teste assim...
Se eh um checkbox para a mesma informacao e ambas precisam ser enviadas, tem que estar no formato de array:
<input type="radio" name="tipo_curso[]" value="Presencial">Presencial
<input type="radio" name="tipo_curso[]" value="EAD">EAD
Veja os colchetes no atributo **name**>
Em 2017-5-19 at 08:47, Latorre disse:
Já tentou colocar dessa maneira no sql?
bolsa.tipo_curso IN ('$tipo_curso')
Faz um teste assim...
Sim .. e retorna só o valor da última opção marcada .. que é EAD
>
Em 2017-5-19 at 11:53, hufersil disse:
Se eh um checkbox para a mesma informacao e ambas precisam ser enviadas, tem que estar no formato de array:
<input type="radio" name="tipo_curso[]" value="Presencial">Presencial
<input type="radio" name="tipo_curso[]" value="EAD">EAD
Veja os colchetes no atributo **name**
Entendi .. mas e na página de resultados, como ficaria? Pois quando coloco colchetes e não altero a página de resultados da erro.Tente utilizar 2 names diferentes como o EdCesar mencionou e, caso o usuário selecionar as duas opções, concatene as duas opções dentro de tipo_curso. Caso você precise recuperar esse valores dentro de tipo_curso e mostrar pro usuário por exemplo, utilize o explode() e pega os 2 valores que estarão armazenados separadamente para você fazer o que quiser com eles.
Se o usuário só pode escolher um ou outro, então troque de checkbox para radio: