Foros del Web » Programando para Internet » PHP »

Buscador con select e input

Estas en el tema de Buscador con select e input en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 23/11/2010, 14:34
Avatar de Xirant  
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 15 años, 11 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.
  #2 (permalink)  
Antiguo 23/11/2010, 14:53
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 17 años, 10 meses
Puntos: 12
Respuesta: Buscador con select e input

Hola fijate armar el select usando like...

ejemplo:

Código PHP:
select * from tabla where titulo like '%".$por_tipo."%' 
ese like lo que hace es mostrarte todos los registros de tu "tabla" donde aparece la variable $por_tipo recibida del form
  #3 (permalink)  
Antiguo 24/11/2010, 06:24
Avatar de Xirant  
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Buscador con select e input

Ok, he probado con like y funciona lo que es poner el nombre de un título, por ejemplo, y que salga ese libro, pero me pasa que si en el select ('$por_tipo') pongo que busque por isbn y en el input pongo el nombre del libro, sale el libro de la misma forma.

Este es el código de la llamada a la db =>

Código PHP:
    $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 LIKE '$descripcion' " .
                
" ORDER BY L.titulo"; 
Si no me equivoco, doy por hecho que lo que tengo que conseguir es que ese "AND titulo LIKE ... cargue el valor que tome en el select :S
  #4 (permalink)  
Antiguo 24/11/2010, 10:11
 
Fecha de Ingreso: febrero-2010
Mensajes: 818
Antigüedad: 16 años, 8 meses
Puntos: 55
Respuesta: Buscador con select e input

algo asi ??

Código PHP:
<?php
            $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 "
;
                
            if(
$_POST['por_tipo']=='titulo'){
                
$consulta .= " AND titulo LIKE '%". $_POST['descripcion'] ."%'"
            
}
            if(
$_POST['por_tipo']=='isbn'){
                
$consulta .= " AND isbn LIKE '%". $_POST['descripcion'] ."%'"
            
}
            if(
$_POST['por_tipo']=='autor'){
                
$consulta .= " AND autor LIKE '%". $_POST['descripcion'] ."%'"
            
}                        
            
$consulta .= " ORDER BY L.titulo";  

// o

$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 "
. $_POST['por_tipo'] ." LIKE '%". $_POST['descripcion'] ."%'";
?>

Última edición por Death_Empire; 24/11/2010 a las 11:47
  #5 (permalink)  
Antiguo 26/11/2010, 15:57
Avatar de Xirant  
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Buscador con select e input

Muchas gracias, Death! La idea es muy buena!

Al final lo he solucionado con un switch - case para añadir un LIKE ANd... según el valor de $por_tipo, pero, vaya, muy-muy parecido a cómo lo has puesto tú :o)

Muchas gracias!

Etiquetas: input, select, buscadores
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 22:18.