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: 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.
  #2 (permalink)  
Antiguo 23/11/2010, 14:53
Avatar de softmaster  
Fecha de Ingreso: diciembre-2008
Mensajes: 230
Antigüedad: 15 años, 4 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: 13 años, 5 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: 14 años, 2 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: 13 años, 5 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 06:57.