Foros del Web » Programando para Internet » PHP »

Cuadro de busqueda php. Buscar terminos con tildes.

Estas en el tema de Cuadro de busqueda php. Buscar terminos con tildes. en el foro de PHP en Foros del Web. Hola tengo un problema con un cuadro de busqueda y no se cual es la mejor manera de resolverlo. Tengo una tabla donde el titulo ...
  #1 (permalink)  
Antiguo 11/09/2012, 11:28
 
Fecha de Ingreso: abril-2011
Mensajes: 14
Antigüedad: 13 años
Puntos: 1
Pregunta Cuadro de busqueda php. Buscar terminos con tildes.

Hola tengo un problema con un cuadro de busqueda y no se cual es la mejor manera de resolverlo.

Tengo una tabla donde el titulo de un area queda guardado de la siguiente forma:

HOSTELERÃA Y TURISMO

Tambien tengo un formulario el cual me dice cual es el area que el cliente busca y realizo la siguiente consulta.

Código PHP:
$cadbusca "SELECT id , titulo FROM area WHERE titulo LIKE '%$busqueda%'"
Mi problema es que el cliente debe de encontrar el resultado ponga o no ponga acentos.


Código PHP:
$mysqli = new mysqli($conection['server'], $conection['user'], $conection['pass'], $conection['base']);
/* verificar la conexión */
if (mysqli_connect_errno()) { printf("Conexión fallida: %s\n"mysqli_connect_error()); exit(); }

$busqueda $_POST['busqueda'];
$busqueda htmlentities($_POST['busqueda']);
if ( 
get_magic_quotes_gpc() ) { $busqueda htmlspecialcharsstripslashes$busqueda ) ); }

if(
$busqueda<>''){ 
$cadbusca "SELECT id , titulo FROM area WHERE titulo LIKE '%$busqueda%'";
$result mysqli_query($mysqli$cadbusca) or die ("Error: ".mysqli_error($mysqli));
$row_cnt mysqli_num_rows($result);

if(
$row_cnt>0){

echo 
"<p>Areas: </p><ul>";
while(
$row mysqli_fetch_array($resultMYSQLI_ASSOC)){ 
echo 
"<li><a href='cursos.php?idarea=".$row['id']."'>" $row['titulo'] . "</a></li>";}
echo 
"</ul>";}

}

Alguna ayuda para resolver este problema??
  #2 (permalink)  
Antiguo 11/09/2012, 11:34
Avatar de PIRRUMAN  
Fecha de Ingreso: febrero-2006
Ubicación: Monterrey, Nuevo León
Mensajes: 633
Antigüedad: 18 años, 2 meses
Puntos: 53
Respuesta: Cuadro de busqueda php. Buscar terminos con tildes.

prueba con la funcion COLLATE

$cadbusca = "SELECT id , titulo FROM area WHERE titulo LIKE '%$busqueda%' COLLATE utf8_general_ci";
__________________
“Prefiero ser un tonto momentaneo que un eterno ignorante”
“¡El éxito es resultado de los aciertos,los aciertos resultado de la experiencia y la experiencia resultado de los errores!”
  #3 (permalink)  
Antiguo 11/09/2012, 11:49
 
Fecha de Ingreso: abril-2011
Mensajes: 14
Antigüedad: 13 años
Puntos: 1
Pregunta Respuesta: Cuadro de busqueda php. Buscar terminos con tildes.

Cita:
Iniciado por PIRRUMAN Ver Mensaje
prueba con la funcion COLLATE

$cadbusca = "SELECT id , titulo FROM area WHERE titulo LIKE '%$busqueda%' COLLATE utf8_general_ci";

Gracias por la rapidez. Me urge solucionar el problema.

Me sale el siguiente error.
Código:
Error: COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'latin1'
La tabla es DEFAULT CHARACTER SET utf8 COLLATE utf8_spanish2_ci
  #4 (permalink)  
