Foros del Web » Programando para Internet » PHP »

Formulario de Busqueda para MySql y PHP

Estas en el tema de Formulario de Busqueda para MySql y PHP en el foro de PHP en Foros del Web. Hola. Pos aquí estoy de nuevo, tratando de encontrar una solución luego que intenté e intenté hacer esto. Les explico. Tengo un formulario con aprox. ...
  #1 (permalink)  
Antiguo 07/07/2010, 09:24
 
Fecha de Ingreso: diciembre-2009
Ubicación: San Salvador, El Salvador
Mensajes: 20
Antigüedad: 14 años, 4 meses
Puntos: 0
Exclamación Formulario de Busqueda para MySql y PHP

Hola. Pos aquí estoy de nuevo, tratando de encontrar una solución luego que intenté e intenté hacer esto.
Les explico.

Tengo un formulario con aprox. 13 campos de busqueda con algunos de los siguientes campos:
Sexo, Idioma, Nivel del Idioma, Estado Civil, Eda, Carrera, Área, Cargo, Salario, etc, etc. El Usuario que usa el formulario es decir seleccionará los campos que desee, pueden ser 5 campos, 8 campos, o solo 3 campos, y dad la selección el Resultado me arroja los registros que coinciden con la selección del Formulario.


El punto es este.

Que en el query de mySql pongo el principio asi:

