Problemas ao passar parâmetro no like PHP

29 views
Skip to first unread message

Fábio Souza de Andrade

unread,
Sep 8, 2010, 3:10:43 PM9/8/10
to phpfor...@yahoogrupos.com.br, ph...@googlegroups.com
Pessoal, preciso de ajuda no seguinte script:

//recebo a variável para realizar uma consulta, no banco de dados existem muitas palavras acentuadas gravadas de com o html encodado
//para resolver o problema do encode eu trato a variável $criterio para que a mesma fique no padrão que está salvo no banco.

//aqui recebo os caracteres acentuados tipo Resolução
$criterio = $_POST['criterio'];


//aqui converto a variável que vai ficar mais ou menos assim: Resolução
$criterio = htmlspecialchars(htmlentities($criterio, ENT_NOQUOTES,'utf-8'), ENT_NOQUOTES);

//após converter eu vou jogar a variável na query

$query = "select idMembro,NomeMembro,InfoMembro from membro_equipe where InfoMembro like '%$criterio%'"
$QryBusca = mysql_query($query) or die(mysql_error());
//dessa forma não tras nenhum resultado mas se eu jogar o como texto simples 

$query = "select idMembro,NomeMembro,InfoMembro from membro_equipe where InfoMembro like '%Resolução%'"
$QryBusca = mysql_query($query) or die(mysql_error());
//o resultado aparece na hora, tanto no mysql_query, como ao rodar a pesquisa ou até mesmo no terminal do mysql.

o que vocês acham?


--
Fábio Souza
Contato / MSN: sou...@gmail.com

Rodney Barreto

unread,
Sep 8, 2010, 4:02:43 PM9/8/10
to ph...@googlegroups.com
Tenta proteger a variável usando chaves {}, asim:

$query = "select idMembro,NomeMembro,InfoMembro from membro_equipe where InfoMembro like '%{$criterio}%'"

faz o teste aí...



--
Você está recebendo esta mensagem porque se inscreveu no grupo "php.ce" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para ph...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para phpce+un...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/phpce?hl=pt-BR.



--
Rodney Barreto
É preciso saber que se crê e não, crer que se sabe.

http://twitter.com/rodneybarreto

Fábio Souza de Andrade

unread,
Sep 8, 2010, 4:12:16 PM9/8/10
to ph...@googlegroups.com
Fiz o teste mano, também não deu certo. Valeu pela tentativa!

Rodney Barreto

unread,
Sep 8, 2010, 4:16:40 PM9/8/10
to ph...@googlegroups.com
Já tentou assim:

$query = "select idMembro,NomeMembro,InfoMembro from membro_equipe where InfoMembro like '%".$criterio."%'"

utilizando concatenação?

João Neto

unread,
Sep 8, 2010, 4:21:40 PM9/8/10
to ph...@googlegroups.com
Amigo.

seu problema nao é no PHP.

Imprime como a query ficou

echo $query;

e IMPRIME como está No BANCO. Se estiver diferente, por definição, nao vai buscar nada!
Atenciosamente,


João Gomes da Silva Neto
PeixeWeb - Marketing para a Internet | www.peixeweb.com.br
+55 85 88664963
Skype: joao.gsneto
Gtalk: joao.gsneto[at]gmail.com



Fábio Souza de Andrade

unread,
Sep 8, 2010, 4:24:30 PM9/8/10
to ph...@googlegroups.com
Tentei mano.

Em 8 de setembro de 2010 17:16, Rodney Barreto <rwba...@gmail.com> escreveu:

Fábio Souza de Andrade

unread,
Sep 8, 2010, 4:29:06 PM9/8/10
to ph...@googlegroups.com
Então mano, eu ja tinha feito isso também, no meu echo na variável aparece exatamente assim:


select idMembro,NomeMembro,InfoMembro from membro_equipe where InfoMembro like '%Resolu&ccedil;&atilde;o%'

se eu jogar esse select  num terminal ou no mysql_query ele vai funcionar perfeitamente, ou se executar a query com a linha idêntica à que está encima ela vai funcionar, vai me trazer o resultado perfeitamente, agora se eu o fizer passando como uma variável, ela vai dar errado exemplo essa de baixo não vai dá certo:

select idMembro,NomeMembro,InfoMembro from membro_equipe where InfoMembro like '%$criterio%'


Rodney Barreto

unread,
Sep 8, 2010, 4:36:07 PM9/8/10
to ph...@googlegroups.com
Grande, tenta mudar o parâmetro charset da função, assim:

