Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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!
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?
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
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>';}
?>É 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>';}
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/1xIAgT6.png&key=4f76d4171426333ecfe52b27ac6bac31966ea6567e9ba6163c0f41739d884b76" alt="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:
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/1zxxiqE.png&key=c3768876ecc716c45222f43e0e14a27a939b09babab508a65edcb2d5ebc99a7a" alt="1zxxiqE.png" />
vc pode criar cada estrutura dentro dos if's, de acordo com as condições que determinar
se vc tiver suas condições definidas, basta criar if's e montar sua query dentro deles, depois executa.
Ex:
else{ //cria uma consulta padrão, que pode ser a geral por exemplowhile...