Tengo un buscador con un select donde me indica a través de qué campo buscar (titulo / isbn (estos dos últimos en una misma tabla) / autor (este último en otra tabla, común entre ellas ) y un input donde indicar la palabra a buscar en sí (xej => 'Jurassic Park')
El caso es que he intentado hacer la llamada de SELECT * from de mil maneras y he llegado a un punto en que sí que me hace búsquedas correctas, pero poniendo un título exacto a la BD dando igual que en el select esté en el buscar por título, isbn...
Os pongo el código del form y cómo estoy construyendo la recepción de variables.
Éste es el formulario :
Código PHP:
<form action="buscar_libros.php" method="post">
Buscar por:<br />
<select name="por_tipo">
<option value="titulo">Titulo</option>
<option value="isbn">ISBN</option>
<option value="autor">Autor</option>
</select>
<br />
Introduzca el nombre del libro:<br />
<input name="descripcion" type="text">
<br />
<input type="submit" name="submit" value="Buscar libro">
</form>
Código PHP:
<?php
//Creamos nombres cortos de las variables que manda
if (!isset($_POST['submit']))
die ('Debes rellenar los campos del formulario y clickar en el botón <b>Enviar</b>');
$por_tipo = (string)$_POST['por_tipo'];
$descripcion = (string)$_POST['descripcion'];
$descripcion = ltrim($descripcion);
$descripcion = rtrim($descripcion);
if (get_magic_quotes_gpc () == 0) {
$descripcion = addslashes($descripcion);
}
?>
<html>
<head>
<title>Librería UAZON - Resultados de búsquedas </title>
</head>
<body>
<h1>Librería UAZON - Resultados de búsqueda</h1>
<?php
// Función encargada de eliminar caracteres de escape de una fila-objeto.
function LimpiaResultados($objeto)
{
foreach ($objeto as $atributo => $valor)
if(is_string($objeto->$atributo) === true)
$objeto->$atributo = stripslashes($objeto->$atributo);
}
try
{
// Establecemos la conexión y seleccionamos la base de datos.
// El formato es servidor local => usuario => contraseña => base de datos
@ $db = mysqli_connect('.....', '....', '....', '....');
if (mysqli_connect_errno() != 0)
throw new Exception('Error conectando:' . mysqli_connect_error(), mysqli_connect_errno());
if ($db->errno != 0)
throw new Exception('Error seleccionando uazon_des:'. $db->error, $db->errno);
// Realizamos la consulta.
$consulta = " SELECT L.isbn, L.titulo, L.precio, A.nombre as autor" .
" FROM libros as L, autores as A, libros_autores as LA " .
" WHERE L.id = LA.fk_libros AND " .
" A.id = LA.fk_autores " .
" AND titulo='$descripcion' " .
" ORDER BY L.titulo";
$result = $db->query($consulta);
if ($db->errno != 0)
throw new Exception('Error realizando consulta:'.$consulta .' '. $db->error, $db->errno);
if ($result->num_rows > 0)
{
echo '<h2>Listado de libros</h2>';
echo '<table width="50%" border="1" cellspacing="1">';
echo'<tr>';
echo'<th scope="col">ISBN</th>';
echo'<th scope="col">TITULO</th>';
echo'<th scope="col">AUTOR</th>';
echo'<th scope="col">PRECIO</th>';
echo'</tr>';
// Obtenemos la fila actual en un objeto y
// desplazamos el cursor a la siguiente fila
while ($obj = $result->fetch_object())
{
LimpiaResultados($obj);
$obj->precio = (double)$obj->precio;
echo'<tr>';
echo'<td >'. $obj->isbn .'</td>';
echo '<td > '. $obj->titulo . '</td>';
echo'<td >'. $obj->autor . '</td>';
echo'<td >'. number_format($obj->precio,2) . ' €</td>';
echo'</tr>';
}
echo'</table>';
}
else
echo '<p>No hay libros dados de alta.</p>';
$result->free(); // Liberamos el resultado.
$db->close(); // Cerramos la conexión a la base de datos.
}
catch (Exception $e)
{
echo $e->getMessage();
if (mysqli_connect_errno() == 0)
$db->close();
exit();
}
?>

Muchas gracias por adelantado.