Foros del Web » Programación para mayores de 30 ;) » RegExp »

Validacion de query en php

Estas en el tema de Validacion de query en php en el foro de RegExp en Foros del Web. Saludos! He querido realizar una expresión regular para validar un query que obtengo del url. Debido a que el usuario puede modificar algo, quisiera utilizar ...
  #1 (permalink)  
Antiguo 23/10/2013, 16:44
Avatar de fegm_4  
Fecha de Ingreso: febrero-2013
Mensajes: 114
Antigüedad: 11 años, 1 mes
Puntos: 8
Validacion de query en php

Saludos! He querido realizar una expresión regular para validar un query que obtengo del url. Debido a que el usuario puede modificar algo, quisiera utilizar una función que me valide la condición.

Por lo general el query tiene las siguientes características:
Código MySQL:
Ver original
  1. query = WHERE (t.var1=1 OR t.var1=3) AND (t.tit1=3 OR t.tit1=5)

El problema que se me presenta es que depende del filtro, las variables a parametrizar serán distintas. Qué expresión podría utilizar o que me recomiendan?

Agradezco mucho su ayuda
__________________
--
Aqui fegm_4
  #2 (permalink)  
Antiguo 23/10/2013, 22:26
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Validacion de query en php

No hay expresiones regulares mágicas que cubran todos los aspectos posibles, así que lo primero que deberías hacer es comenzar a describir todas estas reglas para estudiar una posible solución.

Si nos haces el favor de describir a detalle todas las posibilidades entonces ya sabremos por donde comenzar a ver, de otra forma no esperes demasiado.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 24/10/2013, 09:34
Avatar de fegm_4  
Fecha de Ingreso: febrero-2013
Mensajes: 114
Antigüedad: 11 años, 1 mes
Puntos: 8
Respuesta: Validacion de query en php

Cita:
Iniciado por pateketrueke Ver Mensaje
No hay expresiones regulares mágicas que cubran todos los aspectos posibles, así que lo primero que deberías hacer es comenzar a describir todas estas reglas para estudiar una posible solución.

Si nos haces el favor de describir a detalle todas las posibilidades entonces ya sabremos por donde comenzar a ver, de otra forma no esperes demasiado.
Saludos pateketrueke! Entiendo tu comentario y mi intención no es tener una formula mágica ni mucho menos =P

Digamos que básicamente las reglas son las siguientes:
  1. Todos los querys deben empezar con el string 'WHERE '
  2. El query tiene la siguiente estructura: 'WHERE (condición_t.variable) AND (condición_t.variable_id) AND (condición_t.unidad) AND (condición_t.ident)', donde cada condición puede o no estar, dependiendo del usuario.
  3. Los campos que pueden condicionar el query son: t.variable, t.variable_id, t.unidad, t.ident
  4. De condicionar a t.variable, este valor debe ser string. Ej: t.variable='comando' ó t.variable='comando' OR t.variable='función'
  5. De condicionar a t.variable_id, este debe ser un int. Ej: t.variable_id=1 ó (t.variable_id=4 OR t.variable_id=6)
  6. De condicionar a t.unidad, este valor debe ser string. Ej: t.unidad ='funciones' ó (t.unidad ='elementos' OR t.unidad ='funciones')
  7. De condicionar a t.ident, este debe ser un int. Ej: t.ident =1 ó (t.ident =4 OR t.ident =9)

Muchas gracias por tu ayuda
__________________
--
Aqui fegm_4
  #4 (permalink)  
Antiguo 24/10/2013, 10:57
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Validacion de query en php

Ya veo, me parece que debemos dividir el gran problema en pequeños problemas.

Lo primero sería extraer todos los datos de dicha consulta, estructurarlos y partir de ahí, validarlos.

Sólo necesitas expresiones regulares para el primer paso:
Código PHP:
Ver original
  1. $query = ' WHERE (t.var1=1 OR t.var1=3) AND (t.tit1=3 OR t.tit1=5) ';
  2. $where = array();
  3.  
  4. // validamos WHERE (trivial)
  5. if (substr(trim($query), 0, 5) == 'WHERE') {
  6.   // extraemos condiciones
  7.   if (preg_match_all('/\(\s*([^()]+?)\s*\)\s*(?=AND|&&|$)/i', $query, $matches)) {
  8.     // iteramos condiciones AND
  9.     foreach ($matches[1] as $match) {
  10.       // sub-condicionales
  11.       $sub = array();
  12.  
  13.       // extraemos sub-condiciones y operadores
  14.       if (preg_match_all('/(\w+)\.(\w+)\s*(!?==?|[<>]=)\s*([\'"][^\'"]*[\'"]|-?[\d.]+)\s*(?=OR|\|\||$)/', $match, $sub_matches)) {
  15.         foreach (array_keys($sub_matches[0]) as $key) {
  16.           $sub []= array(
  17.             'object' => $sub_matches[1][$key],
  18.             'field' => $sub_matches[2][$key],
  19.             'operator' => $sub_matches[3][$key],
  20.             'value' => $sub_matches[4][$key],
  21.           );
  22.         }
  23.       }
  24.  
  25.       $where []= $sub;
  26.     }
  27.   }
  28. }
  29.  
  30. // condiciones
  31. var_dump($where);

Ahora, el proceso de validación es bastante diferente, debes emplear tu ingenio para analizar dicha estructura y resolver esa parte del problema.

Como puedes observar usar sólo expresiones regulares sería insuficiente por la cantidad de opciones que se pueden dar, y dado el caso, no solo sería imposible sino absurdo dejar la tarea únicamente a las expresiones.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 24/10/2013, 15:09
Avatar de fegm_4  
Fecha de Ingreso: febrero-2013
Mensajes: 114
Antigüedad: 11 años, 1 mes
Puntos: 8
Respuesta: Validacion de query en php

Has sido de gran ayuda!! De Verdad gracias por dedicar parte de tu tiempo en esto, voy a implementarlo y te comento
__________________
--
Aqui fegm_4

Etiquetas: expresiones_regulares, mysql, validacion
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 13:45.