Foros del Web » Programando para Internet » PHP »

Busqueda con Formulario

Estas en el tema de Busqueda con Formulario en el foro de PHP en Foros del Web. Hola... quería despejarme una duda que tenia sobre la utilizacion de formularios para realizar una busqueda en una tabla de una base de datos MySql. ...
  #1 (permalink)  
Antiguo 16/09/2008, 19:20
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 15 años, 7 meses
Puntos: 1
Busqueda con Formulario

Hola...

quería despejarme una duda que tenia sobre la utilizacion de formularios para realizar una busqueda en una tabla de una base de datos MySql.

La cosa es la siguiente: tengo un formulario (utilizo PHP) donde ingreso los criterios de busqueda y mando los criterios mendiante el metodo GET..

Luego, en la pagina Resultados, tengo una consulta donde muestra los resultados de la busqueda. Los parametros de la busqueda son 5, y lo unico que logro es utlizar los criterios AND y OR, y por ende, que me busque aquellos registros que cumplen TODAS las condiciones o que al menos cumplen una de ellas.

Lo que no logro hacer es que si dejo un campo en blanco, me muestre los campos que cumplan los criterios SI ingresados, y los que no fueron especificados, que me muestre todos, es decir, que solo filtre los registros segun los campos especificados.

Como puedo hacer esto? Desde ya, muchas gracias a todos.

Si no se entiende, trataré de explicarlo nuevamente lo mas prolijo posible. Un saludo!

Pablo.
  #2 (permalink)  
Antiguo 16/09/2008, 21:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Busqueda con Formulario

Hola locoxchacho,

Si nos muestras el código de como lo estas haciendo podríamos ver como ayudarte a resolverlo.

Saludos.
  #3 (permalink)  
Antiguo 17/09/2008, 11:56
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Busqueda con Formulario

Código PHP:
$varmonto_update "%";
if (isset(
$_GET['monto'])) {
  
$varmonto_update = (get_magic_quotes_gpc()) ? $_GET['monto'] : addslashes($_GET['monto']);
}
$varidusuario_update "%";
if (isset(
$_GET['idusuario'])) {
  
$varidusuario_update = (get_magic_quotes_gpc()) ? $_GET['idusuario'] : addslashes($_GET['idusuario']);
}
mysql_select_db($database_conntrio$conntrio);
$query_update = [COLOR="Red"]sprintf("SELECT * FROM pagos01 WHERE pagos01.USER_ID like %s OR pagos01.MONTO like %s"$varidusuario_update,$varmonto_update);[/COLOR]
$update mysql_query($query_update$conntrio) or die(mysql_error());
$row_update mysql_fetch_assoc($update);
$totalRows_update mysql_num_rows($update); 
Este es el codigo.. que lo genera automaticamente Dreamweawer..

Lo que interesa es lo que esta en rojo. Funciona a la perfeccion tanto para AND como para OR... pero lo que no logro hacer es que si dejo un campo en blanco, busque igual (es decir, que actue como si no se le estuviese applicando un filtro a ese campo), y no que me salga un error en la consulta. No se si se entiende: varios campos que permiten filtrar la consulta, pero no necesarimente en todas se utilizan todos los campos.

Espero que con el codigo y con esta pequeña explicacion no los haya enredado mas, sino haberles dado una idea de que es lo que pretendo.

Un saludo!

Pablo.
  #4 (permalink)  
Antiguo 23/09/2008, 22:07
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 15 años, 7 meses
Puntos: 1
Consulta de BD por Formulario

Buenas noches a todos!

Acudo a ustedes nuevamente para ver si me podrian ayudar en la ultima etapa de mi proyecto, que solo le falta este paso para poder estar listo y con ganas de colgarse de la web!

El problema es el siguiente: El proyecto es un portal para los clientes de mi "empresa", donde al loguearse verán sus trabajos y pagos mas recientes, y del mismo modo, podrán dirigirse a una sección especifica de trabajos o pagos, donde podrán buscar entre todos ellos, y no solo ver los mas nuevos. Es AQUI donde surge en el problema, en el formulario de busqueda. Y no en el FORMULARIO en si, sino en la forma en que son mostrados los resultados del mismo.

