Foros del Web » Programando para Internet » PHP »

Problema con el caracter '

Estas en el tema de Problema con el caracter ' en el foro de PHP en Foros del Web. Hola ForosdelWEb Tengo un problema con el caracter ' al pasar a la base de datos y a listar en pantalla. Saludos...
  #1 (permalink)  
Antiguo 10/07/2003, 08:28
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 4 meses
Puntos: 4
Problema con el caracter '

Hola ForosdelWEb

Tengo un problema con el caracter ' al pasar a la base de datos y a listar en pantalla.

Saludos
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #2 (permalink)  
Antiguo 10/07/2003, 08:32
 
Fecha de Ingreso: diciembre-2002
Mensajes: 220
Antigüedad: 21 años, 3 meses
Puntos: 0
¿Qué tipo de problema exactamente tienes con el caracter (')?
Explicate un poco para poder ayudarte.
Un Saludo
  #3 (permalink)  
Antiguo 10/07/2003, 08:34
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 4 meses
Puntos: 4
Mira te comento

Tengo en el formlario un tipo texto con una variable $DESC

cuando la envio para pasarla a la base de datos MYSQL me se mete un montón de variables en mi pantalla y al listarlo por pantalla esa variable que contiene el caracter ' me falla la tabla donde va introducida.

Espero haberme explicado .

Saludos
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #4 (permalink)  
Antiguo 10/07/2003, 13:34
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 9 meses
Puntos: 16
Hola,

Supongo que haces el insert o el update con '$campo_form'. Esto lo transforma PHP en 'texto con ' dentro de el' y se lo pasa a MySQL. MySQL toma las ' como limite de campo de texto, por lo que entiende la cadena 'texto con ' y el resto le da error por no ser sintaxis valida.

La solucion es escapar la cadena que vas a introducir en la BD. Tienes funciones como addslashes() (www.php.net/addslashes) o mysql_escape_string() (www.php.net/mysql_escape_string). Luego cuando leas de la BD debes desescapar con stripslashes() (www.php.net/stripslashes).

Pero (siempre hay un pero) dependiendo de la configuracion de PHP (en concreto de magic_quotes_gpc y magic_quotes_runtime), puede que estes escapando 2 veces el campo del formulario y solo desescapandolo 1. Si magic_quotes_gpc esta a on, se escapan automaticamente los valores recibidos por GET, POST y COOKIES, con lo que no es necesario escapar los valores antes de meterlos en la BD, pero si desescaparlos. Si esta a off, debes escaparlos y desescaparlos.

Espero haber sido de ayuda.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 10/07/2003, 13:56
 
Fecha de Ingreso: marzo-2003
Mensajes: 277
Antigüedad: 21 años
Puntos: 0
mira lo que puedes hacer para evitar que tu script no funcione por esos caracteres y otros que tienen problema para funcionar
este es un codigo que modifique que esta en maestros del web sobre autentificacion de usuarios

te explico como funciona

para ingresar los caracteres comillas en tu bd lo que hace es modificar el caracter por su codigo html y cuando lo muestres lo va a mostrar en forma correcta ya que va a mostrar codigo que es reconocido por los navegadores y los transforman a su codigo
normal

este es una funcion que trasforma el texto ingresado a la forma que la bd no traiga problemas para ocuparlo solo lo llamas haci

quitar($variable);

Código PHP:
function quitar($mensaje){
              
$mensaje str_replace("<","&lt;",$mensaje);
              
$mensaje str_replace(">","&gt;",$mensaje);
              
$mensaje str_replace("'","'",$mensaje);
              
$mensaje str_replace('"',"&quot;",$mensaje);
              
$mensaje str_replace("\\","\",$mensaje);
              return 
$mensaje;
          } 
hay mas codigos para modificar casi todas las letras y caracteres extraños

salu2
  #6 (permalink)  
Antiguo 10/07/2003, 14:15
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 9 meses
Puntos: 16
Bueno, para la solucion de kech existen ya funciones como htmlspecialschars(), htmlentities(), ...

Pero con la solucion de kech tendrias que realizar la transformacion inversa para, por ejemplo, poner el contenido en un textarea para editarlo.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 10/07/2003, 14:32
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 4 meses
Puntos: 4
Saludos,

Y claro quitarle la opcion al usuario que no ponga las ' es un poco feo, no?

Me lo habeis explicado perfectamente pero no os e podido captar.

Si yo tengo una variable del formulario y lo meto en la base de datos

$NAME_FORM;

mysql_query("INSERT FROM entrada (Nobase) VALUES ('y aqui' )",$conexion);

Saludos
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #8 (permalink)  
Antiguo 10/07/2003, 14:46
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 1 mes
Puntos: 55
¿Y por qué no "escapas" los caracteres especiales?
Con addslashes() añades una \ delante de los caracteres especiales, así no te darían problemas. Luego para mostrar por pantalla, usas stripslashes() para quitar las \ y ya está.
Como siempre, revisa el manual de PHP (en el de rinconastur que te pasé, viene )
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #9 (permalink)  
Antiguo 10/07/2003, 14:47
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 9 meses
Puntos: 16
Bueno, si te decides a usar addslashes(), seria algo asi:
Código PHP:
$NAME_FORM_bd=addslashes($NAME_FORM);
mysql_query("INSERT FROM entrada (Nobase) VALUES ('$NAME_FORM_bd' )",$conexion); 
Y luego para mostrarlo:
Código PHP:
echo stripslashes($row['Nobase']); 
En cualquier caso, primero "transformas" el valor recibido del formulario en un formato "legal" para MySQL, y luego guardas ese valor transformado en la BD.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #10 (permalink)  
Antiguo 11/07/2003, 08:03
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 4 meses
Puntos: 4
Saludos ,

Para mostrarlo despues de la base de datos no tengo ningún problema pero es a la hora de hacerlo entrar en la base de datos Mysql que me da un pequeño error.

Saludos
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #11 (permalink)  
Antiguo 11/07/2003, 09:37
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 4 meses
Puntos: 4
Ok,

Todo entenido me lo revisaré despues haber si esta correcto

Un saludo
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #12 (permalink)  
Antiguo 11/07/2003, 10:14
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 4 meses
Puntos: 4
Creo no poder solucionarlo, bueno haber entre ""

Ahora al registrarlo a la base de datos no hay problema ya que me se pone la \ antes del carácter..

Pero al listarlo dentro de una tabla me se pone una tabla antes de llamarlo y bueno la tabla es erronea.


Saludos
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #13 (permalink)  
Antiguo 12/07/2003, 05:48
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 4 meses
Puntos: 4
A la entrada de la base de datos lo hago asín

mysql_query("INSERT FROM entrada (Nobase) VALUES ('".addslashes($NAME_FORM_bd)."' )",$conexion);

Pero no me va al listarlo
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #14 (permalink)  
Antiguo 12/07/2003, 13:06
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 9 meses
Puntos: 16
Hola,

Pues sin ver el codigo que usas, es un poco dificil saber si lo haces mal. Deberia ser algo como:
Código PHP:
echo stripslashes($row['Nobase']); 
Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #15 (permalink)  
Antiguo 12/07/2003, 13:35
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 4 meses
Puntos: 4
Hola Josemi,

Mira para la salida le pongo

echo stripslashes($VALOR);

Te pongo valo porque utilizo mysql_num_rows y bucle con for

Es que solo hago llamar la tabla e imprimir

Saludos
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

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 00:07.