Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Mi clase de Mysql_query

Estas en el tema de Mi clase de Mysql_query en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Estimados, Saben he estado poco a poco metiendole en el mundo de la orientación a objetos y realmente lo he encontrado bastante interesante, he desarrollado ...
  #1 (permalink)  
Antiguo 25/01/2010, 13:46
Avatar de Jona_than  
Fecha de Ingreso: noviembre-2005
Ubicación: Chile
Mensajes: 155
Antigüedad: 18 años, 5 meses
Puntos: 0
De acuerdo Mi clase de Mysql_query

Estimados,

Saben he estado poco a poco metiendole en el mundo de la orientación a objetos y realmente lo he encontrado bastante interesante, he desarrollado ya algunas funciones que he re ocupando y ahorrando tiempo a la hora de programar.

Entonces un drama, estoy desarrollando un portafolio, y enviándole los datos por ajax, y este tema, y me funciona perfectamente, el drama que a la hora de ejecutar una función mysql_query un drama de syntasis que no sé bien, porque ocurre.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Web)' at line 1

La función que ejecuta el mysql_query es la siguiente:

Código PHP:
Ver original
  1. public function EjecucionMySQLQuery($sql){
  2.         $this->consulta=mysql_query($sql,$this->enlace) or die (mysql_error());
  3.         return $this->consulta;
  4.     }

Y el código que en teoría llama a esta función es la siguiente, en la cual me genera el error de arriba.

Código PHP:
Ver original
  1. require 'Index.class.php';
  2. $BaseDatos=BaseDatosClass::hacerInstancia();
  3. $Select = "INSERT INTO PORTAFOLIO_CATEGORIAS (NOMBRE_CATEGORIA) VALUES (".$_POST['NombreCategoria'].")";
  4. $BaseDatos->EjecucionMySQLQuery($Select);

Ojala alguien me pueda ayudar.

Tau.
__________________
- Fasecreativa
- Twitter @jonyram
  #2 (permalink)  
Antiguo 25/01/2010, 13:57
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: Mi clase de Mysql_query

Que tal, el problema es que no estas escapando la cadena que te llega por post. Haz esto:
Código PHP:
Ver original
  1. INSERT INTO PORTAFOLIO_CATEGORIAS (NOMBRE_CATEGORIA) VALUES ('".$_POST['NombreCategoria']."')"

Un tip: nunca confies en lo que el usuario introduce, filtra tus variables que recibas por parte del cliente y evitaras ataques dañinos a tu web.
__________________
I see dead pixels
  #3 (permalink)  
Antiguo 25/01/2010, 14:03
Avatar de Jona_than  
Fecha de Ingreso: noviembre-2005
Ubicación: Chile
Mensajes: 155
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Mi clase de Mysql_query

Cita:
Iniciado por SergeMedina Ver Mensaje
Que tal, el problema es que no estas escapando la cadena que te llega por post. Haz esto:
Código PHP:
Ver original
  1. INSERT INTO PORTAFOLIO_CATEGORIAS (NOMBRE_CATEGORIA) VALUES ('".$_POST['NombreCategoria']."')"

Un tip: nunca confies en lo que el usuario introduce, filtra tus variables que recibas por parte del cliente y evitaras ataques dañinos a tu web.
Me podrías explicar un poquito más, lo que me dices en el tip.

Y muchas gracias, justamente era lo que mencionabas, parece que muchas horas sentado programando algo, iré a tomar aire haber si me percato más rápido de estos errores...

Saludos.
__________________
- Fasecreativa
- Twitter @jonyram

Última edición por Jona_than; 25/01/2010 a las 14:06 Razón: Dando gracias... =)
  #4 (permalink)  
Antiguo 25/01/2010, 14:13
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: Mi clase de Mysql_query

Claro.

Supon que alguien en tu web introduce la siguiente cadena: '; TRUNCATE PORTAFOLIO_CATEGORIAS;. PHP lo ejecutaria asi:

Código PHP:
Ver original
  1. $sql = "INSERT INTO PORTAFOLIO_CATEGORIAS (NOMBRE_CATEGORIA) VALUES ('"';  TRUNCATE PORTAFOLIO_CATEGORIAS;"

Por lo tanto debes de sanitizar la entrada con alguna función que te evite el SQL Injection, para mysql esta la de mysql_real_escape_string.

Puedes hacer esto:

Código PHP:
Ver original
  1. $cleanData = array();
  2. foreach($_POST as $k => $v) {
  3.     $cleanData[$k] = mysql_real_escape_string($v);
  4. }
  5.  
  6. //y en el query:
  7. $sql = "INSERT INTO PORTAFOLIO_CATEGORIAS (NOMBRE_CATEGORIA) VALUES ('".cleanData['NombreCategoria']."')"

Adicionalmente a eso, haria validacion de tipos de datos, si esperas cadenas, numeros, emails, etc filtra el contenido que te llegue mediante las funciones de filter de php.
__________________
I see dead pixels

Etiquetas: clase
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 07:03.