$criterio = htmlspecialchars(htmlentities(
$criterio, ENT_NOQUOTES,'utf-8'), ENT_NOQUOTES);

para este:

$criterio = htmlspecialchars(htmlentities(
$criterio, ENT_NOQUOTES,'ISO-8859-1'), ENT_NOQUOTES);

Fábio Souza de Andrade

unread,
Sep 8, 2010, 4:44:23 PM9/8/10
to ph...@googlegroups.com
Se eu mudar para iso ele vai me retornar o criterio assim: R&Atilde;&acute;mulo - (iso-8859-1)

Porém no banco está assim: R&ocirc;mulo - (utf-8)

Logo trocar o charset nesse caso não vai adiantar, pois o problema é lá no select...

Valew pela força!

Rodney Barreto

unread,
Sep 8, 2010, 4:56:33 PM9/8/10
to ph...@googlegroups.com
Grande, você já experimentou tirar todos esses tratamentos da variável e passar para a query?

Se sua aplicação está com charset UTF-8 e o teu banco também, não precisa de tudo isso para fazer a query.

Pelo menos eu acho!

Fábio Souza de Andrade

unread,
Sep 8, 2010, 5:00:37 PM9/8/10
to ph...@googlegroups.com
Pra mim seria bem mais viável rescrever a forma como é gravado o conteúdo no banco e reinserir o conteúdo em si, mas foi discutido com a equipe aqui que isso não seria viável, logo tenho que achar uma maneira de consultar o termo que está gravado (na forma que está gravado).

Valew pela força!

Marcos Fábio

unread,
Sep 8, 2010, 4:32:21 PM9/8/10
to ph...@googlegroups.com
concatena então!

Alex Maramaldo

unread,
Sep 8, 2010, 3:14:30 PM9/8/10
to ph...@googlegroups.com

Opa corrigindo: like '%".$criterio."%'";
2010/9/8 Alex Maramaldo <alexma...@gmail.com>
Cara faz tempo, nao sei se isso acontece, mas tenta concatenar tua string sql com a tua variavel criterio: like '".$criterio."'";

2010/9/8 Fábio Souza de Andrade <sou...@gmail.com>

--
Você está recebendo esta mensagem porque se inscreveu no grupo "php.ce" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para ph...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para phpce+un...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/phpce?hl=pt-BR.



--
Att,
Alex Maramaldo
Analista de Sistemas
85 - 9688.3196
www.alexmaramaldo.com

Proteja o endereço de seus amigos como estou protegendo o seu. Ao enviar
mensagens para mais de um endereço use SEMPRE o "Cco" (cópia oculta ou "Bcc" (Blind carbon copy)).



--
Att,
Alex Maramaldo
Analista de Sistemas
85 - 9688.3196
www.alexmaramaldo.com

Proteja o endereço de seus amigos como estou protegendo o seu. Ao enviar
mensagens para mais de um endereço use SEMPRE o "Cco" (cópia oculta ou "Bcc" (Blind carbon copy)).

Paulo Águias da Paz

unread,
Sep 8, 2010, 5:15:01 PM9/8/10
to ph...@googlegroups.com
Fábio, não sei se é exatamente isso que vc quer, mas veja esse artigo:

http://www.batataechips.com/?p=238
Paulo Silva
MercyNET - Hosting & WEB
R. Major Laurindo, 379, Jd. América
+55 85 34946722 / +55 85 88771419

Alex Maramaldo

unread,
Sep 8, 2010, 3:13:50 PM9/8/10
to ph...@googlegroups.com
Cara faz tempo, nao sei se isso acontece, mas tenta concatenar tua string sql com a tua variavel criterio: like '".$criterio."'";

2010/9/8 Fábio Souza de Andrade <sou...@gmail.com>
--
Você está recebendo esta mensagem porque se inscreveu no grupo "php.ce" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para ph...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para phpce+un...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/phpce?hl=pt-BR.



--

Marcos Fábio

unread,
Sep 8, 2010, 4:15:07 PM9/8/10
to ph...@googlegroups.com
Pow cara manda o erro né!

dependendo da versão do seu mysql.. qualquer coisa pode acontecer...

imprimi examente a query q ele ta tentando executar ... e no caso O erro q da....


fciamos no aguardo

Marcos Fábio

unread,
Sep 8, 2010, 4:31:00 PM9/8/10
to ph...@googlegroups.com
$query = "select idMembro,NomeMembro,InfoMembro from membro_equipe where InfoMembro like '%$criterio%'"

