Ir para conteúdo

POWERED BY:

Arquivado

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

Leandro Nigre

Busca por palavra exata

Recommended Posts

As aspas sumiram, mas continua dando erro: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%salários%''' at line 1

 

Estou usando MySQL 5.0 com Apache 2.0 e php 5.2.6

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, agora deu alguma coisa. Dei o echo e a busca trouxe o resultado. Porém, ainda não traz a palavra exata.

 

O Code está assim:

 

 

$colname_Recordset1 = "-1";

if (isset($_GET['search'])) {

$colname_Recordset1 = $_GET['search'];

}

mysql_select_db($database_connPMMC, $connPMMC);

$query_Recordset1 = sprintf("SELECT * FROM noticias WHERE texto Like '% " . $colname_Recordset1 . " %'");

 

echo "Consulta: " . $query_Recordset1;

 

$Recordset1 = mysql_query($query_Recordset1, $connPMMC) or die(mysql_error());

$row_Recordset1 = mysql_fetch_assoc($Recordset1);

$totalRows_Recordset1 = mysql_num_rows($Recordset1);

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas você não colocou o que apareceu na tela. Imagem Postada

 

Poste o que apareceu. Só assim dá para saber como a consulta está e qual é o erro dela

 

 

OBS: Nesse caso, não precisa usar sprintf. Veja como postei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ESTAMOS NO CAMINHO CERTO!

 

Veja, agora deu certo. O resultado traz exatamente a palavra digitada, e o echo traz o que foi pesquisado:

 

Consulta: SELECT * FROM noticias WHERE texto LIKE '% salários %'

 

Ainda estou fazendo os testes, mas identifiquei alguns probleminhas.

1 - Se a palavra pesquisada está bem antes de uma vírgula, ou entres aspas, ou colada em qualquer caractere de acentuação, não traz o resultado.

2 - Se não digito nada e submeto o formulário, ele curiosamente traz o primeiro resgitro do BD, o do meio, e o último [ Imagem Postada weird]

3 - programando manualmente assim, se depender do dreamweaver, significa que vou dar muito trabalho por aqui ainda [ Imagem Postada ]

Compartilhar este post


Link para o post
Compartilhar em outros sites

provavelmente está dando conflito com o % no sprintf. Faça assim

 

$query_Recordset1 = "SELECT * FROM noticias WHERE texto Like '% " . $colname_Recordset1 . " %'";

echo "Consulta: " . $query_Recordset1;

$Recordset1 = mysql_query($query_Recordset1, $connPMMC) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);

 

1 - Se a palavra pesquisada está bem antes de uma vírgula, ou entres aspas, ou colada em qualquer caractere de acentuação, não traz o resultado.

Nesse caso, você terá de fazer uns OR's, inserindo as possibiliadades aceitas pelas condições. Uma maneira mais correta é usar expressão regular, mas creio que você nem saiba o que é isso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade Beraldo, eu já tinha tirado o sprintf antes de fazer os testes.

 

Bom, de qualquer maneira, um dos problemas eu resolvi. Usando OR's pegarei palavras mesmo coladas em vírgulas e pontos finais. Vou incrementar mais para incluir aspas e parêntes, que são bem comuns também.

 

mysql_select_db($database_connPMMC, $connPMMC);

$query_Recordset1 = "SELECT * FROM noticias WHERE texto LIKE '% " . $colname_Recordset1 . " %' OR texto LIKE '% " . $colname_Recordset1 . ", %' OR texto LIKE '% " . $colname_Recordset1 . ". %'";

echo "Consulta: " . $query_Recordset1;

 

O que você acha?

 

Agora, quanto ao lance de submeter o formulário vazio, acho que posso resolver com uma função de validação de formulário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poutz, esse lance de usar OR's vai dar trabalho.... :upset:

 

palavra.

palavra,

palavra?

palavra!

palavra-

-palavra

-palavra,

(palavra

palavra)

palavra).

(palavra)

(palavra).

"palavra

palavra"

palavra".

"palavra"

"palavra".

 

Mas tudo bem, é o jeito.

 

O único erro que dá aquele de submeter o formulário vazio. Ele traz o primeiro, o último e o registro do meio do BD. Mas relaxa, isso resolvo impedindo a pessoal de submeter se estiver vazio. Agora, vou ver se consigo (manualmente) repetir a região para ele litar o resultados, pois isso eu fazia pelo dreamweaver.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza Beraldo! Cara, valeu pela força e paciência. Vou estudar as expressões regulares e qualquer coisa volto aqui!

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Beraldo, blza? Será que pode me ajudar com mais uma coisinha? Bem, é o seguinte.

 

Com o code abaixo, percebi que se uma pessoa buscar por duas palavras no form, só retornará o resultado se as palavras estiverem exatamente como foi digitado no formulário. Exemplo: Se a pessoa buscar a cidade Mogi das Cruzes, dá certo. Se buscar Mogi Cruzes, dá errado.

"SELECT * FROM noticias WHERE texto LIKE '% " . $colname_Recordset1 . " %'";

Encontrei uma função que resolve isso, deixando o code assim:

"SELECT * FROM noticias WHERE texto LIKE '% " . implode('%', explode(' ', $colname_Recordset1)) . " %'";

Porém, se a pessoa digitar ao inverso Cruzes Mogi, não traz resultado.

 

 

Minha peregunta então é: há alguma função simples com a de cima, ou esse caso precisa ser resolvidos ccom as tais expressões regulares?

 

Abração

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande Beraldo!

Tentei usar o code que você indicou, mas a página de resultado dá erro (não é encontrada)... Veja se estou usando corretamente, por favor. Imagem Postada

$colname_Recordset1 = "-1";if (isset($_GET['search'])) {  $colname_Recordset1 = $_GET['search']; }$palavras = explode(" ", $colname_Recordset1);mysql_select_db($database_connPMMC, $connPMMC);$query_Recordset1 = "SELECT * FROM noticias WHERE"for (i$ = 0; $1 < count ($palavras); $i++) {$query_Recordset1 = "texto LIKE ' " . $palavras[$i] . " ' " . (($i == count ($palavras) - 1) ? "" : " OR");}echo "Consulta: " . $query_Recordset1;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sabe quando você vai entrar na Net e está sem conexão? Daí o browser mostra aquela página em branco padrão com o título Página não Encontrada / Page Not Found error .... Isso sempre acontece no meu servidor de testes quando há erro de programação na página...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz uma pequena alteração e agora o sistema encaminha para a página de resultado, não dando mais o erro anterior.

Só que não está trazendo nenhum resultado. E quando busco por duas palavras, ele só "imprime" a segunda.

Por exemplo, digitei na busca cargos salários e ele retornou o seguinte: Consulta: SELECT * FROM noticias WHERE texto LIKE ' salários '

 

Meu code está assim:

$colname_Recordset1 = "-1";
if (isset($_GET['search'])) {
  $colname_Recordset1 = $_GET['search']; }

$palavras = explode(" ", $colname_Recordset1);

mysql_select_db($database_connPMMC, $connPMMC);
for ($i = 0; $i < count ($palavras); $i++) {
$query_Recordset1 = " SELECT * FROM noticias WHERE texto LIKE ' " . $palavras[$i] . " ' " . (($i == count ($palavras) - 1) ? "" : " OR");
}

echo "Consulta: " . $query_Recordset1;

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.