Foros del Web » Programando para Internet » PHP »

Busqueda por intervalos

Estas en el tema de Busqueda por intervalos en el foro de PHP en Foros del Web. Te expongo todo el caso: He creado una base de datos y hemos introducido unas series de vivienda. Para el ejemplo los campos dormitorios y ...
  #1 (permalink)  
Antiguo 16/10/2011, 10:34
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años
Puntos: 1
Busqueda por intervalos

Te expongo todo el caso:


He creado una base de datos y hemos introducido unas series de vivienda. Para el ejemplo los campos dormitorios y aseos tienen un valor numerico

Ahora se trata de hacer una busqueda y posteriormente que muestre los resultados.

Busqueda:

Código PHP:
Ver original
  1. <form name= "formulario" method= "post" action="busqueda.php" >
  2. <table width="600" border="1">
  3.   <tr>
  4.     <td colspan="2">BUSCAR</td>
  5.   </tr>
  6.   <tr>
  7.     <td>DORMITORIOS</td>
  8.     <td><select name="dormitorios">
  9.         <option value="????">&lt;2</option>
  10.         <option value="?????">3-5</option>
  11.         <option value="??????">6-8</option>
  12.         <option value="?????">9-11</option>
  13.         <option value="??????">"≥" </option>
  14.       </select></td>
  15.   </tr>
  16.     <tr>
  17.     <td>ASEOS</td>
  18.     <td><select name="aseos">
  19.         <option value="????">&lt;2</option>
  20.         <option value="?????">3-5</option>
  21.         <option value="??????">6-8</option>
  22.         <option value="?????">9-11</option>
  23.         <option value="??????">"≥" </option>
  24.       </select></td>
  25.   </tr>
  26.   <tr>
  27.     <td colspan="2"><input type="submit" value="SEARCH" name="Buscar"></td>
  28.   </tr>
  29. </table>
  30. </form>

Y posteriormente mostrar los resultados encontrados (con algo parecido lo hacia antes, pero los intervalos em mataron)

Código PHP:

<?php
session_start
(); 
include(
'config.php');
if( isset(
$_POST['dormitorios']) ||  isset($_POST['aseos']) )
{

   
$a=$_POST['dormitorios'];
   
$b=$_POST['aseos'];


  
$resultado=mysql_select_db($db$conexion);
   if (!
$resultado){
   
      echo 
"ERROR: Imposible seleccionar la base de datos $basedatos.<br>\n";
      
mysql_close($conexion); 
      exit; 
       }
   else{
    
     }
     
$sql="select*from recetas where";
        if (
$a != '')
         
$sql .= " dormitorias like '%$a%' and " ;
       if (
$b != '')
       
$sql .=" iaseos = '$b' and "

";

       $sql .= " 
1 order by id" ;
       $res=mysql_query( $sql, $conexion);
      if (!$res){
       echo"
error".mysql_error();
       }
      else
     {
         echo"
<table align='center' border=2 cellpadding=10 bordercolor=gold>";
         echo"
<tr>
       <
td><h3>REF</h3></td>
       <
td><h3>DORMITORIOS</h3></td>
       <
td><h3>ASEOS</h3></td>
        <
td></td>
       
       
" ;
         while($fila = mysql_fetch_array($res))
          {


              echo "
<h3><tr><td><h4>$fila[id]</h4></td>
                     <
td><h4>$fila[ref]</h4></td>
                  <
td><h4>$fila[dormitorios]</h4></td>
<
td><h4>$fila[aseos]</h4></td>
               </
tr></h3>";
//mysql_close($connect);

        } 
      echo"
</table>";
     
   }
//or die("
error de insercion codigo de enfermedad o codigo de res no encontrado.".mysql_error()."<br>");
}
?>

Espero haberme explicado
  #2 (permalink)  
Antiguo 16/10/2011, 12:49
 
Fecha de Ingreso: octubre-2011
Ubicación: USA
Mensajes: 166
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Busqueda por intervalos

Creo que en la consulta donde utilizas el like los and debes cambiarlos por or.

Saludos
  #3 (permalink)  
