Ayuda con Buscador multicriterio
[B]Hola compañeros[/B], necesito que me echen un cable.
Estoy preparando una Web en php y me he atascado a la hora de implementar un buscador, sé hacer un buscador simple, mostrar los registros, filtrarlos, etc. pero no sé cómo hacer para que me filtre por dos criterios, los cuales están en columnas diferentes en la misma tabla de la base de datos. Me explico: En la base de datos MySQL tengo dos columnas (entre otras más en una tabla), una llamada “Pueblos” y otra “Actividades”. El tema es que quiero hacer un buscador que filtre las filas que cumplan con dos requisitos, “el pueblo y la actividad seleccionada por el visitante. Esto lo haría por medio de un formulario con dos listas-menú (o menú de salto) y un botón enviar. Osea, si el visitante quiere ver los hoteles de Madrid, que el juego de registros muestre solamente las filas donde el pueblo (en la columna pueblos) ponga Madrid y También ponga Hoteles (en la columna actividades). Trabajo con Dreamweaver pero también escribo algo de código, aun que poquito. No sé si sería mejor hacer una tabla para "Pueblos" y Otra para "Actividades", o todo en la misma. He buscado por Google un montón y no he visto nada que se ajuste a lo que necesito, o lo que he visto no me ha funcionado por viejo. [URL="http://foros.zackyfiles.com/showthread.php?t=610135"]Aquí[/URL] explican algo parecido Kolmo7 y Kezuziyo, pero hablan de Access y no entiendo ni papa, yo ando con phpMyAdmin. A ver si por favor me echáis una mano, si necesitáis más detalles decírmelo. Muchas gracias. |
supongo que en los filtros simples que haces usarás la claúsula WHERE de la instrucción SELECT del SQL, p.e. [B]WHERE Poblacion='MADRID'[/B], si es así tienes que unir las diferentes condiciones con OR o AND para el O y el Y. Puedes usar paréntesis para agrupar expresiones. En concreto el ejemplo que pones sería [B]SELECT * FROM Tabla WHERE Poblacion='Madrid' AND Actividad='Hoteles'[/B]
|
Gracias amigo, voy a probarlo, creo que probé algo parecido :rolleyes: y no me funcionó, pero lo mismo lo hice mal por que traigo una empanada de tanto buscar leer y probar que no veas.
Mañana te cuento Saludos :) |
Ya te lo ha dicho kezuziyo. Ahora solo tienes que implementarlo en php y pasar bien las variables.
|
Cita:
Donde me atasco es en como paso los 2 valores (Madrid y Hoteles) de los dos listas-menú desde la pagina que los contiene a la pagina de resultados que contiene el juego de registros, por que… o me muestra todos los registros o ninguno, pero no me filtra por los dos criterios escogidos. Es que el tema está en que “Madrid y Hoteles” no lo pongo yo, si no que los valores (Madrid y hoteles) vienen de otra página que contiene los listas-menús. Utilizo el método GET para enviar el formulario. "hoteles" es el nombre de la tabla en la DB. “concejo” es el nombre de la columna en la DB (de donde saldría Madrid) “concejos” es el ID de la lista-menú que contiene los pueblos en la pagina del buscador. “categoria” es el nombre de la columna en la DB (de donde saldría Hoteles) “categorias” es el ID de la lista-menú que contiene las categorías en la pagina del buscador. [B]La consulta que NO me muestra ningún registro es esta:[/B] SELECT seccion, concejo, nombre FROM hoteles WHERE seccion = secciones AND concejo = concejos [B]La que me muestra todos sin filtrar es esta:[/B] SELECT seccion, concejo, nombre FROM hoteles WHERE seccion = seccion AND concejo = concejo La consulta la hago con dreamweaver y la variable la declaro así: Nombre: seccion Tipo: Text Valor predeterminado: -1 valor de tiempo de ejecución: $_GET[‘seccion’] [B]Y la segunda:[/B] Nombre: concejo Tipo: Text Valor predeterminado: -1 valor de tiempo de ejecución: $_GET[‘concejo’] He probado a declararlas cambiando “concejos” a “concejo”, “secciones” a “sección” y viceversa, pero nada. Yo creo que la historia está en que no declaro bien las variables, pero por más que pruebo nada de nada :( Saludos |
Es que me pierdo un poco con php porque no lo se manejar... pero para la consulta de sql tienes que decir que la variable seccion debe ser la que introduzca el tipo en el formulario, [B]$_GET[‘seccion’][/B], y para la variable [B]concejo [/B]debería ser igual a [B]$_GET[‘concejo’][/B].
Es que en la primera de las consultas que pones aparece un [B]concejos[/B] y una [B]secciones[/B] que no son nombres de campos de la tabla [B]hoteles[/B], por lo que no se qué estás pretendiendo hacer con ella y en la segunda de las consultas estás diciendo que [B]1=1[/B], que siempre es cierto (dices que [B]seccion = seccion[/B] y que [B]concejo = concejo[/B] y eso siempre va a ser cierto : rolleyes: ). Ahora mismo me voy a desconectar, porque tengo un sueño que me caigo, por eso puede que no me esté enterando bien de lo que pones, pero podrías hacernos un esquemita de lo que llevas hecho: nombres de tablas, campos de cada tabla, formularios que tienes,... Me voy para el sobre :ni) |
$seccion = $_GET['seccion'];
$concejo = $_GET['concejo']; $query = "SELECT seccion, concejo, nombre FROM hoteles WHERE seccion = $seccion AND concejo = $concejo"; Coke. |
Hola de nuevo kolmo7, si señor al cuerpo hay que darle lo que pide :D
[quote]X [B]kolmo7[/B]: Es que en la primera de las consultas que pones aparece un concejos y una secciones que no son nombres de campos de la tabla hoteles, por lo que no se qué estás pretendiendo hacer con ella..[/quote] Ya lo cambié, “concejos y secciones” eran los nombres que le di a los dos lista-menú del buscador. Los cambié por “concejo y sección” que son también los nombres de las columnas en la tabla “hoteles”, pero tampoco me funciona. No hay manera, o me muestra todos los registros de la tabla o ninguno. Os doy datos a ver si caéis en donde meto la pata: Nombre de la tabla: hoteles Nombre de la columna en la tabla hoteles que contiene las secciones: seccion Nombre de la columna en la tabla hoteles que contiene los concejos: concejo Nombre de la lista-menú que contiene las secciones: seccion Nombre de la lista-menú que contiene los concejos: concejo Método de envío del formulario que contiene los dos lista-menús: GET Con esto, como sería la consulta? [quote] X [B]Coke[/B]: $seccion = $_GET['seccion']; $consejo = $_GET['consejo']; $query = "SELECT seccion, concejo, nombre FROM hoteles WHERE seccion = $seccion AND consejo = $consejo"; [/quote] Gracias, pero tampoco me funciona (si es que lo he hecho bien), seguiremos intentando :cool: Saludos y hasta mañana |
yo tampoco he trabajado nunca con Dramweaver o php, pero el amigo Coke si que es un experto en el tema, me extraña que no funcione lo que él dice (aunque como humano que es también se puede equivocar), revisa lo que él te ha dicho.
|
Cita:
$query = "SELECT seccion, concejo, nombre FROM hoteles WHERE seccion = '$seccion' AND concejo = '$concejo'"; $query = "SELECT seccion, concejo, nombre FROM hoteles WHERE seccion = '".$seccion."' AND concejo = '".$concejo."'"; $query = "SELECT seccion, concejo, nombre FROM hoteles WHERE seccion = \"$seccion\" AND concejo = \"$concejo\""; etc... adaptalo a tu codigo...o si quieres pon aqui el trozito en cuestion, para que lo veamos y asi poder ayudarte mejor. Coke. |
Hola qué tal?
No, si no digo esté mal el código de Coke, el tema es que como utilizo Dreamweaver, en la ventana de configuración del juego de registros no se puede meter la consulta tal y como me lo puso el compañero, he mirado todo el código de la página y no aparece esa parte para hacerle yo la corrección de acuerdo al consejo de Coke. Lo más parecido (entre todo el código que genera Dreamweaver para el RS) es esto: Así está ahora después de mil vueltas, ahora ni me los mustra todos ni no me muestra ninguno, simplemente me muestra el valor que puse al declarar las variables en el campo “valor predeterminado”. [B]Código escrito en la página por el programa después de configurar el RS en la ventana correspondiente:[/B] Las declaraciones de las variables. $seccion_resultados = "-1"; if (isset($_GET['seccion'])) { $seccion_resultados = $_GET['seccion']; } $concejo_resultados = "-1"; if (isset($_GET['concejo'])) { $concejo_resultados = $_GET['concejo']; } El query $query_resultados = sprintf("SELECT %s, %s, nombre FROM hoteles WHERE %s = %s AND %s = %s" [B]Estas son las capturas de la configuración del RS.[/B] Ventana de configuración : [URL=http://img197.imageshack.us/i/ventanars.gif/]http://img197.imageshack.us/img197/6632/ventanars.gif[/URL] [B]Variable concejo:[/B] [URL=http://img137.imageshack.us/i/variableconcejo.gif/]http://img137.imageshack.us/img137/7...bleconcejo.gif[/URL] [B]Variable sección:[/B] [URL=http://img37.imageshack.us/i/variableseccion.gif/]http://img37.imageshack.us/img37/393...bleseccion.gif[/URL] [B]Resultado de la consulta:[/B] (Cuando lo pruebo en local solo muestra los nombres de todos los registros de la tabla.) [URL=http://img31.imageshack.us/i/resultadoconsulta.gif/]http://img31.imageshack.us/img31/559...doconsulta.gif[/URL] Yo creo que el fallo está en cómo declaro las variables, cosa que estaría chupao de solucionar si lo pudiese escribir tal cual me lo puso el compañero. O si pudiese modificar algo en la ventana del RS para hacerlo funcionar. Me he artao de buscar en Google como hacer esto último, pero a pesar de haber un millón de tutoriales de Dreamweaver nadie trata este tema. Muchas gracias por la ayuda, seguiremos intentando :) Saludos |
creo que habías dicho que si ponías un solo criterio si que funcionaba bien, si es así vuelve a poner un solo criterio y mira a ver que genera a ver si te ayuda a saber como se hace
|
cambia esto...
$query_resultados = sprintf("SELECT %s, %s, nombre FROM hoteles WHERE %s = %s AND %s = %s" por esto... $query_resultados = "SELECT seccion, concejo, nombre FROM hoteles WHERE seccion = '$seccion_resultados' AND concejo = '$concejo_resultados'"; Coke. |
o si no quieres cambiar tu codigo...pon esto a mano.
yo no uso Dreamweaver...pero ese codigo aunque esta incompleto, debe ser algo asi... Código PHP:
|
Hola.
Cita:
Lo he cambiado para pegaros lo que dice kezuziyo. [B]Así me escribe el código de una consulta simple:[/B] La variable: Cita:
|
Igual está aquí el tema.
Si os fijáis en la consulta simple que funciona, al declarar la variable pone: [B]$colname_resultados = $_GET['concejo'];[/B] y no [B]$concejo_resultados = $_GET['concejo'];[/B] o [B]$seccion_resultados = $_GET['seccion'];[/B] que es como aparece cuando lo escribo yo. ¿Puede ser eso? :cool: |
a ver...tienes que cambiar esto...
Código PHP:
Código PHP:
Código PHP:
$query_resultados = sprintf("SELECT %s, %s, nombre FROM hoteles WHERE %s = %s AND %s = %s" porque es asi como lo habias puesto tu, pero tienes que cambiarlo completo... o prueba con esto.... Código PHP:
|
Código:
$seccion_resultados = "-1"; |
creo que ya debe de funcionarte...
lo que si te recomiendo es que intentes hacerlo manualmente, es como se aprende...con lo editores automaticos, uno hace las cosas y no sabe lo que esta haciendo...yo personalmente lo haria asi... Código PHP:
|
Nada, no hay manera, no me funciona ninguno. Y lo he probado varias veces, por que al principio no me había dado cuenta de que Coke ponía "con[B]s[/B]ejos" en vez de "con[B]c[/B]elos", pero no es eso por que lo he corregido y sigue sin funcionar.
[B]Así lo tengo ahora[/B], (que ya no es ni lo de antes) de esta manera me muestra todos los registros de la tabla independientemente de lo que haya seleccionado en los listas-menú. [quote] $seccion_resultados = "-1"; if (isset($_GET['seccion'])) { $seccion_resultados = $_GET['seccion']; } $concejo_resultados = "-1"; if (isset($_GET['concejo'])) { $concejo_resultados = $_GET['concejo']; } $query_resultados = sprintf("SELECT %s, %s, nombre FROM hoteles WHERE %s = %s AND %s = %s", GetSQLValueString($seccion_resultados, "text"),GetSQLValueString($concejo_resultados, "int"),GetSQLValueString($seccion_resultados, "text"),GetSQLValueString($seccion_resultados, "text"),GetSQLValueString($concejo_resultados, "int"),GetSQLValueString($concejo_resultados, "int")); [/quote] Si es que ya llevo tiempo intentando implementar un buscador así pero ya lo dejé por imposible dos o tres veces por que me arté de buscar. Gracias, seguiré buscando, mientras tanto si se os ocurre algo... agradecido. Saludos |
Cita:
Si, tienes toda la razón, pero es que tengo tantos frentes abiertos que no doy a basto, y echar mano de un editor de estos me evita tener que meterme de lleno, como debería ser (y bien dices tú), y tener que recortar tiempo de otras movidas con las que también necesito trabajar. De todas maneras le daré unas vueltas a esto último que has puesto :D Saludos |
oño, es verdad...no se por que unas veces pongo concejo y otras consejo...debe ser porque soy andalú...:p
bueno, pues solo tienes que cambiar onde pongo consejo por concejo. Coke. |
Cita:
Cita:
otro ejemplo... Cita:
si tu formato es... Cita:
"SELECT seccion, concejo, nombre FROM hoteles WHERE seccion = '$seccion_resultados' AND concejo = '$concejo_resultados'" tienes que hacerlo asi... Código PHP:
Código PHP:
|
OK, gracias de nuevo :D
Mañana lo miro por que llevo todo el día con lo mismo y estoy ya empanao. Saludos |
¿ya funciona?
|
Mecaguen..
Hola, pues no :y) , siento mucho daros esta noticia, pero de momento no me funciona. He probado a eliminar por completo el RS que me generó el programa y lo he intentado directamente con esto de Coke:
[CODE]$concejo_resultados = ''; $seccion_resultados = ''; if(isset($_GET['seccion'])) { $seccion_resultados = @mysql_real_escape_string($_GET['seccion']); } if(isset($_GET['concejo'])) { $concejo_resultados = @mysql_real_escape_string($_GET['concejo']); } if($concejo_resultados && $seccion_resultados) { $query_resultados = "SELECT seccion, concejo, nombre FROM hoteles WHERE concejo = '$concejo_resultados' AND seccion = '$seccion_resultados'"; } [/CODE] Pero como no me aclaro.. pasa lo que pasa. ¿Qué debo poner entre las comillas simples?: [B]$concejo_resultados = ''; $seccion_resultados = '';[/B] En cuanto a las demás pruebas no me funciona ninguna. Os pongo el código completo que tengo ahora, así me muestra todos los registros sin filtrar: [CODE]if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } } $concejo_resultados = "-1"; if (isset($_GET['concejo'])) { $concejo_resultados = $_GET['concejo']; } $seccion_resultados = "-1"; if (isset($_GET['seccion'])) { $seccion_resultados = $_GET['seccion']; } mysql_select_db($database_mibasededatos, $mibasededatos); $query_resultados = sprintf("SELECT %s, %s, nombre FROM hoteles WHERE %s = %s AND %s = %s", GetSQLValueString($seccion_resultados, "text"),GetSQLValueString($concejo_resultados, "text"),GetSQLValueString($concejo_resultados, "text"),GetSQLValueString($concejo_resultados, "text"),GetSQLValueString($seccion_resultados, "text"),GetSQLValueString($seccion_resultados, "text")); $resultados = mysql_query($query_resultados, $asturprodb) or die(mysql_error()); $row_resultados = mysql_fetch_assoc($resultados); $totalRows_resultados = mysql_num_rows($resultados);[/CODE] Joer, perdonar por mi torpeza :rolleyes: , si lo conseguimos os invito a unas cervezas virtuales :D Saludos (caguen la..) |
Código PHP:
|
Ahora sí
http://img134.imageshack.us/img134/3...vezaspatos.jpg
Pues lo dicho :D :D :D :D Muchas gracias a todos :-/ Coke, tío, no sé como agradecértelo, por fin funciona filtrando perfectamente, aunque estuve a punto de desecharlo por que se te escapó otro "[B]consejos[/B]" :D Un saludo, y super agradecido :-/ :-/ Voy a ver si papeo que ya es hora. |
de nada...y gracias por las cervecitas, pero no veo una Alhambra 1925...:p
Coke. |
¡Mecagüen..!
Será por dinero :D
[URL=http://img121.imageshack.us/i/alhambra1925.jpg/]http://img121.imageshack.us/img121/1...hambra1925.jpg[/URL] Lo dicho, gracias compañero :) Saludos |
La franja horaria es GMT +2. Ahora son las 10:55. |
Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
ZackYFileS - Foros de Debate