Ver Mensaje Individual
  #3 (permalink)  
Antiguo 13/03/2012, 04:54
bray
 
Fecha de Ingreso: agosto-2011
Mensajes: 110
Antigüedad: 12 años, 8 meses
Puntos: 13
Respuesta: addslashes, mysql_real_escape_string o similare

Hola ,

1 º el escapado de caracteres se hace en el script de destino del formulario. (ofertas.php en tu caso)

2º debees comprobar que las magic quotes esten activadas o no para hacer el "escapado" de caracteres y evitar que se escapen dos veces

¿ como se hace esto ? pues bien , puede o bien desactivar las magic quotes en el php.ini si tienes acceso a él o intentarlo con un fichero .htaccess . con el contenido
Cita:
# Desactivar magic quotes
php_value magic_quotes_gpc off
El uso del .htaccess puede no ser efectivo 100% por diferentes motivos (tu proveedor de hosting no te permite usarlos ó bien porque php da prioridad al escapado de caracteres que a la directia .htaccess) debes comprobar en cada momento si estan activas para no escapar dos veces. Yo prefiero escapar los caracteres como mysql_realscape_string() porque es mas efectiva que addslashes() asi que te dejo un script que deshace el scape automático de las magic quotes y lo rehace con dicha función.

Cita:
Código PHP:
Ver original
  1. if (get_magic_quites_gpc()){
  2.  $_POST['nombre_campo'] = stripslashes($_POST['nombre_campo'])
  3. }
  4.  $nombre_campo_escapado = mysql_real_scape_string($_POST['nombre_campo');
Te recomiendo el uso de mysql_real_scape_string() frente a addslashes() porque es una funcion especifica de mysql mas completa en el conjunto de caracteres que escapa ya que a addslashes () se le pueden colar algunos.

Algo que debes tener en cuenta de este codigo es que reduce el rendimiento de la aplicación ya que las funciones addslashes y stripslashes son funciones que no hacen un uso demasiado eficiente de la memoria en pos de la efectividad. Dejo a tu eleccion decidir el metodo que mas te guste.

Si el proyecto es de aprendizaje no debe preocuparte demasiado cual usar. Pero si es un proyecto para su publicación es imprescindible asegurar ese formulario , no solo debes escapar caracteres sql.

Un consejo rápido es que si vas a recorrer los campos del formulario usando un bucle foreach, tengas una lista de los campos reales que quieres recorrer y si el atributo name no se encuentra en esa lista, no proceses el campo

no se si me he explicado bien pero bueno, espero que por lo menos lo de la funcion de escape te haya servido.

un saludo.