Antiguo 22/10/2011, 02:31
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años
Puntos: 1
Respuesta: Busqueda por intervalos

Hola:

Gracias a un conocido he empezado por otro camino; pero me he vuelto a perder...

Os dejo el codigo y luego os expongo los problemas:

Código PHP:
<form action="busqueda1.php" method="post">
          <
table width="460" border="1" align="center" >
          <
tr height="30px"
               <
td><font size="+1">Area</font></td>
              <
td> <div align="center"
                  <
select name="zona" style="color:white;font-weight:bold;border-style: outset; border-width: 4px; border-color:#00FFFF;background:#000066;height:20px;font-size:12pt;width:180px">
                    <
option value="">All</option>
                    <
option value="Sotogrande">Sotogrande</option>
                    <
option value="Estepona">Estepona</option>
                    <
option value="Marbella">Marbella</option>
                    <
option value="Benahavis">Benahavis</option>
                    <
option value="Benalmadena">Benalmadena</option>
                  </
select>
                </
div></td>
            </
tr>
          
            <
tr height="30px"
              <
td><font size="+1">Living Area</font></td>
              <
td> <div align="center"
                  <
select name="superficiep" style="color:white;font-weight:bold;border-style: outset; border-width: 4px; border-color:#00FFFF;background:#000066;height:20px;font-size:12pt;width:180px">
                    <
option value="">All</option>
                    <
option value="<= 2">&le2</option>
                    <
option value="3 AND 5">3-5</option>
                    <
option value="6 AND 8">6-8</option>
                    <
option value="9 AND 11">9-11</option>
                    <
option value="> 11">&gt11</option>
                  </
select>
                </
div></td>
            </
tr>
               <
tr height="30px"
              <
td><font size="+1">Rooms</font></td>
              <
td> <div align="center"
                  <
select name="habitaciones" style="color:white;font-weight:bold;border-style: outset; border-width: 4px; border-color:#00FFFF;background:#000066;height:20px;font-size:12pt;width:180px">
                    <
option value="">All</option>
                    <
option value="<= 2">&le2</option>
                    <
option value="3 AND 5">3-5</option>
                    <
option value="6 AND 8">6-8</option>
                    <
option value="9 AND 11">9-11</option>
                    <
option value="> 11">&gt11</option>
                  </
select>
                </
div></td>
            </
tr>
             <
tr height="30px"
              <
td><font size="+1">Bedrooms</font></td>
              <
td> <div align="center"
                  <
select name="aseos" style="color:white;font-weight:bold;border-style: outset; border-width: 4px; border-color:#00FFFF;background:#000066;height:20px;font-size:12pt;width:180px">
                    <
option value="">All</option>
                    <
option value="<= 2">&le2</option>
                    <
option value="3 AND 5">3-5</option>
                    <
option value="6 AND 8">6-8</option>
                    <
option value="9 AND 11">9-11</option>
                    <
option value="> 11">&gt11</option>
                  </
select>
                </
div></td>
            </
tr>
              <
tr height="30px"
              <
td><font size="+1">Price</font></td>
              <
td> <div align="center"
                  <
select name="precio" style="color:white;font-weight:bold;border-style: outset; border-width: 4px; border-color:#00FFFF;background:#000066;height:20px;font-size:12pt;width:180px">
                    <
option value="">All</option>
                    <
option value="<= 2">&le2</option>
                    <
option value="3 AND 5">3-5</option>
                    <
option value="6 AND 8">6-8</option>
                    <
option value="9 AND 11">9-11</option>
                    <
option value="> 11">&gt11</option>
                  </
select>
                </
div></td>
            </
tr
                    <
tr>
            <
td colspan="2" height="30px"><div align="center">
                  <
input type="submit" value="SEARCH" style="color:white;font-weight:bold;border-style: outset; border-width: 4px; border-color:#00FFFF;background:#000066;font-size:12pt;width:100px"/>
                <
br><br></div></td><!-- El atributo name del botón que envía los formularios tampoco es necesariopuesgeneralmenteno nos sirve de nada el contenido de este botón -->
        </
tr>
 
          </
table>
</
form
Y este es el que lo gestiona:

Código PHP:
<?php
    session_start
();
    include(
'config.php');
    
// dormitorios y aseos siempre tendrán un valor, pues en el form siempre valen, al menos "< 2"
    // por ende, esta comprobación es inútil:
    
if( isset( $_POST['habitaciones'] ) || isset( $_POST['aseos'] )  ) {
        
$a $_POST['habitaciones'];
        
$b $_POST['aseos'];
    }

    
$resultado mysql_select_db($db$conexion);
    if ( !
$resultado ) {
        echo 
"ERROR: Imposible seleccionar la base de datos $basedatos.<br>\n";
        
mysql_close$conexion );
        exit;
    }
    else {
        
$sql "SELECT * FROM recetas";
        if( !empty( 
$a ) && !empty( $b ) ) {
            
$sql .= " WHERE habitaciones ";
            if( 
preg_match'/^\d\s(\w)+\s\d$/i'$b ) ) { // Si coincide con 'NUMERO AND NUMERO'
                
$sql .= "BETWEEN $a";
            }
            else { 
// De lo contrario, el valor es <= 2 o >11
                
$sql .= "$a";
            }
            
            
$sql .= " AND aseos ";
            
            if( 
preg_match'/^\d\s(\w)+\s\d$/i'$b ) ) { // Si coincide con 'NUMERO AND NUMERO'
                
$sql .= "BETWEEN $b";
            }
            else { 
// De lo contrario, el valor es <= 2 o >11
                
$sql .= "$b";
            }
        }
        else if( !empty( 
$a ) && empty( $b ) ) {
            
$sql .= " WHERE habitaciones ";
            if( 
preg_match'/^\d\s(\w)+\s\d$/i'$a ) ) { // Si coincide con 'NUMERO AND NUMERO'
                
$sql .= "BETWEEN $a";
            }
            else { 
// De lo contrario, el valor es <= 2 o >11
                
$sql .= "$a";
            }
        }
        else if( empty( 
$a ) && !empty( $b ) ) {
            
$sql .= " WHERE aseos ";
            if( 
preg_match'/^\d\s(\w)+\s\d$/i'$b ) ) { // Si coincide con 'NUMERO AND NUMERO'
                
$sql .= "BETWEEN $b";
            }
            else { 
// De lo contrario, el valor es <= 2 o >11
                
$sql .= "$b";
            }
        }
        
        
$sql .= " ORDER BY id";
        echo 
'<p>Sentencia SQL: ' $sql '</p>'// Esta línea es innecesaria una vez que el código funcione.
        
$res mysql_query$sql$conexion );
        if( !
$res ) {
            echo 
"<p>ERROR: " mysql_error$conexion ) . "</p>";
        }
        else {
            echo
"<table align='center' border=2 cellpadding=10 bordercolor=gold>";
            echo
"<tr>
                <td>
                    <h3>REF</h3>
                </td>
                <td>
                    <h3>DORMITORIOS</h3>
                </td>
                <td>
                    <h3>ASEOS</h3>
                </td>
            "
;
                
                while( 
$fila mysql_fetch_array$resMYSQL_ASSOC ) ) {
                    echo 
"
                        <h3>
                            <tr>
                                <td>
                                    <h4>$fila[id]</h4>
                                </td>
                              
                                <td>
                                    <h4>$fila[habitaciones]</h4>
                                </td>
                                <td>
                                    <h4>$fila[aseos]</h4>
                                </td>
                            </tr>
                        </h3>"
;
                }
            echo 
"</table>";
        }
        
mysql_close$conexion );
    }
?>
Aqui vienen mis dudas, como se puede añadir una tercera variable de busqueda?

Y como añadirle el select que no es varible sino que es "fijo".

Un saludo
  #4 (permalink)  
Antiguo 22/10/2011, 08:43
 
Fecha de Ingreso: octubre-2011
Ubicación: USA
Mensajes: 166
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Busqueda por intervalos

en tu sonsulta agrega algo asi campo_tabla='$_REQUEST['nombre del select']'

Etiquetas: intervalos, mysql, sql, busquedas
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:21.