Ir para conteúdo

Arquivado

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

caike245

problemas com busca(PHP-SQL) acentos...

Recommended Posts

Boa noite, estou fazendo um site para uma empresa de um parente, mas depois do site já estar funcionando, descubri um erro na minha busca.

Quando faço uma busca por nome fantasia não mostra nenhum resultado que tenha acentos um exemplo claro é Ótica que se digitado ótica (com acento) ou otica(sem acento) não aparece na busca...pesquisando pela internet descobri que pelo jeito foi um erro meu pois eu teria que ter feito uma especie de conversão antes de salvar no banco, mais eu não sabia (e ainda não entendi para ser sincero).

 

Links do site:

Busca por nome:http://www.guiacomercialpratico.com.br/bfantasia.php

Busca por atividade:http://www.guiacomercialpratico.com.br/batv.php

 

O banco já esta com cerca de 1000 registros o que seria complicado apagar e refazer, gostaria da ajuda de vocês mais experientes se tem algo que eu poça fazer para concertar este erro na busca.

 

Nota: já tentei alterar o registro no banco. mas se eu deixar escrito corretamente no banco (alterando no phpmyadmin) no navegador fica estranho aparece uns "ÃÕ~", então creio que não da para fazer uma alteração direta :/

 

Agradeço desde já a ajuda, se precisarem de mais informações por favor avisem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso aí é problema de charset pelo jeito.


Você está usando PDO?


Tente especificar ao conectar no banco de dados o charset da conexão pra ver se resolve

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso aí é problema de charset pelo jeito.

Você está usando PDO?

Tente especificar ao conectar no banco de dados o charset da conexão pra ver se resolve

 

Então...para falar a verdade poderia me dar um exemplo ou me indicar algum link de como fazer pois tentei usar alguns codigos na busca sql mais acabou que não resolveu, não sei se fiz certo mas o problema continuou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se for o que estou pensabdo faz a troca do valor do charset que domina os caracteres.

 

<head>

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

</head>

 

Espero ter ajudado

 

Edivaldo Lins Macdo

Então, mais creio que este seja para resolver problemas de visualização dos dados retornados da consulta no DB, no meu caso o DB não retorna os dados pois não encontra por causa dos acentos.

Mostre como você está fazendo a conexão com o banco de dados.

 

Segue a conexão:

<?php
$conexao = mysql_connect ("localhost" , "root") or die ("Falha conexao DB");
$db = mysql_select_db("bdguia",$conexao) or die ("Banco Inesistente");
?>

Alterei os dados da conexão para local somente para não divulgar informações do servidor, mas minha conexão eu faço com um arquivo php "conexao.php" e dou include dele em todas as paginas.

 

 

segue abaixo a busca caso ajude.

<?php
$bnome ="SELECT atvemp.codatv ,atvemp.codemp,empresas.codemp , empresas.nomefantasia, empresas.tel, empresas.anunciante, empresas.end,empresas.bairro, endereco.nomeend, endereco.codend, bairros.nomebairro, bairros.codbairro, empresas.numero, empresas.site, cidades.codcid, empresas.cidade, cidades.nomecid, empresas.email, empresas.facebook
FROM atvemp, empresas, endereco, bairros, cidades
WHERE empresas.nomefantasia LIKE _utf8 '%$var1%$var2%' COLLATE utf8_unicode_ci and atvemp.codemp=empresas.codemp and empresas.end=endereco.codend and empresas.bairro=bairros.codbairro and cidades.codcid=empresas.cidade
Group by empresas.nomefantasia
LIMIT 20
";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente isso

<?php
$conexao = mysql_connect ("localhost" , "root") or die ("Falha conexao DB");
mysql_set_charset('utf8',$conexao);
$db = mysql_select_db("bdguia",$conexao) or die ("Banco Inesistente");
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode alterar a definição da codificação dos dados, “collate”.

é so usar antes do LIKE

 

collate Latin1_General_CI_AI

o final tem AI, que significa “Accent Insensitive”. É o que reconhecerá com ou sem acento

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Tente isso

<?php
$conexao = mysql_connect ("localhost" , "root") or die ("Falha conexao DB");
mysql_set_charset('utf8',$conexao);
$db = mysql_select_db("bdguia",$conexao) or die ("Banco Inesistente");
?>

 

Mau RS eu tentei desse jeito mas não resolveu e ainda bugou algumas palavras exemplo: Cosméticos ficou CosmÃticos :/

você pode alterar a definição da codificação dos dados, “collate”.

é so usar antes do LIKE

collate Latin1_General_CI_AI

o final tem AI, que significa “Accent Insensitive”. É o que reconhecerá com ou sem acento

 

ficou desse jeito

 

WHERE empresas.nomefantasia LIKE _utf8 '%$var1%$var2%' COLLATE Latin1_General_CI_AI and atvemp.codemp=empresas.codemp and empresas.end=endereco.codend and empresas.bairro=bairros.codbairro and cidades.codcid=empresas.cidade

 

 

Só que não resolveu e ainda não faz nenhuma busca (até as que funcionava antes não funciona mais)

Compartilhar este post


Link para o post
Compartilhar em outros sites

o collate que ele quis dizer era alterar da tabela, e não na consulta. Existem vários sites na internet com dicas de charset, não sei se posso postar link de terceiros aqui, vou postar e se for errado algum admin edit por favor: http://rubsphp.blogspot.com.br/2011/07/problemas-com-charset-nunca-mais.html

Aí tem algumas dicas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Mau RS eu tentei desse jeito mas não resolveu e ainda bugou algumas palavras exemplo: Cosméticos ficou CosmÃticos :/

 

ficou desse jeito

 

WHERE empresas.nomefantasia LIKE _utf8 '%$var1%$var2%' COLLATE Latin1_General_CI_AI and atvemp.codemp=empresas.codemp and empresas.end=endereco.codend and empresas.bairro=bairros.codbairro and cidades.codcid=empresas.cidade

 

 

Só que não resolveu e ainda não faz nenhuma busca (até as que funcionava antes não funciona mais)

 

é antes do LIKE e não depois

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usa essa paradinha

utf8_encode($ln['nomedavariavel']);

O de cima vai mostrar dados do banco codificado para a linguagem da página;

utf8_decode($_POST['nomedavariavel']);

E este na hora da postagem no banco de dados ele vai codificar para a linguagem do banco.

 

Depois é só modificar ao ponto que as coisas fiquem do seu jeito!

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.