var_dump( $query );
exit;

pra imprimir a query

e como  voce ta usando o or die(mysql_error());

ele vai imprimir o erro....

manda isso pra nois


Mostra o resultao pra gente!!

Fábio Souza de Andrade

unread,
Sep 9, 2010, 7:09:44 AM9/9/10
to ph...@googlegroups.com
resultado do var_dump($query):

string(99) "select idMembro,NomeMembro,InfoMembro from membro_equipe where InfoMembro like '%R&ocirc;mulo%'"

e o var_dump na execução da query 

$QryBuscaCriterio = mysql_query($query) or die(mysql_error());

resource(11) of type (mysql result)

Fábio Souza de Andrade

unread,
Sep 9, 2010, 7:10:36 AM9/9/10
to ph...@googlegroups.com
Já tinha tentado dessa maneira também mano, não dá certo... vlw!
Blog: http://souzace.multiply.com

Fábio Souza de Andrade

unread,
Sep 9, 2010, 7:11:34 AM9/9/10
to ph...@googlegroups.com
Cara, foi mal na hora que vc passou a primeira mensagem eu já tinha saido do trabalho, só vi hoje! vlw!

Fábio Souza de Andrade

unread,
Sep 9, 2010, 7:19:37 AM9/9/10
to ph...@googlegroups.com
Já tinha tentado isso também mano, mas não dá certo também! Vlw pela força!

Fábio Souza de Andrade

unread,
Sep 9, 2010, 9:42:12 AM9/9/10
to ph...@googlegroups.com, phpfor...@yahoogrupos.com.br
Amigos! Quero primeiro agradecer a proatividade de todos e vontade de ajudar mostrada aqui no fórum.

Realmente não cheguei a nenhuma solução viável e depois de uma bom diálogo com o pessoal da equipe que pertenço, resolvemos mudar a forma como o texto está sendo gravado no banco, o script em si já está funcionando e só pra quem quer saber a forma como estamos gravando o texto que vem de um CKEDITOR é assim:

$Info = $_POST["Info"];
$Info = html_entity_decode($Info);
$Info = utf8_encode($Info);


Agora meu problema com o resultado da busca se foi, só fico triste por que não consegui resolver da primeira forma.
Valew pessoal!

João Neto

unread,
Sep 9, 2010, 2:18:44 PM9/9/10
to ph...@googlegroups.com


Em 9 de setembro de 2010 10:42, Fábio Souza de Andrade <sou...@gmail.com> escreveu:
$Info = $_POST["Info"];
$Info = html_entity_decode($Info);
$Info = utf8_encode($Info);
Caro,

Eu realmente NUNCA tive de fazer isso pra criar campos de "texto".

Você não está fazendo a coisa certa, provavelmente.

Bem, verifique se o seu editor está convertendo coisas do tipo ã em &atilde; na hora de jogar no formulário. isso não é correto!

Sempre usei o TinyMCE e nunca tive problemas de html_encoding.

Outra coisa, utf8_encode serve pra converter iso-8859-1 em UTF-8. Seu site está em ISO? Seus arquivos .php estão salvos em UTF-8 ou ISO?

Não posso ajudar muito mas com certeza existe um caminho sem html_entity_decode nem utf8_encode, até por que se vc pode tomar a decisão de alterar a forma com que os dados são salvos no banco ( creio que o projeto ainda está em desenvolvimento ), então você pode tomar a decisão de corrigir esses problemas de encoding da aplicação :-)

Fábio Souza de Andrade

unread,
Sep 9, 2010, 2:50:55 PM9/9/10
to ph...@googlegroups.com
Então mano João, utilizamos aqui o ckeditor e ao que parece ele passa as variáveis encodadas em iso e exatamente nesse padrão ("ã em &atilde;") o caso era que informações como tipo "&atilde;", estavam cadastradas e como peguei o projeto ja em andamento foi me solicitado criar um sistema de buscas para essas tabelas, o pro é que no começo eu ja vi que estava errado e que informações como essa ("&atilde;") deveriam estar assim ("ã") foi usando as funções abaixo que ajeitei o html e reforcei a idéia que os dados estariam de fato no charset padrão do nosso sistema que é utf8.
$Info = html_entity_decode($Info);
$Info = utf8_encode($Info);
Agradeço a atenção e a resposta!

--
Você está recebendo esta mensagem porque se inscreveu no grupo "php.ce" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para ph...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para phpce+un...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/phpce?hl=pt-BR.
Reply all
Reply to author
Forward
0 new messages