Antiguo 11/09/2012, 11:59
Avatar de PIRRUMAN  
Fecha de Ingreso: febrero-2006
Ubicación: Monterrey, Nuevo León
Mensajes: 633
Antigüedad: 18 años, 2 meses
Puntos: 53
Respuesta: Cuadro de busqueda php. Buscar terminos con tildes.

Cita:
Iniciado por pedroparra Ver Mensaje
Gracias por la rapidez. Me urge solucionar el problema.

Me sale el siguiente error.
Código:
Error: COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'latin1'
La tabla es DEFAULT CHARACTER SET utf8 COLLATE utf8_spanish2_ci
Deberias postear en el foro sql o mysql
__________________
“Prefiero ser un tonto momentaneo que un eterno ignorante”
“¡El éxito es resultado de los aciertos,los aciertos resultado de la experiencia y la experiencia resultado de los errores!”
  #5 (permalink)  
Antiguo 12/09/2012, 03:40
 
Fecha de Ingreso: abril-2011
Mensajes: 14
Antigüedad: 13 años
Puntos: 1
Respuesta: Cuadro de busqueda php. Buscar terminos con tildes.

He solucionado el problema a medias. Aver si lo solucionamos de una vez. Esta es la situacion:

- Base de datos : (Ya cambié la forma en la que se guardan los datos quedando de la siguiente manera)

Código:
Tabla AREA
-----------------------------------------------
id -->43  - titulo --> EDIFICACIÓN
id -->44  - titulo --> ENERGÍAS RENOVABLES
------------------------------------------
CHARACTER SET utf8 
COLLATE utf8_spanish2_ci
My script final:

Código PHP:
header('Content-Type: text/html; charset=UTF-8');
$busqueda $_POST['busqueda'];

// Datos de conexion:
$mysqli = new mysqli($conection['server'], $conection['user'], $conection['pass'], $conection['base']);
if (
mysqli_connect_errno()) { printf("Conexión fallida: %s\n"mysqli_connect_error()); exit(); }

@
mysql_query("SET NAMES 'utf8'");

if(
$busqueda<>''){

$cadbusca "SELECT id , titulo FROM area WHERE titulo LIKE '%".$busqueda."%'";

$result mysqli_query($mysqli$cadbusca) or die ("Error: ".mysqli_error($mysqli));
$row_cnt mysqli_num_rows($result);

if(
$row_cnt>0){

echo 
"<p>Areas: </p><ul>";

while(
$row mysqli_fetch_array($resultMYSQLI_ASSOC)){ echo "<li><a href='cursos.php?idarea=".$row['id']."'>" utf8_encode($row['titulo']) . "</a></li>";}

echo 
"</ul>";

}


De esta forma ocurre lo siguiente:

Buscando --> edificacion --> muestra el resultado correctamente -> EDIFICACIÓN
Buscando --> energias --> no encuentra ningun resultado.

Alguien sabe como hacer para que funcione correctamente??

Última edición por pedroparra; 12/09/2012 a las 10:24
  #6 (permalink)  
Antiguo 12/09/2012, 10:25
 
Fecha de Ingreso: abril-2011
Mensajes: 14
Antigüedad: 13 años
Puntos: 1
Pregunta Respuesta: Cuadro de busqueda php. Buscar terminos con tildes.

Buscando --> energ --> funciona correctamente y muesra --> ENERGÍAS RENOVABLES

Ademas haciendo la consulta en phpmyadmin funciona correctamente. Osea que es problema de la codificación.


Añado el siguiente codigo al script para comprobar que utilizo utf8

Código PHP:
if (!$mysqli->set_charset("utf8")) {
    
printf("Error cargando el conjunto de caracteres utf8: %s\n"$mysqli->error);
} else {
    
printf("Conjunto de caracteres actual: %s\n"$mysqli->character_set_name());

Es seguro que estoy utilizando utf8. En el foro de mysql me han dicho que esta todo correcto en lo que a la consulta se refiere! que es problema de php! Alguna ayuda??

Última edición por pedroparra; 12/09/2012 a las 11:05

Etiquetas: formulario, php+basedatos, tildes, busquedas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:49.