Foros del Web » Programando para Internet » PHP »

Urgente: Caracteres % y ' en busquedas

Estas en el tema de Urgente: Caracteres % y ' en busquedas en el foro de PHP en Foros del Web. Hola tengo un buscador en mi pagina web y me he encotrado con el siguiente problema: Cuando introducen un % o una comilla simple o ...
  #1 (permalink)  
Antiguo 29/10/2007, 14:53
 
Fecha de Ingreso: mayo-2007
Mensajes: 118
Antigüedad: 17 años
Puntos: 0
Urgente: Caracteres % y ' en busquedas

Hola tengo un buscador en mi pagina web y me he encotrado con el siguiente problema:

Cuando introducen un % o una comilla simple o palabras que contengan alguno de estos caracteres, me falla la consulta ya que las tengo hechos con la sentencia like.

¿Existe alguna forma para que si introducen palabras que contenga esto me lo coja como parte de la palabra y no de la sentencia?

Espero haberme explicado más o menos bien.

Saludos y gracias de antemano.
  #2 (permalink)  
Antiguo 29/10/2007, 15:25
Avatar de jmqc  
Fecha de Ingreso: noviembre-2004
Ubicación: Venezuela
Mensajes: 353
Antigüedad: 19 años, 5 meses
Puntos: 1
Re: Urgente: Caracteres % y ' en busquedas

Que tal ARJSystem, porq cuando haces el request de la variable q envias por el formulario no la pasas por la funcion htmlentities, quedaria algo asi:

$variable = htmlentities($_REQUEST["mivariable"]);

Yo creo q eso te puede ayudar. Espero q te sirva... Saludos
__________________
Ante el desconocimiento ni entendimiento de las cosas decimos que los demás estan locos.

José Quintero. Saludos.
:adios:
  #3 (permalink)  
Antiguo 29/10/2007, 15:54
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 19 años, 1 mes
Puntos: 17
Re: Urgente: Caracteres % y ' en busquedas

Lo que deberías hacer es escapar los caracteres especiales
Código PHP:
$search "ab_d%\'";
$search mysql_real_escape_string($search);
$search strtr($search, array('_' => '\_''%' => '\%'));
mysql_query('SELECT ... WHERE name LIKE \'' $search '\''); 
  #4 (permalink)  
Antiguo 29/10/2007, 16:59
 
Fecha de Ingreso: mayo-2007
Mensajes: 118
Antigüedad: 17 años
Puntos: 0
Re: Urgente: Caracteres % y ' en busquedas

Cita:
Iniciado por Seppo Ver Mensaje
Lo que deberías hacer es escapar los caracteres especiales
Código PHP:
$search "ab_d%\'";
$search mysql_real_escape_string($search);
$search strtr($search, array('_' => '\_''%' => '\%'));
mysql_query('SELECT ... WHERE name LIKE \'' $search '\''); 
Gracias jmqc, pero no me ha valido lo que me digiste, de todas formas hago un $HTTP_GET_VARS en lugar de un $_REQUEST no se si eso influirá.

Seppo podrias explicarme un poco mejor como se haria la opcion que me comentas?

Saludos y gracias.
  #5 (permalink)  
Antiguo 29/10/2007, 19:10
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 19 años, 1 mes
Puntos: 17
Re: Urgente: Caracteres % y ' en busquedas

Vos ahora tenés un string ($HTTP_GET_VARS['algo...']), y eso lo utilizás en una consulta MySQL, lo que digo es que ejecutes lo siguiente

Código PHP:
$search $_GET['algo...']; // obvio que en vez de algo... va el nombre del índice que usás, y pongo _GET en vez de HTTP_GET_VARS porque fue reemplazado, desde PHP 4.1
$search mysql_real_escape_string($search); // escapás los caracteres comunes, tipo comillas o apóstrofes
$search strtr($search, array('_' => '\_''%' => '\%')); //escapás el _ y % que se escapan sólo para los LIKE
mysql_query('SELECT ... WHERE name LIKE \'' $search '\'');   // ejecutás la consulta 
  #6 (permalink)  
