Duda sobre formulario de búsqueda utilizando php y mysql

Te explico lo que quiero hacer, tengo un formulario de búsqueda avanzada con tres select y dos campos de textos, envío el formulario a otra página en php para que ejecute y me muestre los datos según los criterios elegidos en el formulario, ¿debo usar el LIKE? Y en los campos de texto uno es precio desde y el otro precio hasta y no se que parámetro utilizar.
1

1 respuesta

Respuesta
1
si el texto a buscar es completo puedes usar =
Pero si quieres buscar cadenas que contengan ese trozo de texto, entonces en efecto, debes usar LIKE:
WHERE campo1 LIKE '%$texto%'
Para el caso de una cantidad entre dos límites puedes usar BETWEEN:
WHERE campo2 BETWEEN $desde AND $hasta
Buenos días, gracias por tu rápida respuesta, ¿los datos del formulario los puedo recoger en variables?, por ejemplo
$campo1 = $_POST['campo1']
$campo2 = $_POST['campo2']
"select * from tabla WHERE campo1 LIKE '%$campo2%' AND campo2 LIKE '%campo2'";
Gracias.
Puedes hacerlo, aunque tan válido es:
"select * from tabla WHERE campo1 LIKE '%$campo1%' AND campo2 LIKE '%$campo2'";
como:
"select * from tabla WHERE campo1 LIKE '%$_POST[campo1]%' AND campo2 LIKE '%$_POST[campo2]%'";
Hola de nuevo, he probado pero no me da ningún resultado, lo he hecho de las dos formas, incluso en el archivo php en los LIKE le puse las palabras exactas y poniendo lo del BETWEEN y no me daba ningún dato, si le quitaba el BETWEEN si me daba resultados, te escribo como tengo el código:
<?php
$conexion = mysql_connect("localhost","?????","?????");
mysql_select_db(?????);
$tabla = mysql_query ("SELECT * FROM Inmuebles WHERE operacion LIKE '%$_POST[operacion]%' AND provincia LIKE '%$_POST[provincia]%' AND ciudad LIKE '%$_POST[ciudad]%' AND precio BETWEEN '%preciodesde%' AND '%preciohasta%' ORDER BY precio");
while ($registro = mysql_fetch_array($tabla)) {
?>
<tr>
<td><?php echo $registro['ciudad']; ?></td>
<td><?php echo $registro['tipoinmueble']; ?></td>
<td><?php echo $registro['descripcion']; ?></td>
<td><?php echo $registro['precio']; ?></td>
</tr>
<?php
}
mysql_free_result($tabla);
mysql_close($conexion);
?>
<div>No se si tendré alguna coma de más o algo, muchas gracias.</div>
Lo que ocurre es que lo que pones en BETWEEN es incorrecto. Deberían ser dos cantidades según me dijiste y ahora tiene un texto. Suponiendo que tengas las cantidades en dos variables sería:
BETWEEN $preciodesde AND $preciohasta
Aquí no hay que poner % puesto que no estamos usando LIKE, y las variables deben empezar todas con el signo $.
No me funciona, no se si tendré algo mal, lo tengo así, gracias
<?php
$operacion = $_POST['operacion'];
$tipoinmueble = $_POST['tipoinmueble'];
$provincia = $_POST['provincia'];
$ciudad = $_POST['ciudad'];
$preciodesde = $_POST['preciodesde'];
$preciohasta = $_POST['preciohasta'];
$conexion = mysql_connect("localhost","sopor_inmo","suarez");
mysql_select_db(soporte_olympia);
$tabla = mysql_query ("SELECT * FROM Inmuebles WHERE operacion LIKE '%$operacion%' AND tipoinmueble LIKE '%$tipoinmueble%' AND provincia LIKE '%$provincia%' AND ciudad LIKE '%$ciudad%' BETWEEN $preciodesde AND $preciohasta ORDER BY precio");
while ($registro = mysql_fetch_array($tabla)) {
?>
<tr>
<span style="white-space: pre;"> </span>
<td rowspan="2"><a href="ficha2.php?id=<?php echo $registro['id']; ?>"><img src="<?php echo 'fotos/' .$registro['foto1'];?>" border="0" width="100"></td>
<td><span class="Estilo1">OPERACIÃ"N</span></td>
<td class="Estilo1">DESCRIPCIÃ"N</td>
<td class="Estilo1">CIUDAD</td>
<td colspan="2" class="Estilo1">PRECIO</td>
</tr>
<tr>
<td><?php echo $registro['operacion']; ?></td>
<td><?php echo $registro['descripcion']; ?></td>
<td><?php echo $registro['ciudad']; ?></td>
<span style="white-space: pre;"> </span>
<td><?php echo $registro['precio']; ?></td>
<span style="white-space: pre;"> </span>
</tr>
<?php
}
mysql_free_result($tabla);
mysql_close($conexion);
?>
Lo que está mal ahora es que no le dices qué campo ha de estar entre preciodesde y preciohasta. Supongo que es el campo precio, así que la sentencia quedaría:
$tabla = mysql_query ("SELECT * FROM Inmuebles WHERE operacion LIKE '%$operacion%' AND tipoinmueble LIKE '%$tipoinmueble%' AND provincia LIKE '%$provincia%' AND ciudad LIKE '%$ciudad%' AND precio BETWEEN $preciodesde AND $preciohasta ORDER BY precio");
Sólo te quiero mencionar que las comparaciones que estás haciendo con LIKE no son exactas. Así que obtendrás todos los resultados que pides en los que $ciudad esté contenido en su nombre. Así que si alguien pone 'Pinto' aparecerán los resultados de Pinto pero también los de 'Cañada de Río Pinto' y los de 'Pintomar'.
Ok, lo puse con = y me faltaban las comillas (operacion='$operacion'), y en las variables del BETWEEN también, ya lo tengo solucionado gracias a su ayuda, me ha sido de muchísima utilidad, gracias de nuevo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas