Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Crear filtro, varias consultas PHP

Estas en el tema de Crear filtro, varias consultas PHP en el foro de PHP en Foros del Web. Tengo lo siguiente: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original if ( isset ( $_GET [ 'clasificacion' ] ) ) {     echo '<br> <div ...
  #1 (permalink)  
Antiguo 18/07/2016, 19:40
 
Fecha de Ingreso: enero-2016
Ubicación: Venezuela
Mensajes: 139
Antigüedad: 8 años, 3 meses
Puntos: 3
Crear filtro, varias consultas PHP

Tengo lo siguiente:

Código PHP:
Ver original
  1. if(isset($_GET['clasificacion'])){
  2.     echo '<br> <div class="menubusq">
  3.               <label>ORDENAR POR:
  4.               <a href="?clasificacion=1">DEPARTAMENTO</a> - <a href="?clasificacion=2">CASA</a> - <a href="?clasificacion=3">LOTE</a>
  5.               - <a href="?clasificacion=4">EDIFICIO</a> - <a href="?clasificacion=5">LOCAL</a></label></div>
  6.               <br><br>';
  7.     $idclasificacion = (int) mysql_real_escape_string($_GET['clasificacion']);
  8.     $queryclasifi = mysql_query("SELECT * FROM inmueble WHERE idclasificacion = $idclasificacion AND patio = $patio and piscina = $piscina and parque = $parque and jardin = $jardin and garaje = $garaje");
  9.        while($columna = mysql_fetch_array($queryclasifi)) // Realizamos un bucle que muestre todas las empresas, utilizando while.
  10.             {
  11.                
  12.            $idinmu = $columna['id'];
  13.     $caracteristicaque = mysql_query("SELECT nombre FROM inmueble WHERE id = '$idinmu'");
  14.     while ($darcaracteristica = mysql_fetch_array($caracteristicaque)){
  15.     echo'
  16.        <table class="inmencontrados">
  17.            <tr>
  18.                <td><h3><a href="?inmueble='.$idinmu.'">'.$columna['nombre'].' </span></a></h3></td>
  19.            </tr>
  20.            <tr>
  21.                <td><br>
  22.                <label class="noticialista">'.substr($darcaracteristica['direccion'], 0, $limitenoticia).'</label><a href="?inmueble='.$idinmu.'"><b class="trespuntos"> LEER MAS...</b></a></td></tr>    
  23.                                 </table><br> ';
  24.             }}

Quiero crear algo cómo por ejemplo localhost/archivo.php?clasificacion=5&patio=1&inmueble=2

Algo así, lo que quiero es filtrar de alguna manera, que por ejemplo al seleccionar clasificación departamento me aparezcan tal, si selecciono que tenga patio que en el get cambie a 2 el valor, cómo puedo realizar esto?

Gracias.
  #2 (permalink)  
Antiguo 18/07/2016, 20:03
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 4 meses
Puntos: 39
Respuesta: Crear filtro, varias consultas PHP

¿Qué o dónde está el fallo? A mi el código me parece bien gramaticalmente hablando. Aunque creo que con la segunda consulta estás redudando, si en el primero traes todos los campos (con *), entonces ya no sirve de nada hacer una segunda consulta a la misma tabla para sacar el nombre.

Saludos
  #3 (permalink)  
Antiguo 18/07/2016, 21:27
 
Fecha de Ingreso: enero-2016
Ubicación: Venezuela
Mensajes: 139
Antigüedad: 8 años, 3 meses
Puntos: 3
Respuesta: Crear filtro, varias consultas PHP

Cita:
Iniciado por rodocoyote15 Ver Mensaje
¿Qué o dónde está el fallo? A mi el código me parece bien gramaticalmente hablando. Aunque creo que con la segunda consulta estás redudando, si en el primero traes todos los campos (con *), entonces ya no sirve de nada hacer una segunda consulta a la misma tabla para sacar el nombre.

Saludos
Disculpa, el otro es otra cosa.
Pues no se de que manera hacer como por ejemplo si presione solo patio me salga solo los registrados, por ejemplo?clasificación=5&patio=2 o algún filtro mejor, entiendes?
  #4 (permalink)  
Antiguo 18/07/2016, 22:56
Avatar de petit89  
Fecha de Ingreso: marzo-2011
Mensajes: 1.135
Antigüedad: 13 años, 1 mes
Puntos: 170
Respuesta: Crear filtro, varias consultas PHP

tienes que crear las variables segun las opciones que quieres agregar o hacerlo mediante un array(), como sientas que es mas facil... por ejemplo, pones el link de la opcion con patio que generara ejemplo?patio=2

entonces ya tienes una variable de busqueda esperando que en la URL exista "patio"

Código PHP:
Ver original
  1. if(isset($_GET['clasificacion'])){
  2. $clasi_sql = " WHERE idclasificacion = '$_GET['clasificacion']'";
  3. }
  4. if(isset($_GET['patio'])){
  5. $patio_sql = " AND patio = '$_GET['patio']'";
  6. }
  7. //todas las demas opciones

luego en la SQL la construyes, quedara asi:

Código PHP:
Ver original
  1. $sql =    "SELECT * FROM inmueble $clasi_sql  $patio_sql";
que te estara generando en caso que exista una clasificacion y patio:
Código PHP:
Ver original
  1. $sql =    "SELECT * FROM inmueble WHERE idclasificacion = '$_GET['clasificacion']' AND patio ='$patio'";

podrias hacerlo con un array() pero no se si los manejas bien... espero que te sirva de referencia al menos, saludos!
__________________
█ WebHosting / Reseller a bajo costo | Uptime Garantizado | Soporte en Español e Ingles
¿Te sirvió la respuesta? Deja un +1 (Triangulo negro al lado derecho)
  #5 (permalink)  
Antiguo 21/07/2016, 16:32
 
Fecha de Ingreso: enero-2016
Ubicación: Venezuela
Mensajes: 139
Antigüedad: 8 años, 3 meses
Puntos: 3
Respuesta: Crear filtro, varias consultas PHP

Cita:
Iniciado por petit89 Ver Mensaje
espero que te sirva de referencia al menos, saludos!
Hola, gracias por responder, si me sirvió, lo puse de la siguiente manera:

Código PHP:
if(isset($_GET['clasificacion'])){
    echo 
'<br> <div class="menubusq">
               <label>ORDENAR POR: 
               <a href="?clasificacion=1">DEPARTAMENTO</a> - <a href="?clasificacion=2">CASA</a> - <a href="?clasificacion=3">LOTE</a>
               - <a href="?clasificacion=4">EDIFICIO</a> - <a href="?clasificacion=5">LOCAL</a></label></div>
               <br><br>'
;
    
$queryclasifi mysql_query("SELECT * FROM inmueble $clasi_sql");
    if(isset(
$_GET['patio'])){
        
$queryclasifi mysql_query("SELECT * FROM inmueble $clasi_sql $patio_sql");
    }
    if(isset(
$_GET['piscina'])){
        
$queryclasifi mysql_query("SELECT * FROM inmueble $clasi_sql $patio_sql $piscina_sql");
    }
    if(isset(
$_GET['parque'])){
        
$queryclasifi mysql_query("SELECT * FROM inmueble $clasi_sql $patio_sql $piscina_sql $parque_sql");
    }
    if(isset(
$_GET['jardin'])){
        
$queryclasifi mysql_query("SELECT * FROM inmueble $clasi_sql $patio_sql $piscina_sql $parque_sql $jardin_sql");
    }
    if(isset(
$_GET['garaje'])){
        
$queryclasifi mysql_query("SELECT * FROM inmueble $clasi_sql $patio_sql $piscina_sql $parque_sql $jardin_sql $garaje_sql");
    }
    
       while(
$columna mysql_fetch_array($queryclasifi))
            { 
Pero como hago si quiero dejar un get solo? He visto una web que tiene algo como de la siguiente manera:

localhost/hola.php?clasificacion=2&patio=&piscina=2&jardin=

Algo así, me entiendes?

Por ejemplo si selecciono solo piscina me salga solamente la piscina y los otros queden como si nada..

Saludos y gracias..
  #6 (permalink)  
Antiguo 21/07/2016, 18:44
 
Fecha de Ingreso: enero-2016
Ubicación: Venezuela
Mensajes: 139
Antigüedad: 8 años, 3 meses
Puntos: 3
Respuesta: Crear filtro, varias consultas PHP

Ya pude hacerlo mas o menos, pero ahora tengo el problema que hago cómo me dijiste petit89
y me devuelve error en la query Notice: Undefined variable: patio_sql porque no se ha definido si entro desde:
?clasificacion=
  #7 (permalink)  
Antiguo 21/07/2016, 18:54
Avatar de petit89  
Fecha de Ingreso: marzo-2011
Mensajes: 1.135
Antigüedad: 13 años, 1 mes
Puntos: 170
Respuesta: Crear filtro, varias consultas PHP

Si clasificacion es NULL... deberia quedarte la SQL como:

Código PHP:
Ver original
  1. SELECT * FROM inmueble

lo cual es valido, te agarraria todos los registros sin filtro alguno, ahora tu tienes el WHERE en clasificacion, es decir sin que exista este no existe el WHERE, se tendria que crear una condicional dependiendo los GET que tengas, si variables GET == 0, entonces por medio de otra variable, que agrege el WHERE, al igual que el AND creeria...
__________________
█ WebHosting / Reseller a bajo costo | Uptime Garantizado | Soporte en Español e Ingles
¿Te sirvió la respuesta? Deja un +1 (Triangulo negro al lado derecho)
  #8 (permalink)  
Antiguo 21/07/2016, 19:00
 
Fecha de Ingreso: enero-2016
Ubicación: Venezuela
Mensajes: 139
Antigüedad: 8 años, 3 meses
Puntos: 3
Respuesta: Crear filtro, varias consultas PHP

Cita:
Iniciado por petit89 Ver Mensaje
Si clasificacion es NULL... deberia quedarte la SQL como:

Código PHP:
Ver original
  1. SELECT * FROM inmueble

lo cual es valido, te agarraria todos los registros sin filtro alguno, ahora tu tienes el WHERE en clasificacion, es decir sin que exista este no existe el WHERE, se tendria que crear una condicional dependiendo los GET que tengas, si variables GET == 0, entonces por medio de otra variable, que agrege el WHERE, al igual que el AND creeria...
Disculpa ahí era ?clasificacion=1, conseguí una manera de hacerlo que si ?clasificacion=1&patio=1, pero ahora lo estoy haciendo de la manera que me indicaste en la otra respuesta, pero me sale error de variable indefinida..

Gracias..
  #9 (permalink)  
Antiguo 21/07/2016, 19:26
Avatar de petit89  
Fecha de Ingreso: marzo-2011
Mensajes: 1.135
Antigüedad: 13 años, 1 mes
Puntos: 170
Respuesta: Crear filtro, varias consultas PHP

Sin mostrarnos lo que envias y el codigo que ocupas dificilmente podemos ayudarte...
__________________
█ WebHosting / Reseller a bajo costo | Uptime Garantizado | Soporte en Español e Ingles
¿Te sirvió la respuesta? Deja un +1 (Triangulo negro al lado derecho)
  #10 (permalink)  
Antiguo 21/07/2016, 20:51
 
Fecha de Ingreso: enero-2016
Ubicación: Venezuela
Mensajes: 139
Antigüedad: 8 años, 3 meses
Puntos: 3
Respuesta: Crear filtro, varias consultas PHP

Cita:
Iniciado por petit89 Ver Mensaje
Sin mostrarnos lo que envias y el codigo que ocupas dificilmente podemos ayudarte...
Por ejemplo acá solo con patio y clasificación:

Código PHP:
if(isset($_GET['clasificacion'])){
    
$idclasificacion = (int) mysql_real_escape_string($_GET['clasificacion']);
$clasi_sql " WHERE idclasificacion = '$idclasificacion'";

if(isset(
$_GET['patio'])){
$patio mysql_real_escape_string($_GET['patio']);
$patio_sql " AND patio = '$patio'";

//Acá siguen las demás... 
Y acá donde se ejecuta la query:

Código PHP:
    $queryclasifi mysql_query("SELECT * FROM inmueble $queryclasifi $patio_sql"); 
Me sale error si selecciono solo clasificación porque no he ejecutado patio, así como me dijiste tu..
  #11 (permalink)  
Antiguo 21/07/2016, 21:11
Avatar de petit89  
Fecha de Ingreso: marzo-2011
Mensajes: 1.135
Antigüedad: 13 años, 1 mes
Puntos: 170
Respuesta: Crear filtro, varias consultas PHP

Aca:
Código PHP:
Ver original
  1. $queryclasifi = mysql_query("SELECT * FROM inmueble $queryclasifi $patio_sql");

porque ocupas $querycalsifi en la SQL??? si la variable donde defines esa parte esta como $clasi_sql

a mi forma de ver, deberia ser:

Código PHP:
Ver original
  1. $queryclasifi = mysql_query("SELECT * FROM inmueble $clasi_sql $patio_sql");
__________________
█ WebHosting / Reseller a bajo costo | Uptime Garantizado | Soporte en Español e Ingles
¿Te sirvió la respuesta? Deja un +1 (Triangulo negro al lado derecho)
  #12 (permalink)  
Antiguo 21/07/2016, 21:19
 
Fecha de Ingreso: enero-2016
Ubicación: Venezuela
Mensajes: 139
Antigüedad: 8 años, 3 meses
Puntos: 3
Respuesta: Crear filtro, varias consultas PHP

Cita:
Iniciado por petit89 Ver Mensaje
Aca:
Código PHP:
Ver original
  1. $queryclasifi = mysql_query("SELECT * FROM inmueble $queryclasifi $patio_sql");

porque ocupas $querycalsifi en la SQL??? si la variable donde defines esa parte esta como $clasi_sql

a mi forma de ver, deberia ser:

Código PHP:
Ver original
  1. $queryclasifi = mysql_query("SELECT * FROM inmueble $clasi_sql $patio_sql");
Igual me dice que $patio_sql no está definido porque como te digo, si en el get solo tengo clasificación me sale solo eso..
  #13 (permalink)  
Antiguo 21/07/2016, 21:24
Avatar de petit89  
Fecha de Ingreso: marzo-2011
Mensajes: 1.135
Antigüedad: 13 años, 1 mes
Puntos: 170
Respuesta: Crear filtro, varias consultas PHP

Pues entonces definelos como NULL....

Código PHP:
Ver original
  1. //Aqui arriba pueden estar como NULL y si se llega a cumplir la condicion tomaran el valor debido
  2. $clasi_sql = "";
  3. $patio_sql = "";
  4.  
  5. //Aqui hará las comprobaciones y si es requerido el valor cambiará
  6. if(isset($_GET['clasificacion'])){
  7.     $idclasificacion = (int) $_GET['clasificacion'];
  8. $clasi_sql = " WHERE idclasificacion = '$idclasificacion'";
  9.  
  10. //} aqui estaria el cierre si es que no lo haces mas abajo...
  11.  
  12.  
  13. if(isset($_GET['patio'])){
  14. $patio = mysql_real_escape_string($_GET['patio']);
  15. $patio_sql = " AND patio = '$patio'";
  16. }

Otra cosa, el cierre del if de clasificacion lo haces mas abajo?... falta el cierre y quitale a la variable la funciona mysql.. esa es cuando ya estas en la consulta no en manejo de datos
__________________
█ WebHosting / Reseller a bajo costo | Uptime Garantizado | Soporte en Español e Ingles
¿Te sirvió la respuesta? Deja un +1 (Triangulo negro al lado derecho)

Última edición por petit89; 21/07/2016 a las 21:35
  #14 (permalink)  
Antiguo 22/07/2016, 12:40
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Crear filtro, varias consultas PHP

El amigo petit ya te a encaminado, el proble ma que veo que te plante es que si no hay ninguna condicion o si la condicion 'clasificacion' no existe te arroja error, ya que el where de la consulta no se llegaria a declarar nunca.

Para evitar esto lo mejor es construir el WHERE de forma dinamica.

Un ejemplo practico de lo que buscas podria ser el siguiente:

Te lo comento para que entiendas como funciona.
Código PHP:
Ver original
  1. <?php
  2. $condiciones=array();
  3. $where='';
  4. /* Condicion uno */
  5. if( isset($_GET['clasificacion']) ){
  6.     $idclasificacion = (int) mysql_real_escape_string($_GET['clasificacion']);
  7.     $condiciones[]= " idclasificacion='$idclasificacion' "; // fijate que dejo espacios al principio y final de la condicion
  8. }
  9. /* Condicion dos */
  10. if( isset($_GET['patio']) ){
  11.     $patio = mysql_real_escape_string($_GET['patio']);
  12.     $condiciones[]= " patio='$patio' "; // fijate que dejo espacios al principio y final de la condicion
  13. }
  14. /* TANTAS CONDICIONES COMO NECESITES */
  15.  
  16. /* Contruimos el where dinamicamente */
  17. foreach ($condiciones as $k => $v) {
  18.     if($k==0){// si es el primer elemento del array condiciones añadimos el WHERE
  19.         $where=" WHERE $v ";// añado espacios al principio y al final por prevencion
  20.     }
  21.     else{//para el resto de elementos del array concatenamos el AND $v (condicion)
  22.         $where.=" AND $v ";// añado espacios al principio y al final por prevencion
  23.     }
  24.  
  25. }
  26. /* destruimos el array condiciones que ya no es necesario */
  27. unset($condiciones);
  28.  
  29. /* contruimos la consulta SQL */
  30. $sql="SELECT * FROM inmueble $where ";
  31. /* y por fin la ejecutamos */
  32. $queryclasifi = mysql_query($sql);
  33. ?>

de esta forma todas las condiciones pueden ser prescindibles y/o independientes unas de otras.

Un saludo
__________________
Unset($vida['malRollo']);

Etiquetas: mysql, select
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:08.