El formulario posee varios criterios (entre ellos, entre distintas fechas o montos, nombre, etc). Para que todos estos criterios funcionen a la vez, utilizo el conector AND, y funciona de maravilla. Ahora, el problema lo tengo cuando a un usuario NO le interesa, por ejemplo, filtrar una fecha especifica o un monto espeficio, sino mas bien el nombre del mismo, o las observaciones, etc. Es decir, lo que necesito es que la consulta se realize a pesar de que alguno de los campos sean dejados en blanco, pero que la consulta no interprete como que lo que tengo que buscar sean campos en blanco dentro de la tabla de mi Base de Datos, sino que NO tiene que aplicar ese filtro.

Se entiende? Traté de ser lo más claro y consiso posbile. Ya he tratado miles de veces de explicar esto, puese el problema ya lo tengo desde hace rato, y creo que ha sido la vez que mejor lo explique. Espero que se entienda y pueda encontrar una pronta solucion. Por ahi, no hace falta que me de la solucion servida en bandeja, tambien agradeceria un link a donde pudiera ver sobre este tipo de consultas para PHP. Pero no vendría mal alguna ayudita de mas! ;)

Desde ya, muchas gracias a todas la almas caritativas que puedan ayudar y dar una mano con mi mini-proyecto!

Un saludo a todos!!

Pablo.
  #5 (permalink)  
Antiguo 23/09/2008, 22:12
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Consulta de BD por Formulario

No está permitido repetir temas :
http://www.forosdelweb.com/f18/busqu...ulario-625468/

Solo debes comprobar que la variable no esté vacía usando empty() y si está vacía no incluirla en la consulta.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 23/09/2008, 22:15
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Consulta de BD por Formulario

Mis disculpas, pero como no recibia niguna respuesta... :(

ahora, con respecto a tu respuesta... algun ejemplo? algun link? alguna ayuda de como realizar esto??

Muchas gracias nuevamente, y perdon por repetir el tema!

Pablo.
  #7 (permalink)  
Antiguo 23/09/2008, 22:25
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Consulta de BD por Formulario

Es sencillo, solo necesitas ir armando la consulta al ir comparando las variables. Por ejemplo:
Código php:
Ver original
  1. if (!empty($_GET["variable"])) {
  2.    if (empty($consulta)) {
  3.         $consulta="SELECT * FROM Tabla WHERE campo=".$_GET["variable"];
  4.    } else {
  5.         $consulta .= " AND campo=".$_GET["variable"];
  6.    }
  7. }
En la primera línea comprobamos que la variable recibida no esté vacía, si no lo está comprobamos si $consulta está vacío, si lo está armamos la consulta desde cero, si no lo está solo le agregamos el AND más la condición. Ese ejemplo ya podrás adaptarlo a lo que necesitas.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 23/09/2008, 22:26
Avatar de TolerantX  
Fecha de Ingreso: marzo-2006
Ubicación: Guadalajara, México.
Mensajes: 408
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Busqueda con Formulario

Cita:
Iniciado por locoxchacho Ver Mensaje
Código PHP:
$varmonto_update "%";
if (isset(
$_GET['monto'])) {
  
$varmonto_update = (get_magic_quotes_gpc()) ? $_GET['monto'] : addslashes($_GET['monto']);
}
$varidusuario_update "%";
if (isset(
$_GET['idusuario'])) {
  
$varidusuario_update = (get_magic_quotes_gpc()) ? $_GET['idusuario'] : addslashes($_GET['idusuario']);
}
mysql_select_db($database_conntrio$conntrio);
$query_update = [COLOR="Red"]sprintf("SELECT * FROM pagos01 WHERE pagos01.USER_ID like %s OR pagos01.MONTO like %s"$varidusuario_update,$varmonto_update);[/COLOR]
$update mysql_query($query_update$conntrio) or die(mysql_error());
$row_update mysql_fetch_assoc($update);
$totalRows_update mysql_num_rows($update); 
Código PHP:
//$varmonto_update = "%";
if (isset($_GET['monto'])) {
  
$varmonto_update "WHERE pagos01.MONTO like ";
  
$varmonto_update .= (get_magic_quotes_gpc()) ? $_GET['monto'] : addslashes($_GET['monto']);
}

//$varidusuario_update = "%";
if (isset($_GET['idusuario'])) {
  if(isset(
$varmonto_update)) $varidusuario_update " OR ";  else $varidusuario_update "WHERE ";
  
$varidusuario_update "pagos01.USER_ID like ";
  
$varidusuario_update .= (get_magic_quotes_gpc()) ? $_GET['idusuario'] : addslashes($_GET['idusuario']);
}
mysql_select_db($database_conntrio$conntrio);
$query_update = [color="Red"]sprintf("SELECT * FROM pagos01 %s%s"$varidusuario_update,$varmonto_update);[/color]
$update mysql_query($query_update$conntrio) or die(mysql_error());
$row_update mysql_fetch_assoc($update);
$totalRows_update mysql_num_rows($update); 
__________________
TolerantX
http://tolerantx.com
Linux User #385226
  #9 (permalink)  
Antiguo 24/09/2008, 13:13
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Consulta de BD por Formulario

Estimado David el Grande:

Dede ya muchas gracias por tu ayuda, pero no logro terminar de entender el codigo. Creo que si lo podrías aplicar a mi ejemplo que detallo a continuacion, quizás podria entenderlo mucho mejor!

Espero que puedas, y que no sea mucha molestia. Desde ya, muchas gracias por adelantado!

El formulario consta de:

a) 1 Menu Desplegable donde los valores son numericos (de paso, como hago para que si selecciono una opcion TODOS, hiciese como si el filtro no existiese?)
b) 3 campos de texto (uno para fecha... es posible ponerle una mascara como se hace en acces para que tenga el formato fecha?)
c) Un campo de selección SI o NO...

