Foros del Web » Programando para Internet » PHP »

Query dinámica desde inputs select

Estas en el tema de Query dinámica desde inputs select en el foro de PHP en Foros del Web. Compañeros tengo un problemilla para realizar una query cuyos parametros de filtrado provienen de varios campos "select" en un form que se envía con un ...
  #1 (permalink)  
Antiguo 21/06/2005, 12:36
 
Fecha de Ingreso: mayo-2005
Ubicación: Mexico DF
Mensajes: 27
Antigüedad: 12 años, 6 meses
Puntos: 0
Query dinámica desde inputs select

Compañeros tengo un problemilla para realizar una query cuyos parametros de filtrado provienen de varios campos "select" en un form que se envía con un boton Submit, es decir deseo obtener algo como esto:

SELECT * FROM notas WHERE campo1=valorselect1 AND campo2=valorselect2 AND campo3=valorselect3;

El problema mio es para armar la query una vez que recibo los datos del formulario y no necesariamente todos los select traen un valor, puede ser que se elija solo un criterio, todos o cualquier conbinacion de ellos e incluso ninguno en cuyo caso traera todos los registros. Espero haberme hecho entender gracias.

Última edición por pavelsn; 21/06/2005 a las 12:41
  #2 (permalink)  
Antiguo 22/06/2005, 04:58
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
www.forosdelweb.com/showthread.php?t=267358
alguna vez hice algo "mejor" (lo importante es lo funcional ¿no?) y justamente ocupaba listboxs... por ahí anda en el foro... si lo encuentras avizas ... prueba buscar por "construir de query"... y cosas así...

Suerte! y si tienes problemas igual hazlo saber...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 22/06/2005, 08:35
 
Fecha de Ingreso: noviembre-2003
Mensajes: 383
Antigüedad: 14 años
Puntos: 2
Yo he creado una función para un sitio que estoy creando. Aquí lo tienes:

function genera_query($cadena,$condicion)
{
$pos=strpos($cadena,"where");

if ($pos === false)
{
$cadena=$cadena." where ";
}
if ($pos !== false)
{
$cadena=$cadena." and ";
}

$cadena=$cadena.$condicion;
return $cadena;
}

...
...
if ($idFuente!="0") //ejemplo 1
$mysql_string=genera_query ($mysql_string,"a.idFuente='$idFuente'");

if ($cuerpo!="") //ejemplo 2
$mysql_string=genera_query ($mysql_string,"a.cuerpo like '%$cuerpo%'");

if (isset($idRetenido)) //ejemplo 3
$mysql_string=genera_query ($mysql_string,"a.idRetenido='si'");
else
$mysql_string=genera_query ($mysql_string,"a.idRetenido='no'");
...
...

Te explico como funciona:
Para cada variable que tu quieras comprobar e incluir en un query tienes que varificar su valor en función de lo que a ti te interese.

if ($idFuente!="0")

si la verificación se cumple entonces llamas a la función pasandole como parametros la cadena donde quieres que se vaya construyendo el query + la cadena que quieres que se inserte en el query. La función te devolverá la cadena con tu cadena insertada.

$mysql_string=genera_query ($mysql_string,"a.idFuente='$idFuente'");

espero que te ayude.
  #4 (permalink)  
Antiguo 22/06/2005, 13:42
 
Fecha de Ingreso: mayo-2005
Ubicación: Mexico DF
Mensajes: 27
Antigüedad: 12 años, 6 meses
Puntos: 0
Gracias, de hecho tu ejemplo me sirvio para construir mi código, mismo que comparto, de hecho me gusta más el tuyo porque mete todo en una función, el mio es meramente explicativo pero funciona para un formulario con 4 "selects" como criterio para la query, pero se le pueden agregar más.
Gracias.

Código PHP:
 if ($HTTP_POST_VARS['search']) {

$query='SELECT * FROM noticias ';

if (!empty(
$HTTP_POST_VARS['valorSelect1'])) { 
         
$query.='WHERE campo1="'.$HTTP_POST_VARS['valorSelect1'].'"'
         
$query_num=1;
         } else { 
$query_num=0; }
         
 if (!empty(
$HTTP_POST_VARS['valorSelect2'])) { 
          if (
$query_num ==) { 
          
$query.='WHERE campo2="'.$HTTP_POST_VARS['valorSelect2'].'"'
          } else { 
          
$query.=' AND campo2="'.$HTTP_POST_VARS['valorSelect2'].'"';
           } 
           
$query_num=1;
           }
  if (!empty(
$HTTP_POST_VARS['valorSelect3'])) { 
          if (
$query_num ==0) {
          
$query.='WHERE campo3="'.$HTTP_POST_VARS['valorSelect3'].'"'
          } else {
          
$query.=' AND campo3="'.$HTTP_POST_VARS['valorSelect3'].'"';
          }
          
$query_num=1;
          }
  if (!empty(
$HTTP_POST_VARS['valorSelect4'])) { 
          if (
$query_num==0) {
          
$query.='WHERE campo4="'.$HTTP_POST_VARS['valorSelect4'].'"'
          } else {
          
$query.=' AND campo4="'.$HTTP_POST_VARS['valorSelect4'].'"';
          }
          
$query_num=1;
          }
echo 
$query;


  #5 (permalink)  
Antiguo 23/06/2005, 03:04
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
... Ok.. tu código funciona para tu caso pero puedes hacer algo mucho más practico... En el enlace que te dejé se mencionó la posibilidad de hacer lo que haces e hice algo basándome en eso... un ciclo que ve que es más práctico... ... piensa por ejemplo que quieres agregar más campos ¿cuántas nuevas líneas habrías de escribir??; de por sí con 4 es demasiado código...

Mira igual esto: http://www.forosdelweb.com/showpost....47&postcount=2
El código que arma la query es la mitad de lo que está ahí, ocupa menos de 10 líneas y ve que es perfectamene útil para N elementos del formulario...

De cualquiera de las dos formas se ocupa menos código que lo que tienes ahora... no lo critíco ni digo que esté mal... solo muestro que hay mejores formas de hacer las cosas (he ahí la verdadera programación)... espero te sirvan de algo.. al menos como dato .

... y eso no era lo que mencioné... usando matricez como names se podría hacer algo aún mejor... pero bueno... Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #6 (permalink)  
Antiguo 27/06/2005, 16:00
 
Fecha de Ingreso: mayo-2005
Ubicación: Mexico DF
Mensajes: 27
Antigüedad: 12 años, 6 meses
Puntos: 0
Gracias

Gracias Jam1138, claro que ese tipo de comentarios es muy bien recibido, pues son los que poco a poco nos van enseñando a optimizar nuestro código. Asi que son estas aportaciones constructivas las que realmente uno busca obetner en una comunidad como esta.
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 03:57.