Ir para conteúdo

POWERED BY:

Arquivado

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

thiagosvl

PHP - sistema de busca

Recommended Posts

Boa tarde!

 

Estou montando um sistema de busca PHP e até então está da seguinte forma:

<?php $busca = $_POST["busca"];   
    $procura  = "+" . $busca; 
	$procura_textos = mysqli_query($conecta, "SELECT * FROM conteudo WHERE MATCH(titulo,texto) AGAINST('" . $busca . "' IN BOOLEAN MODE)");  
        
	while($textos = mysqli_fetch_object($procura_textos)) {
        
        echo '<div class="textos">';
        echo '<div class="cadaTexto"><div class="titulo-textos"><a href="textosC.php?id='.$textos->id.'">'.$textos->titulo.'</a></div>'; 
        echo (limitarTexto('<div class="texto"><pre>'.$textos->texto.'</pre></div>', $limite = 450));
        echo '<a class="linkTextoCompleto" href="textosC.php?id='.$textos->id.'">'.'Clique para ler +'.'</a></div></div>';
		echo '<div class="clear">'.'</div>';}
        ?>

Tenho um banco de dados que serve a três páginas, que são elas: DICIONARIO, TEXTOS E PONTOS.

O banco tem a seguinte estrutura:

ID - id de cada POSTAGEM

ID_CATEGORIA - QUE SERÁ DICIONARIO, TEXTOS OU PONTOS

ID_DICIONARIO - SERVE PARA O MENU

ID_PONTOS - SERVE PARA O MENU

TITULO - ...

TEXTO ..

AUTOR ..

VISUALIZAÇÕES ..

DATA ..

PLAY - CARREGA VIDEO DO YOUTUBE

DOWNLOAD - LINK PARA O DOWNLOAD DA MUSICA

 

A listagem com ó codigo PHP lá de cima acontece e lista todos os itens procurados, mas eu gostaria de impor condições, por exemplo:

 

Quando eu pesquisar 'forum', provavelmente ele estará na página TEXTOS ou na página DICIONARIO e dificilmente na página PONTOS, ou seja, não será preciso carregar o CAMPO PLAY e nem o campo DOWNLOAD.

Caso eu procure um trecho de uma música, a estrutura para cada post deve seguir o mesmo que a página PONTOS segue, que é carregar o download, o play..

 

No código a estrutura é sempre a mesma, e isso complica..

 

Como agir?

desde já, agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

se vc tiver suas condições definidas, basta criar if's e montar sua query dentro deles, depois executa.

Ex:

if($condicao == 1){
    $sql = "SELECT coluna1, coluna3, coluna5 FROM tabela;";
}
else if($condicao == 2){
    $sql = "SELECT coluna1, coluna2, coluna10 FROM tabela;";
}...
 
else if($condicao == N)
    $sql = "SELECT colunax FROM tabela;";
}
else{
    //cria uma consulta padrão, que pode ser a geral por exemplo
    $sql = "SELECT * FROM tabela;";
}
 
$procura_textos = mysqli_query($conecta,$sql);
 
 
while...

Compartilhar este post


Link para o post
Compartilhar em outros sites

A situação pra mim parece tão complexa que pra falar a verdade eu não consigo nem explicar..

Do jeito que você explicou, a pesquisa vai caindo em cada condição $sql e a que correspoder ele executa?

Mas e se no caso for encontrado o resultado em duas categorias, os dois serão exibidos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por isso que falei, vc precisa definir suas condições. Mas ele sempre vai executar somente uma das condições. Caso a primeira condição seja aceita, ele ja encerra as verificações e executa a query. Vc só precisar usar uma boa lógica para definir suas condições de busca :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com o seguinte codigo, como eu faço para dizer que na condição 1 os 'echos' serão diferentes em cada $sql ?

 

No caso, esse echo que a seguir seria para TEXTOS, e eu preciso de uma estrutura while diferente para DICIONARIO e outra para PONTOS..

<?php $busca = $_POST["busca"];   
    $procura  = "+" . $busca;
        
    if($condicao == 1){
    $sql = "SELECT * FROM conteudo WHERE MATCH(titulo,texto) AGAINST('" . $busca . "' IN BOOLEAN MODE)" ;
}
else if($condicao == 2){
    $sql = "SELECT coluna1, coluna2, coluna10 FROM tabela;";
}
 
else if($condicao == N){
    $sql = "SELECT colunax FROM tabela;";
}
else{
    //cria uma consulta padrão, que pode ser a geral por exemplo
    $sql = "SELECT * FROM conteudo WHERE MATCH(titulo,texto) AGAINST('" . $busca . "' IN BOOLEAN MODE)";
}
        
	$procura_conteudo = mysqli_query($conecta, $sql);  
        
	while($textos = mysqli_fetch_object($procura_conteudo)) {        
        echo '<div class="textos">';
        echo '<div class="cadaTexto">';
        echo 'A categoria é '.'<b style="color:red">'.$textos->id_categoria.'</b>';
        echo '<div class="titulo-textos"><a href="textosC.php?id='.$textos->id.'">'.$textos->titulo.'</a></div>'; 
        echo (limitarTexto('<div class="texto"><pre>'.$textos->texto.'</pre></div>', $limite = 300));
        echo '<a class="linkTextoCompleto" href="textosC.php?id='.$textos->id.'">'.'Clique para ler +'.'</a></div></div>';
		echo '<div class="clear">'.'</div>';}
        ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

É assim que cada post está aparecendo com a estrutura atual:

echo '<div class="textos">';echo '<div class="cadaTexto">';echo 'A categoria é '.'<b style="color:red">'.$textos->id_categoria.'</b>';echo '<div class="titulo-textos"><a href="textosC.php?id='.$textos->id.'">'.$textos->titulo.'</a></div>';echo (limitarTexto('<div class="texto"><pre>'.$textos->texto.'</pre></div>', $limite = 300));echo '<a class="linkTextoCompleto" href="textosC.php?id='.$textos->id.'">'.'Clique para ler +'.'</a></div></div>';        echo '<div class="clear">'.'</div>';}

1xIAgT6.png

Sendo que os posts de música devem aparecer com uma formatação diferente, que no caso seria:

echo '<div class="pontos"><div class="titulo-pontos">'.$row['titulo'].'</div>';echo '<div class="Flexible-container-pontos">'.$row['play'].'</div>';	echo '<div class="ponto-pontos"><pre>'.$row['texto'].'</pre></div>';echo '<a href="'.$row['download'].'" target="_blank">Download<label class="icon-download"></label></a></div>';echo '<div class="clear">'.'</div>';}

Ficando da seguinte forma:

1zxxiqE.png

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.