Antiguo 29/10/2007, 19:41
 
Fecha de Ingreso: mayo-2007
Mensajes: 118
Antigüedad: 17 años
Puntos: 0
Re: Urgente: Caracteres % y ' en busquedas

Cita:
Iniciado por Seppo Ver Mensaje
Vos ahora tenés un string ($HTTP_GET_VARS['algo...']), y eso lo utilizás en una consulta MySQL, lo que digo es que ejecutes lo siguiente

Código PHP:
$search $_GET['algo...']; // obvio que en vez de algo... va el nombre del índice que usás, y pongo _GET en vez de HTTP_GET_VARS porque fue reemplazado, desde PHP 4.1
$search mysql_real_escape_string($search); // escapás los caracteres comunes, tipo comillas o apóstrofes
$search strtr($search, array('_' => '\_''%' => '\%')); //escapás el _ y % que se escapan sólo para los LIKE
mysql_query('SELECT ... WHERE name LIKE \'' $search '\'');   // ejecutás la consulta 

Gracias Seppo, he estado probando y no he conseguido la solucion.

Mi servidor esta provisto de el programa este que dectecta caracteres extraños como la comilla simple. Entonces en lugar de Glos's me esta metiendo Glos\'s.

El problema lo tengo unicamente cuando se introduce unicamente % en el buscador.

También podria hacer una validacion js para ver si es % pero no se si existira algo parecido a lo que me has comentado.

Otra cosilla, para poder realizar la busqueda con Glos's en lugar de con Glos\'s, deberia utilizar el strtr? Supongo que no ya que caeria en el mismo problema, entonces como podria realizar esa busqueda correctamente?

Gracias y un saludo amigo.
  #7 (permalink)  
Antiguo 29/10/2007, 20:01
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 225
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: Urgente: Caracteres % y ' en busquedas

la solucion es q no las aceptes , ya q es conveniente por estabilidad de la bd


eso lo podrias hacer con esto str_replace("%"," ",$cadena q quieres quitarle el %)


ese cod te permitira borrar el caracter % de la consulta principal eso va antes de la consulta claro esta en la variable q pasas por like

Última edición por talcual; 29/10/2007 a las 20:04 Razón: se me olvido algo
  #8 (permalink)  
Antiguo 30/10/2007, 05:04
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 19 años, 1 mes
Puntos: 17
Re: Urgente: Caracteres % y ' en busquedas

Supongo que tenés magic_quotes_gpc... entonces no necesitás ejecutar el mysql_real_escape_string, sólo el strtr para escapar el % y el _ q las comillas mágicas no escapan

Código PHP:
 $search $_GET['algo...']; // obvio que en vez de algo... va el nombre del índice que usás, y pongo _GET en vez de HTTP_GET_VARS porque fue reemplazado, desde PHP 4.1
$search strtr($search, array('_' => '\_''%' => '\%')); //escapás el _ y % que se escapan sólo para los LIKE
mysql_query('SELECT ... WHERE name LIKE \'' $search '\'');   // ejecutás la consulta 
  #9 (permalink)  
Antiguo 30/10/2007, 08:37
 
Fecha de Ingreso: mayo-2007
Mensajes: 118
Antigüedad: 17 años
Puntos: 0
Re: Urgente: Caracteres % y ' en busquedas

Cita:
Iniciado por Seppo Ver Mensaje
Supongo que tenés magic_quotes_gpc... entonces no necesitás ejecutar el mysql_real_escape_string, sólo el strtr para escapar el % y el _ q las comillas mágicas no escapan

Código PHP:
 $search $_GET['algo...']; // obvio que en vez de algo... va el nombre del índice que usás, y pongo _GET en vez de HTTP_GET_VARS porque fue reemplazado, desde PHP 4.1
$search strtr($search, array('_' => '\_''%' => '\%')); //escapás el _ y % que se escapan sólo para los LIKE
mysql_query('SELECT ... WHERE name LIKE \'' $search '\'');   // ejecutás la consulta 
Muchas gracias Seppo cuando llegue a casa esta tarde lo probaré.
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 08:29.