Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Taffarelo3

[Resolvido] Filtro de busca Simples

Recommended Posts

Boa tarde pessoal! Eu tenho umas duvidas e queria saber como que poderia fazer um campo de busca com apenas 3 filtros por exemplo, usando um input e um select com 3 opções, de acordo com o que o usuario selecionar ele ira fazer a busca e mostra na tela, por enquanto eu tenho isso:

 

// Controller
function pesquisar(){
        $opcao = array('1'=>'Nome do Especialista', '2'=>'Especialidade', '3'=>'Endereço');
        $this->set($opcao);
        if($opcao['1']){
            $conditions = $this->postConditions($this->data , array('nomeEspecialista' => 'LIKE'));
            $this->set('resultados', $this->Especialista->find('all', array('conditions' => $conditions)));
        }else if($opcao['2']){
            $conditions = $this->postConditions($this->data , array('especialidade' => 'LIKE'));
            $this->set('resultados', $this->Especialista->find('all', array('conditions' => $conditions)));
        }else if($opcao['3']){
            $conditions = $this->postConditions($this->data , array('endereco' => 'LIKE'));
            $this->set('resultados', $this->Especialista->find('all', array('conditions' => $conditions)));
        }
    }

//view
<?php echo $form->create('Especialista', array('action'=>'pesquisar')) ?>
<?php echo $form->input('', array('label'=>'Pesquisar:'));?>
<?php echo $form->select('filtro', $opcao); ?>
<?php echo $form->submit('Buscar', array('class' => 'ui-state-default ui-corner-all'));?>
<?php echo $form->end()?>
            <?php if(isset($resultados)):?>
                <table id="users" class="ui-widget ui-widget-content">
		<thead>
			<tr class="ui-widget-header ">
				<th>Nome do Especialista</th>
				<th>Especialidade</th>
                                <th>Titulação</th>
                                <th>Endereço</th>
                                <th>Telefone de contato</th>
                                <th>Qualificado</th>
			</tr>
		</thead>
		<tbody>
                <?php foreach($resultados as $resultado):?>
                    <tr>
				<td><?php echo $html->link($resultado['Especialista']['nomeEspecialista'], array('action'=>'ver', $resultado['Especialista']['nomeEspecialista'])); ?></td>
				<td><?php echo $resultado['Especialista']['especialidade']; ?><?php echo ', '?><?php echo $resultado['Especialista']['subEspecialidade']; ?></td>
                                <td><?php echo $resultado['Especialista']['titulacao']; ?></td>
                                <td><?php echo $resultado['Especialista']['endereco']; ?></td>
                                <td><?php echo $resultado['Especialista']['telefone']; ?></td>
                                <td><?php echo $html->image($resultado['Especialista']['qualificado'].'.png')?></td>
			</tr>
		</tbody>
                <?php endforeach?>
                </table>
                <?php endif?>

Só que toda vez que eu tento ver a view no navegador fala que a variavel $opcao nao foi definida? Esta correto minha logica ou o metodo que estou fazendo?

 

 

Obrigado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza lucas deu certo, consegui popular o selectbox com essa array, agora vem outra duvida cara, quando eu dou o click de fazer a busca as condições que eu fiz não são afetadas, fala que a variável $opcao não existe?? =S ai como você pode ver, ele só vai aparecer o resultado se a variável $resultado for setada pela condição, você pode me dar uma ajuda? Será que eu estou fazendo certo esse filtro? As condições dentro dos ifs estão corretas? O meu ver era ver se o valor do select pela variavel que ela pertence e fazer a condição, axo que estou no caminho certo, mas ao mesmo tempo tem algo de errado.

 

 

Obrigado cara!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi. Que erro que dá?

E agora que olhei, parece ter algum erro de lógica naqueles seus IF's. Oque você espera fazer com ele? Ao meu ver, o primeiro IF sempre será true. Você não queria fazer alguma comparação, algo como isso?:

if($this->data['Model']['Assunto'] == 'Nome do especialista'){
...
else if($this->data['Model']['Assunto'] == 'Endereço...'){

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então eu estava revendo a lógica e vi que tem uns erros nos if. Esses ifs eu queria que de acordo com o selecionado no select exemplo, Eu selecionei a opção Nome do Especialista então a busca só faria pelo nome dos especialista, ai acho que estou fazendo algo de errado nesses if, não sei se esta certo fazer isso, mas quando eu faço a busca e vai para a pagina 'pesquisar', ele falar que as variaveis que eu coloquei nos if não foram declaradas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

<desculpa o spam>

 

Olha eu tive um avanço até agora.

 

Seguinte eu estou conseguinte fazer a busca no banco de dados, mas desde que no

$form->input
tenha o nome do campo que eu quero que venha a pesquisa. Mas não é esse o meu objetivo, de acordo com o que o usuario selecionar ele faça a busca. Quando eu coloco o filtro ele aparece esse erro

 

Warning (512): SQL Error: 1054: Unknown column 'Especialista.busca' in 'where clause' [CORE\cake\libs\model\datasources\dbo_source.php, line 527]
Code | Context
$sql	=	"SELECT `Especialista`.`id`, `Especialista`.`ativo`, `Especialista`.`nomeEspecialista`, `Especialista`.`especialidade`, `Especialista`.`subEspecialidade`, `Especialista`.`titulacao`, `Especialista`.`endereco`, `Especialista`.`telefone`, `Especialista`.`email`, `Especialista`.`qualificado`, `Especialista`.`curriculum`, `Especialista`.`historico` FROM `especialistas` AS `Especialista`   WHERE `Especialista`.`busca` = 'ary' AND `Especialista`.`filtro` = '1'   "
$error	=	"1054: Unknown column 'Especialista.busca' in 'where clause'"
$out	=	null 

como pode ver no meu banco de dados não existe os campos busca e nem filtro, eles são do form e por isso entra como se fosse um campo do banco de dados. Queria saber se tem como verificar qual filtro esta selecionado, depois no input busca, ele vai no postCondition e traz pra mim o que eu pedi. Espero que esteja sendo claro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmm... um dos problemas vai ser por causa do postConditions. Tente fazer do modo "normal":

if($this->data['Model']['Assunto'] == 'Nome do especialista'){
            $conditions = array('nomeEspecialista LIKE' => "%{$this->data['Model']['palavras_buscadas'}%";
            $this->set('resultados', $this->Especialista->find('all', array('conditions' => $conditions)));
else if($this->data['Model']['Assunto'] == 'Endereço...'){

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado lucas, consegui resolver meu problema, tive ajuda de uma pessoa no grupo CakePhp e o a solução acabou ficando assim:

 

 

function pesquisar(){
   if(!empty($this->data)){
      $resultados = null;
      if(!empty($this->data['Especialista']['filtro']) && ($this->data['Especialidade']['busca'])){
         switch($this->data['Especialista']['filtro']){
            case '1':
                $conditions = array('Especialista.nomeEspecialista LIKE' => $this->data['Especialista']['busca']);
                break;
            case '2':
                $conditions = array('Especialista.especialidade LIKE' => $this->data['Especialista']['busca']);
                break;
            case '3':
                $conditions = array('Especialista.endereco LIKE' => $this->data['Especialista']['busca']);
                break;
         }
         $resultados = $this->Especialista->find('all', array('conditions' => $conditions));
      }else{
          $this->Session->setFlash('Não Foi possivel fazer a busca!');
      }
      $this->set('resultados', $resultados);
   }
}


Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.