Ir para conteúdo

POWERED BY:

Arquivado

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

Campão

[Resolvido] Caracteres especiais no BD

Recommended Posts

Galera, estou com um problema e não sei como resolver! Quando faço uma busca no banco de dados com caracteres especiais, ele retorna 0 (zero) linhas de resposta, por exemplo eu criei o banco abaixo com 2 produtos de teste

 

-- phpMyAdmin SQL Dump
-- version 2.10.1
-- http://www.phpmyadmin.net
-- 
-- Servidor: localhost
-- Tempo de Geração: Abr 06, 2010 as 05:06 PM
-- Versão do Servidor: 5.0.45
-- Versão do PHP: 5.2.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

-- 
-- Banco de Dados: `teste`
-- 

-- --------------------------------------------------------

-- 
-- Estrutura da tabela `produtos`
-- 

CREATE TABLE `produtos` (
  `codigo` smallint(11) NOT NULL auto_increment,
  `nome` varchar(100) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`codigo`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;

-- 
-- Extraindo dados da tabela `produtos`
-- 

INSERT INTO `produtos` (`codigo`, `nome`) VALUES 
(1, 'ção'),
(2, 'cao');

e criei a seguinte paginas

 

<?php
	$host="localhost";
	$user="root";
	$senha="";
	$db="teste";

	$conecta=mysql_connect($host,$user,$senha);
	mysql_select_db($db,$conecta);
	if(isset($_POST["enviar"])){
		$sql = mysql_query("SELECT * FROM produtos WHERE nome LIKE '%" . $_POST["nome"] . "%'");
		$q_sql = mysql_num_rows($sql);
		
		if($q_sql == 0){
			echo "<p>Nenhum produto encontrado</p>";
		}
		else{
			for ($i=0 ; $i<$q_sql ; $i++){
				$r_sql = mysql_fetch_row($sql);	
				echo $r_sql[0] . " " . utf8_encode($r_sql[1]) . "<br />";
			}
		}
	}
?>
<form action="banco.php" method="post">
<input name="nome" type="text" />
<input type="submit" name="enviar" />
</form>

Ai se eu procuro por "ç" ele não retorna produto nenhum! e se procuro por "c", ele retorna o produto que contem "ç" também!!

 

O que esta errado!!

 

Valew!! Abraços!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valew batatinha66, mas aqui não deu certo não!

O que eu fiz!

 

No campo "Nome" da tabela no bd eu coloquei um produto com o nome de "c" e outro com o nome de "& # 2 3 1 ;", sem os espaços rs, é que tava aparecendo o ç, (seria isso o ç no modo iso certo?)

 

Ai o codigo da pagina para fazer a consulta ficou assim

 

 

<?php	$host="localhost";	$user="root";	$senha="";	$db="teste";	$conecta=mysql_connect($host,$user,$senha);	mysql_select_db($db,$conecta);	if(isset($_POST["enviar"])){		$sql = mysql_query("SELECT * FROM produtos WHERE nome LIKE '%" . utf8_decode($_POST["nome"]) . "%'");		$q_sql = mysql_num_rows($sql);				if($q_sql == 0){			echo "<p>Nenhum produto encontrado</p>";		}		else{			for ($i=0 ; $i<$q_sql ; $i++){				$r_sql = mysql_fetch_row($sql);					echo $r_sql[0] . " " . utf8_encode($r_sql[1]) . "<br />";			}		}	}?><form action="banco.php" method="post"><input name="nome" type="text" /><input type="submit" name="enviar" /></form>

Ai se eu procuro por "ç" ou por "c", so aparece como resultado o produto cujo o nome é "c"!

 

O quer sera que esta acontecendo, fiz certo o que você pediu para testar???

 

Valew, abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aow rapazeada!

 

Will Fernando, desculpa ai cara, da proxima vez, vou prestar mais atenção!!

 

Bom, consegui o que eu queria, então vou postar ai o que fiz, não sei exatamente o pq, mas deu certo!

 

Alterei a Collation do banco, da tabela e do campo em questão para "latin1_general_ci"

 

Para realizar uma pesquisa, usei o seguinte codigo

 

$sql = mysql_query("SELECT * FROM produtos WHERE nome LIKE CONVERT( _utf8 '%" . $palavra . "%' USING latin1 ) COLLATE latin1_general_ci");

e na hora de imprimir na tela o resultado eu usei utf8_encode

 

Ja para realizar uma inserção no banco, usei o seguinte codigo

 

$sql = "INSERT INTO tagindex VALUES ('','" . utf8_decode($palavra) . "')";

 

Bom, com isso ai, deu certo, ele diferencia, por exemplo, "ç" de "c" no resultado de uma pesquisa

 

Abraços!!

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.