Ir para conteúdo

POWERED BY:

Arquivado

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

Thiago Domingos

[Resolvido]  Pesquisa

Recommended Posts

Olá galera tudo bem com vocês??

Seguinte criei um sistema de busca em PHP que faz pesquisa em uma tabela com Titulo, Descrição e link

até ai tudo bem ele esta pesquisando beleza.

 

Só que por exemplo se eu Salvar o Titulo como "Viagem para Fernando de Noronha" e Pesquisar por exemplo " Viagem Fernando"

não retorna o resultado "Viagem para Fernando de Noronha" só retorna o mesmo se eu digitar "Viagem para Fernando"

 

Segue a linha que estou utilizando para fazer o select

 

$sql = "SELECT * FROM pesquisar WHERE titulo like '%$pesquisar%' or descricao like '%$pesquisar%' or link like '%$pesquisar%'";

 

Muito obrigado pela ajuda!

 

 

 

Esse é o Script Completo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin título</title>

</head>
<body>
<? 
include ("Integracao/ConexaoBanco.php");
?>
<?
//requisições do salvar
$grava_titulo = addslashes($_POST['titulo']);
$grava_descricao = addslashes($_POST['descricao']);
$grava_link = addslashes($_POST['link']);
$btSalvarCadastro = $_POST["btSalvarCadastro"];

//requisições do pesquisar
$btPesquisar = $_POST["btPesquisar"];
$pesquisar = addslashes($_POST['pesquisar']);

?>
<form id="form1" name="form1" method="post" action="Pesquisa.php">
  <table width="60%" border="0">
    <tr>
      <td width="14%">Titulo</td>
      <td width="86%"><input name="titulo" type="text" id="titulo" size="40" /></td>
    </tr>
    <tr>
      <td>Descrição</td>
      <td><textarea name="descricao" cols="30" rows="6" id="descricao"></textarea></td>
    </tr>
    <tr>
      <td>Link</td>
      <td><input name="link" type="text" id="link" size="60" /></td>
    </tr>
    <tr>
      <td> </td>
      <td><input type="submit" name="btSalvarCadastro" id="btSalvarCadastro" value="Enviar" /></td>
    </tr>
  </table>
  <p> </p>
</form>



<p>
  <?
	if($btSalvarCadastro){
			
		$sql_grava = mysql_query("INSERT INTO pesquisar (titulo, descricao, link) value ('$grava_titulo','$grava_descricao','$grava_link')");
		?>
  <script>alert('Cadastrado com Sucesso!');</script>
		<?
	
	}
?>


<form id="form2" name="form2" method="post" action="">
  <label>
    <input type="text" name="pesquisar" id="pesquisar" />
  </label>
  <label>
    <input type="submit" name="btPesquisar" id="btPesquisar" value="Pesquisar" />
  </label>
</form>

<?
	
	
	if ($btPesquisar){
					
		$sql = "SELECT * FROM pesquisar WHERE titulo like '%%$pesquisar%%' || descricao like '%%$pesquisar%%' || link like '%%$pesquisar%%'";
		$query = mysql_query($sql);
		
		while($linha = mysql_fetch_array($query)){
				
				$titulo= $linha['titulo'];
				$descricao = $linha['descricao'];
				$link = $linha['link'];
				
				$descricao = substr($descricao,0,200);
				 
				echo "<hr>";
				//echo "<p>-> Titulo: ".$titulo ."</p>";				
				?>
<h1><a href="<?=$link?>" name="<?=$titulo?>" target="_blank"><?=$titulo?></a></h1>
                <?
				echo "<p>-> Descrição: ".$descricao ."</p>";
				//echo "<p>-> Link: ".$link ."</p>";
				
		}//fim while
		
		echo "<br><i>SQL: ". $sql;
		
	//fim do if
	}
				
	 ?>

</body>

</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Dia, o seu problema é que quando você usa as % você esta usando nas extremidades do texto de pesquisa... logo sua sql ficaria assim

 

 

$sql = "SELECT * FROM pesquisar WHERE titulo like '%$Viagem Fernando%' or descricao like '%$Viagem Fernando%' or link like '%$Viagem Fernando%'";

 

E como você mesmo descreveu acima, no banco esta "Viagem para Fernando"... o que você precisaria alterar é para que as % ficassem entre cada espaço. por exemplo "%Viagem%Fernando%" a busca ficará mais demorada ( ms )... Mas a meu ver para você este é o melhor método. Caso alguém utilize outro, de uma mão ae.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use AND em vez de OR

 

Eu coloquei o AND em vez de Or só que ai ele Pesquisa assim:

Se tiver "Fernando de Noronha" em Descrição e se tiver Também "Fernando de Noronha" em Titulo e se tiver também "Fernando de Noronha" em Link.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa... com o AND no lugar do OR, seria ainda mais dificl de achar o seu registro ( se eu não entendi errado o seu banco ).

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu pensei assim:

 

SELECT * FROM pesquisar WHERE titulo like '%$Viagem%' AND titulo LIKE '%Fernando%'";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que mal lhe pergunte William, o que difere

 

SELECT * FROM pesquisar WHERE titulo like '%$Viagem%' AND titulo LIKE '%Fernando%'

de

 

SELECT * FROM pesquisar WHERE titulo like '%$Viagem%Fernando%'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao pé da letra o que você quer:

 

<?php

$pesquisar = "Diego Alves Souza";
$pesquisar = explode(" ", $pesquisar);

for($x = 0; $x < count($pesquisar); $x++)
{
   $where .= "%$pesquisar[$x]";
}

echo "SELECT * FROM pesquisar WHERE titulo like '$where%'";


?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria algo assim?

<?$variavel_form  = $_POST["variavel_form"];$variavel_busca = str_replace(" ","%",$variavel_form);// O select ficaria assimSELECT * FROM pesquisar WHERE titulo like '%$variavel_busca%'?>
Se falei besteira pesso desculpas.. Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uall.. Pode cre

uhashuas o Jeimysons resumiu em 3 linhas o que eu fiz em 7. uahsuhsa

 

eu complico pra caramba as vezes.. xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria algo assim?

 

 

<?$variavel_form  = $_POST["variavel_form"];$variavel_busca = str_replace(" ","%",$variavel_form);// O select ficaria assimSELECT * FROM pesquisar WHERE titulo like '%$variavel_busca%'?>
Se falei besteira pesso desculpas.. Imagem Postada

 

 

 

Não falou besteira não!!!!

 

D+ funcionou legal!!!!

 

Muito Obrigado pela ajuda ai!!

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.