$Query=mysql_query("Select * from tabla_nombre where ".$query."
",$conexion);

¿Que es $query?¿Que contiene?
Pues el valor del $query se incrementa dada el valor de las variables por método GET.

Es decir si llega la variable sexo $query vale esto:
if(($_GET["sexo"]!="")
{
$query .= " genero='".$_GET["sexo"]."' ";
}

if($_GET["estado_civil"]!="")
{
$query .= " estado_civil='".$_GET["estado_civil"]."' ";
}

Mi problema es el siguiente:
Como hago que entre estas variables haya el AND??
porque deberia ser asi:
Where sexo ='m' AND estado_civil='soltero'

Sabiendo que el AND puede Variar al seleccionar 5, 8, 10 o 3 campos de selección,
eso me está dando error. Ayudenme por favor

Me expliqué???
  #2 (permalink)  
Antiguo 07/07/2010, 10:15
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 8 meses
Puntos: 7
Respuesta: Formulario de Busqueda para MySql y PHP

Simplemente añade un AND en la consulta de estado_civil (además estaría bien identar el código):
Código PHP:
Ver original
  1. if(($_GET["sexo"]!="")
  2. {
  3.     $query .= " genero='".$_GET["sexo"]."' ";
  4. }
  5.  
  6. if($_GET["estado_civil"]!="")
  7. {
  8.     $query .= " AND estado_civil='".$_GET["estado_civil"]."' ";
  9. }
También para buen legibilidad del código te recomiendo renombrar la variable $Query (que empieza con Q mayúscula) a otro nombre como $res (de resultado) algo así:

Código PHP:
Ver original
  1. $res = mysql_query("Select * from tabla_nombre where ".$query."
  2. ",$conexion);
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #3 (permalink)  
Antiguo 07/07/2010, 10:31
 
Fecha de Ingreso: diciembre-2009
Ubicación: San Salvador, El Salvador
Mensajes: 20
Antigüedad: 14 años, 4 meses
Puntos: 0
Exclamación Respuesta: Formulario de Busqueda para MySql y PHP

Gracias Shakaran.
si Ok, va tu opcion está bien. entiendo.
Pero que hay cuando el usuario selecciona por ejemplo 4 campos????
El puede seleccionar 4 de los 13, los que el quiera, mi problema es este mira:

si selecciona el sexo:
if($_GET["sexo"]!="0")
{
$query .= " genero='".$_GET["sexo"]."' ";
}

y selecciona el idioma:
if($_GET["idioma"]!="0")
{
$query .= " and (hab_idioma1='".$_GET["idioma"]."' or hab_idioma2='".$_GET["idioma"]."') ";
}

y selecciona el nivel del idioma:
if($_GET["nivel_idioma"]!="0")
{
$query .= "and ( hab_idioma_nivel1='".$_GET["nivel_idioma"]."' or hab_idioma_nivel2='".$_GET["nivel_idioma"]."' ) ";
}

TENDRIA LO SIGUIENTE:
$query="genero='m' and (hab_idioma1='ingles' or hab_idioma2='ingles') and ( hab_idioma_nivel1='intermedio' or hab_idioma_nivel2='intermedio' )";

vaya, siguiendo con este ejemplo:
Si SOLAMENTE selecciona el IDIOMA y EL NIVEL DEL IDIOMA:
Según los valores anteriores, tendria lo siguiente:
$query="and (hab_idioma1='".$_GET["idioma"]."' or hab_idioma2='".$_GET["idioma"]."')";

seria asi $res="select * from tabla_nombre ".$query." ";

si lo escribo con echo tengo esto:
"select * from tabla_nombre where and (hab_idioma1='".$_GET["idioma"]."' or hab_idioma2='".$_GET["idioma"]."';

Si te fijas es incorrecto, porque la clave sería WHERE hab_idioma1='".$_GET["idioma"]."' or hab_idioma2='".$_GET["idioma"]

y este problema me sucede con 4 campos!!!!!!
Y si selecciona 8 de los 13 campos totales???

Me entiendes mi problema?
  #4 (permalink)  
Antiguo 07/07/2010, 10:35
 
Fecha de Ingreso: diciembre-2009
Ubicación: San Salvador, El Salvador
Mensajes: 20
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Formulario de Busqueda para MySql y PHP

Código PHP:
if($_GET["sexo"]!="0")
{
$query .= " genero='".$_GET["sexo"]."' ";
}

y selecciona el idioma:
if(
$_GET["idioma"]!="0")
{
$query .= " and (hab_idioma1='".$_GET["idioma"]."' or hab_idioma2='".$_GET["idioma"]."') ";
}

y selecciona el nivel del idioma:
if(
$_GET["nivel_idioma"]!="0")
{
$query .= "and ( hab_idioma_nivel1='".$_GET["nivel_idioma"]."' or hab_idioma_nivel2='".$_GET["nivel_idioma"]."' ) ";
}

TENDRIA LO SIGUIENTE:
$query="genero='m' and (hab_idioma1='ingles' or hab_idioma2='ingles') and ( hab_idioma_nivel1='intermedio' or hab_idioma_nivel2='intermedio' )"
  #5 (permalink)  
Antiguo 07/07/2010, 10:40
Avatar de quike88  
Fecha de Ingreso: agosto-2008
Mensajes: 471
Antigüedad: 15 años, 8 meses
Puntos: 87
Respuesta: Formulario de Busqueda para MySql y PHP

podrias tener una variable que utilices para saber si ya se agrego alguna condicion, algo asi:

Código PHP:
$var=0;
if(
$_GET["sexo"]!="0"
{
if(
$var==0)
  
$var=1;
else
  
$query .=" AND ";
$query .= " genero='".$_GET["sexo"]."' "


if(
$_GET["idioma"]!="0"

if(
$var==0)
  
$var=1;
else
  
$query .=" AND ";
$query .= " (hab_idioma1='".$_GET["idioma"]."' or hab_idioma2='".$_GET["idioma"]."') "


if(
$_GET["nivel_idioma"]!="0"

if(
$var==0)
  
$var=1;
else
  
$query .=" AND ";
$query .= " ( hab_idioma_nivel1='".$_GET["nivel_idioma"]."' or hab_idioma_nivel2='".$_GET["nivel_idioma"]."' ) "

  #6 (permalink)  
Antiguo 07/07/2010, 10:42
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 8 meses
Puntos: 7
Respuesta: Formulario de Busqueda para MySql y PHP

Ah ya entiendo.

Bueno lo primero decir que no es buen metodo construir asi una consulta MySQL, aparte las detecciones las haces si vale 0 el valor, pero y si es vacio o ''? es mejor para ello utilizar empty().

Yo en tu lugar, primero detectaría que campos son los que recibo a procesar y luego se construye la consulta, pero si lo haces con 13 if, es más complicado y se te daría el problema que comentas.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #7 (permalink)  
Antiguo 07/07/2010, 11:35
 
Fecha de Ingreso: diciembre-2009
Ubicación: San Salvador, El Salvador
Mensajes: 20
Antigüedad: 14 años, 4 meses
Puntos: 0
Exclamación Respuesta: Formulario de Busqueda para MySql y PHP

Sii

tonces ese es mi problema y vieras q me estoy quebrando la cabeza
porque
al hacer COMBINACIONES con 12 campos si que seria medio loco
porque me darian un monton de combinaciones!!

Q me sugieres! xQ ahorita estoy haciendolo con IF
  #8 (permalink)  
Antiguo 07/07/2010, 11:47
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 8 meses
Puntos: 7
Respuesta: Formulario de Busqueda para MySql y PHP

Podrías utilizar un bucle foreach para todos los $GET y comprobar cuales son vacios o no y a partir de ahí construir la consulta sql.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #9 (permalink)  
Antiguo 07/07/2010, 13:27
 
Fecha de Ingreso: diciembre-2009
Ubicación: San Salvador, El Salvador
Mensajes: 20
Antigüedad: 14 años, 4 meses
Puntos: 0
Exclamación Respuesta: Formulario de Busqueda para MySql y PHP

Ok. Te agradezco por ayudarme.
Lo intentare de esa forma.

Etiquetas: mysql, busquedas, formulario
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 14:28.