Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
bom, tenho um código que faz uma busca no bdn.
<?php include 'conecta.php';
$db=conectar();
?>
<?
if(!empty($HTTP_POST_VARS[palavra])) {
$palavra = str_replace(" ", "%", $HTTP_POST_VARS[palavra]); / Altera os espaços adicionando no lugar o simbolo % /
$qr = "SELECT * FROM noticias WHERE noticia LIKE '%".$palavra."%' ORDER BY codigo DESC";
$sql = mysql_query($qr); // Executa a query no Banco de Dados
$total = mysql_num_rows($sql); // Conta o total ded resultados encontrados
echo "Sua busca retornou <b>'$total'</b> resultados.<br>";
while($r = mysql_fetch_array($sql)) { // Gera o Loop com os resultados
echo "<hr><br />";
echo $r[noticia]."<br>";
}
}
?><!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">](http://www.w3.org/1999/xhtml)
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>
<form method="POST" action="busca.php">
Palavra: <input type="text" name="palavra">
<input type="submit" value="Buscar">
</form>
</body>
</html>Notice: Use of undefined constant palavra - assumed 'palavra' in c:\arquivos de programas\easyphp1-8\www\estudo_de_php\busca.php on line 6
Notice: Use of undefined constant palavra - assumed 'palavra' in c:\arquivos de programas\easyphp1-8\www\estudo_de_php\busca.php on line 7
Até consigo ver o que ele procurou, mas fica estas linhas que eu não sei o que é. Outra coisa, teria como destacar a palavra que digitei quando for efetuada a procura?
Desde já agradeço.
http://forum.imasters.com.br/public/style_emoticons/default/natal_wink.gif
Apreveitando ... Eu nunca vi esta função preg_replace.. Você poderia me falar como ela funciona.
Sobre que você me falou na resposta passada deu certo, o texto ficou negrito, mas continua dando aquele erro:
>
use of undefined constant palavra - assumed 'palavra' in c:\arquivos de programas\easyphp1-8\www\estudo_de_php\busca.php on line 6
use of undefined constant palavra - assumed 'palavra' in c:\arquivos de programas\easyphp1-8\www\estudo_de_php\busca.php on line 7
Só que agora tbm dar.:
use of undefined constant noticia - assumed 'noticia' in c:\arquivos de programas\easyphp1-8\www\estudo_de_php\busca.php on line 15
Até
<?php
include 'conecta.php';
$db = conectar();
if( !empty($_POST['palavra']) )
{
$palavra = str_replace(" ", "%", $_POST['palavra']); /* Altera os espaços adicionando no lugar o simbolo % */
$qr = "SELECT * FROM noticias WHERE noticia LIKE '%".$palavra."%' ORDER BY codigo DESC";
$sql = mysql_query($qr); // Executa a query no Banco de Dados
$total = mysql_num_rows($sql); // Conta o total ded resultados encontrados
echo "Sua busca retornou <b>'$total'</b> resultados.<br>";
while( $r = mysql_fetch_array($sql) ) { // Gera o Loop com os resultados
echo "<hr><br />";
echo preg_replace("/($palavra)/is", "<strong>\\1</strong>", $r['noticia']) . "<br />";
}
}
?>
Provavelmente você continuou não colocando os apóstrofos nas chaves de *$_POST* e *$r*, certo?
[]'s
Aproveitando o tópico e um problema que também estou tendo...
Nesse código se você digitar mais que uma palavra, a busca não retorna nenhum resultado (mesmo que exista).
Como resolver este problema nesse código? Alguém saca?
Abraços...
Exato.. Que burrice, agora que eu vi isso.. :(
Vlw Paulo André!
>
xAcesHighx
No meu deu certinho, mesmo com duas palavras.. Pegue este código aii!
Estranho, eu utilizo só um campo da tabela para onde a busca aponta e com duas palavras não funciona http://forum.imasters.com.br/public/style_emoticons/default/natal_sad.gif=((
Não deve funcionar mesmo, por exemplo, deve estar gerando a seguinte query, caso seja buscado "formulario html"?
"LIKE '%formulario html%'"
Ou seja, qualquer coisa que contenha formulario html, e não formulario e html. Percebem como a separação é importante?
Neste caso, você pode fazer alguma rotina que quando houver espaço entre as palavras, inclua um % nestes espaços. Isto para buscar, mas para o destaque são outros 500...
[]'s ;)
Paulo,
Está acontecendo isso mesmo.
No caso teria que aplicar algo aqui, não é?
$palavra = str_replace(" ", "%", $HTTP_POST_VARS[palavra]);
Saberia ou poderia me ajudar nesse caso?
Abraços
Ops... :huh:
Nem tinha visto esta parte do código... Neste caso era pra funcionar sim...
Tente usar o exemplo que eu fiz antes, usando $_POST, colocando apóstrofos e etc...
Paulo, por acaso você trabalha na seven informática de BH? Até (Brigadão)
<?php
if( !empty($_POST['palavra']) )
{
$palavra = str_replace(" ", "%", $_POST['palavra']); /* Altera os espaços adicionando no lugar o simbolo % */
$qr = "SELECT * FROM Relatorios WHERE id_rel LIKE '%".$palavra."%' ORDER BY id_rel";
$sql = mysql_query($qr); // Executa a query no Banco de Dados
$total = mysql_num_rows($sql); // Conta o total ded resultados encontrados
echo "Sua busca retornou <b>'$total'</b> resultados.<br>";
while( $r = mysql_fetch_array($sql) ) { // Gera o Loop com os resultados
echo "<hr><br />";
echo preg_replace("/($palavra)/is", "<strong>\\1</strong>", $r['id_rel']) . "<br />";
}
}
?>
Tb achei estranho não funcionar sendo que existe uma função para alterar os espaços por %. Só funciona com uma palavra http://forum.imasters.com.br/public/style_emoticons/default/natal_mad.gif
Se alguém souber o que possa ser, me ajude.
Abraços
beleza xAcesHighx?!
Seguinte, o script e este ai mesmo, agora pode ser como você fez seu banco de dados.. Manda ele ai! Até
beleza, xavrim,
Então, minha tabela é composta por 3 campos:
id_rel (chave primária, auto-incremento)
id_rep (padrão 0, recebe o id do representante de uma outra tabela)
texto (tipo varchar, recebe textos em geral)
Muito estranho não funcionar.
vou tentar fazer com a sua tabela...
<?php include 'conecta.php';
$db=conectar();
?>
<?
if(!empty($_POST['palavra'])) {
$palavra = str_replace(" ", "%", $_POST['palavra']); /* Altera os espaços adicionando no lugar o simbolo % */
$qr = "SELECT * FROM [b]procura[/b] WHERE [b]texto[/b] LIKE '%".$palavra."%' ORDER BY [b]id_rel[/b] DESC";
$sql = mysql_query($qr); // Executa a query no Banco de Dados
$total = mysql_num_rows($sql); // Conta o total ded resultados encontrados
echo "Sua busca retornou <b>'$total'</b> resultados.<br>";
while($r = mysql_fetch_array($sql)) { // Gera o Loop com os resultados
echo "<hr><br />";
//echo $r[noticia]."<br>";
echo preg_replace("/($palavra)/is", "<strong>\\1</strong>", $r['[b]texto[/b]']). "<br/>";
}
}
?>Valeu, xavrim. Olha que estranho!
Criei uma tabela Teste com os campos ID e Texto. Depois gravei três registros.
id 1: volante direção porta (texto)
id 2: porta buzina roda (texto)
id 3: roda acelerador brake (texto)
Se minha busca é: "volante direção" OK, acha 1 resultado.
Se minha busca é: "volante roda", NADA, nenhum resultado encontrado.
Ou seja, buscar palavras contidas em IDs diferentes o resultado da busca é sempre "0".
Já aconteceu algo assim com vocês???
Abraços.
<?
if( !empty($_POST['palavra']) )
{
$palavra = str_replace(" ", "%", $_POST['palavra']); /* Altera os espaços adicionando no lugar o simbolo % */
$qr = "SELECT * FROM Teste WHERE texto LIKE '%".$palavra."%' ORDER BY id";
$sql = mysql_query($qr); // Executa a query no Banco de Dados
$total = mysql_num_rows($sql); // Conta o total ded resultados encontrados
echo "Sua busca retornou <b>'$total'</b> resultados.<br>";
while($r = mysql_fetch_array($sql)) { // Gera o Loop com os resultados
echo "<hr><br />";
echo $r[texto]."<br>";
}
}
?>Entendiii.. Suas perguntas anteriomente não foram muita claras, mais tá valendo. Agora, aproveitando, como seria utilziar explode() neste caso.
Experimente trocar $HTTP_POST_VARS[palavra] por $_POST['palavra'].
Para destacar, troque o output para isto:
echo preg_replace("/($palavra)/is", "<strong>\\1</strong>", $r[noticia]) . "<br />";
No caso, usei o negrito para destacar, caso queira de outra forma é só atribuir a forma no segundo parâmetro da função preg_replace() mas mantendo o retrovisor \\1.
[]'s