Hacer conulta a sql con php usando 3 criterios

Onan

Lanero Reconocido
Se unió
28 Ene 2008
Mensajes
129
Buenos días, quiero hacer una consulta a una base de datos con php.
Pero estoy perdido en punto. La busqueda la hago con 3 criterios: Finca, Sector y Lote.

Puede pasar 4 casos:
Que Finca, Sector y Lote= Esten vacios, resultado seria todo el contenido de la tabla
Que Finca, Sector y Lote= Esten llenos
Que Finca, Sector= Llenos --> Lote= Vacio
Que Finca= Lleno --> Sector y Lote= Vacios.

Esos serían los unicos casos en los que se podria realizar una busqueda. Los datos consultados son todos numericos y son exactos.

Formulario:
HTML:
<form action="consulta3.php" method="POST" name="formulario_consulta">
        <label>Finca:</label><input type="number" name="finca" value="145" maxlength="4"/>
        <label>Sector:</label><input type="number" name="sector" value="3" maxlength="4"/>
        <label>Lote:</label><input type="number" name="lote" value="1" maxlength="4"/>
        <input type="submit" value="Buscar"/>


Consulta:
PHP:
<?php
$finca = $_POST['finca'];
$sector = $_POST['sector'];
$lote = $_POST['lote'];

$sql=mysql_query("SELECT * FROM madurante WHERE ");
if( ! empty( $finca ) && ! empty( $sector ) && ! empty( $lote ) {
$sql .= "MATCH (funcion) AGAINST ('$finca') AND (sector) LIKE ('$sector') AND (lote) LIKE ('$lote') "; }
 
else if( ! empty( $finca ) && ! empty( $sector ) && empty( $lote ) ) { 
$sql .= "MATCH (funcion) AGAINST ('$finca') AND (sector) LIKE ('$sector') ";
}

else if( ! empty( $finca ) && empty( $sector ) && empty( $lote ) ) { 
$sql .= " finca='$finca' "; 
}

?>
<div class="contenido">
<table style="width:400px;">
    <tr style="background:#9BB;">
        <td>Finca</td>
        <td>Sector</td>
        <td>Lote</td>
        <td>Fecha</td>
    </tr>
</div>   
<?php
  while($row = mysql_fetch_array($sql)){
    echo "<tr>";
      echo "<td>".$row['finca']."</td>";
    echo "<td>".$row['sector']."</td>";
      echo "<td>".$row['lote']."</td>";
      echo "<td>".$row['fechapli']."</td>";
      echo "</tr>";
  }
?>


Agradecería un poco de ayuda en este punto, que no se que hacer. De antemano gracias.
 

BlackMan83

Lanero Reconocido
Se unió
30 Sep 2013
Mensajes
382
Hola:

Yo cambiaría la primera parte del bloque de php por lo siguiente:

Código:
<?php
$finca = $_POST['finca'];
$sector = $_POST['sector'];
$lote = $_POST['lote'];

$sql = mysql_query("SELECT * FROM madurante WHERE 1 = 1");

if( !empty( $finca ) ) {
    $sql .= " AND funcion LIKE '$finca'";
}

if( !empty( $sector ) ) {
    $sql .= " AND sector LIKE '$sector'";
}

if( !empty( $lote ) ) {
    $sql .= " AND lote LIKE '$lote'";
}
?>

Con esto, si viene el parámetro lo pone para la consulta.

Como sugerencia adicional, debes manejar el sql inyection en tu consulta.

Ojala te sirva.
 

Onan

Lanero Reconocido
Se unió
28 Ene 2008
Mensajes
129
Buenoa días BlackMan83

Gracias por tu tiempo en ayudarme. El codigo que me sugieres finciona en el caso que ninguno de los criterios tienen contenido, en cuando al guno de ellos se le agrega un contenido, deja de funcionar.

Pero dejeme decirle que me gusta la logica de su consulta.
 

Sith_Rampage

Sith Lord
Se unió
16 Feb 2009
Mensajes
1,759
La solución del compañero BlackMan esta bien, solo faltó acomodar un pequeño detalle... Y tal como lo dice el hombre, debes mirar lo de sql injection y si los datos son exactos, no usar "LIKE" sino "=".

PHP:
<?php
$finca = $_POST['finca'];
$sector = $_POST['sector'];
$lote = $_POST['lote'];

$sql = "SELECT * FROM madurante WHERE 1 = 1";

if( !empty( $finca ) ) {
    $sql .= " AND funcion LIKE '$finca'";
}

if( !empty( $sector ) ) {
    $sql .= " AND sector LIKE '$sector'";
}

if( !empty( $lote ) ) {
    $sql .= " AND lote LIKE '$lote'";
}

$resultado = mysql_query($sql);
?>
 

Onan

Lanero Reconocido
Se unió
28 Ene 2008
Mensajes
129
Gracias por la ayuda...

Pero no se si mi inexperiencia es la que causa que siga sin funcionar el codigo.
 
Arriba