Dede ya, nuevamente, gracias por tu ayuda. Espero que me puedas ayudar a resolver este misterio para mi!

Pablo.
  #10 (permalink)  
Antiguo 24/09/2008, 13:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Consulta de BD por Formulario

Temas unidos.

Por favor no dupliques temas.
  #11 (permalink)  
Antiguo 24/09/2008, 14:14
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Busqueda con Formulario

Perdon por duplicar.

Ahora que está todo junto, y ya está todo la información más que clara, alguien podría darme una mano y explicarme mas o menos como viene la mano? Por favor? jajaj..

Desde ya que le estaré eternamente agradecido a quien me puedo ayudar a realizar esta busqueda con PHP ya que es el ultimo paso que me falta para terminar mi proyecto.

Espero ansioso su colaboracion! Muchas gracias nuevamente por adelantado!!

Pablo Martelletti.
  #12 (permalink)  
Antiguo 24/09/2008, 17:09
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
De acuerdo Respuesta: Busqueda con Formulario

Es que yo no suelo dar todo el código hecho. ¿Por qué?, porque si te doy la idea de cómo hacerlo creo que te estaré ayudando mejor, ya que te daré la oportunidad de crear tú mismo el código y para la próxima ocasión que tengas que hacerlo no tendrás que volver a preguntar, !sabrás cómo hacerlo por ti mismo¡.

Vamos, el código que puse no está difícil, y puse un comentario al final de qué hace cada línea, inténtalo y nos cuentas cómo te fue.

Saludos .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #13 (permalink)  
Antiguo 25/09/2008, 19:26
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Busqueda con Formulario

Estimado David!

He tomado a bien tu consejo, y me la he pasado buscando y pensando la solucion para mi problema...

Crei (y tmb me sugirieron) que la solucion podia ser la utilización de IF y verificar si los campos estan vacios (o en alguno de mis casos, si valen cierto, valga la redundancia, valor...).

Bueno, todo esto por separado me ha salido. La cosa ahora es unirlo todo, y he aqui donde me encuentro con la paradoja! Y es, aqui mismo, donde espero puedan ayudarme.

Código PHP:
$id$_POST['idusuario'];
$monto$_POST['monto'];

mysql_select_db($database_conntrio$conntrio);
$query "SELECT * FROM pagos01 ";
if (
$id=-1){$query;} else {$query .= " WHERE USER_ID= '$idusuario' ";} ;
if (
$monto==""){$query;} else {$query .= "  WHERE MONTO= '$monto' ";} ; 
Lo que quiero unir es los dos if, para que se verifiquen simultaneamente, y no que actuen x separado... pq por ejemplo, si se cumple que $id<>-1 y $monto="", me ejecuta el ultimo if...y no quiero eso, sino que quiero que me cumpla el else de la primera parte y el if de la segunda... se entiende?

Desde ya muchas gracias. Mientras espero a algun alma caritativa que pueda colaborar conmigo, sigo probando a ver si puedo resolver el dilema (es la primera vez que trabajo con varias condiciones en el IF en PHP... antes lo habia hecho, pero en excel... la logica es la misma? saber eso me puede ayudar?).

Un saludo,

Pablo.
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 05:10.