Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 4
Sexo: Masculino

Ignorar caractéres com assento numa pesquisa

23-03-2012 16:24

Olá.
Precisava da vossa ajuda. Tenho uma funcão de pesquisa simples em PHP. Acontece que se eu escrever por exemplo "amalia" como termo de pesquisa ele não devolve resultados, mas se escrever "amália" já devolve. Ou seja o que eu pretendia é que ele ignorasse o acento ao fazer a pesquisa na base de dados e devolvesses os resultados.

Envio o código:

function jm_search(){ global $database, $sstring, $scategoria, $my, $cinConfig, $Itemid, $option, $mainframe; $suchstring = trim( strtolower( $sstring ) ); $searchTerms = explode(' ', $suchstring); $searchTermBits = array(); foreach ($searchTerms as $term) { $term = trim($term); if (!empty($term)) { $searchTermBits[] = "".$scategoria." LIKE '%$term%' "; } } $query1 = "SELECT * FROM #__jmovies WHERE ".implode(' AND ', $searchTermBits)." AND published = 1 AND access <= ".(int)$my->gid." ORDER BY titolo"; $database->setQuery($query1); //echo $database->getQuery(); $rows = $database->loadObjectList(); $total = count($rows); switch ($scategoria) { case 'titolo': $scat = "Nome da letra "; break; case 'anno': $scat = " Autor da letra "; break; case 'nazione': $scat = " Autor da música "; break; case 'regista': $scat = " Repertório "; break; case 'attorealtri': $scat = " Fado original "; break; }

Obrigado pelo vosso tempo e pela ajuda!
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17677
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Ignorar caractéres com assento numa pesquisa

23-03-2012 16:26

No banco de dados está salvo com ou sem acento?
0
A melhor hospedagem para o seu site HostGator!
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 4
Sexo: Masculino

Ignorar caractéres com assento numa pesquisa

23-03-2012 16:27

Olá. Obrigado pela sua ajuda.
No banco de dados está com assento.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17677
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Ignorar caractéres com assento numa pesquisa

23-03-2012 16:29

Existe função para retirar o acento da palavra usada na busca, mas não sei se serve para tirar o acento de uma palavra do banco de dados. Eu vou fazer um teste aqui e já respondo.
0
A melhor hospedagem para o seu site HostGator!
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17677
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Ignorar caractéres com assento numa pesquisa

23-03-2012 16:36

Fiz um teste aqui e parece que deu certo. Tenho um bd com os nomes dos estados, entre ele Pará.

Fiz uma função para trocar letras acentuadas pela letra sem acento. Usei essa função para limpar os caracteres do valor da coluna.

<?php function sem_acento($string) { $string = preg_replace( "[ÁÀÂÃÄ]", "A", $string); $string = preg_replace( "[áàâãäª]", "a", $string); $string = preg_replace( "[ÉÈÊË]", "E", $string); $string = preg_replace( "[éèêë]", "e", $string); $string = preg_replace( "[ÍÌÎÏ]", "I", $string); $string = preg_replace( "[íìîï]", "i", $string); $string = preg_replace( "[ÓÒÔÕÖ]", "O", $string); $string = preg_replace( "[óòôõöº]", "o", $string); $string = preg_replace( "[ÚÙÛÜ]", "U", $string); $string = preg_replace( "[úùûü]", "u", $string); $string = str_replace( "Ç", "C", $string); $string = str_replace( "ç", "c", $string); return $string; } $dbhost="localhost"; /* servidor */ $dbuser=""; /* usuário do banco de dados */ $dbpasswd=""; /* senha do banco de dados */ $dbname=""; /* nome do banco de dados */ $conexao = mysql_connect($dbhost, $dbuser, $dbpasswd) or die ("não foi possível a conexão, verifique os dados."); $db = mysql_select_db($dbname) or die ("não foi possível o acesso ao banco de dados $dbname."); $query=mysql_query("SELECT * FROM estados WHERE ".sem_acento('nome')."='Para'"); while($dados=mysql_fetch_array($query)) { extract($dados); echo "$nome<br />"; } ?>

0
A melhor hospedagem para o seu site HostGator!
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 4
Sexo: Masculino

Ignorar caractéres com assento numa pesquisa

23-03-2012 16:47

OK.
Vou testar e ver se resolve .
Muito obrigado.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17677
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Ignorar caractéres com assento numa pesquisa

23-03-2012 16:57

;)
0
A melhor hospedagem para o seu site HostGator!
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 4
Sexo: Masculino

Ignorar caractéres com assento numa pesquisa

24-03-2012 11:25

Olá. Já resolvi o problema, obrigado.
No entanto tenho outra dúvida que está relacionada com a de cima.
Eu tenho um index alfabetico (A | B | C | D |...para catalogar letras de músicas), assim se o usuário pretende ver todas as letras de música começadas por "A" simplesmente clica em "A". Acontece que os resultados devolvidos não incluem letras começadas por "À" por exemplo "Às pedras da rua".

Como posso fazer para que quando dse clique em "A" apareçam todos os resultados incluindo letra com acento?
Aqui vai o código original:
switch($task){ case "listforletter": $action = "index.php?option=".$option."&Itemid=".$Itemid."& amp;task=".$task."&lettera=".$lettera; if($lettera!='0') $database->setQuery("SELECT COUNT(a.id) FROM #__jmovies as a WHERE a.access <= ".(int)$my->gid." AND SUBSTRING(a.titolo,1,1)='".$lettera."'"); else $database->setQuery("SELECT COUNT(a.id) FROM #__jmovies as a WHERE a.access <= ".(int)$my->gid." AND (SUBSTRING(a.titolo,1,1)='0'"); $total = $database->loadResult(); break;

Obrigado pelo vosso tempo e paciência!
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17677
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Ignorar caractéres com assento numa pesquisa

24-03-2012 11:44

Você deve primeiro usar o script que indiquei para trocar o caractere acentuado, depois, você deve pegar a letra passa pelo GET, e passar para consulta, tipo assim:

...WHERE coluna LIKE '$letra%'

Assim a consulta pega todos os termos iniciados pela letra passada.
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado