Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/11/2010, 14:34
Avatar de Xirant
Xirant
 
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 13 años, 5 meses
Puntos: 0
Buscador con select e input

Hola a todos, espero atinar con el sitio exacto del foro, ya que es parte Mysql y parte PHP (perdón por delante si me he equivocado de ubicación).

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
Y este el "buscar_libros.php"

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&oacute;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&iacute;a UAZON - Resultados de b&uacute;squedas </title>

    </head>

    <body>

        <h1>Librer&iacute;a UAZON - Resultados de b&uacute;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) . ' &euro;</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();
}
?>
He probado a poner if en por_tipo con valores que se apliquen y ponerlo en la consulta en sí, pero no atino

Muchas gracias por adelantado.