Foros del Web » Programando para Internet » PHP »

problema al hacer un filtrado

Estas en el tema de problema al hacer un filtrado en el foro de PHP en Foros del Web. hola tengo un problema y necesito hacer un filtrado individual de cada campo del formulario ej: si solo se escribe nombre que haga la busqueda ...
  #1 (permalink)  
Antiguo 30/10/2011, 08:45
Avatar de ahaugas  
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 249
Antigüedad: 12 años, 8 meses
Puntos: 21
Pregunta problema al hacer un filtrado

hola tengo un problema y necesito hacer un filtrado individual de cada campo del formulario ej: si solo se escribe nombre que haga la busqueda con solo el nombre, si lo busca con genero que solo busque genero, si busca año que solo busque año o las tres a la vez o las dos

este es el script
Código PHP:
<?php 
//Este script es OpenSource, desarrollado por VideoCacao
//METODO A USAR: http://www.misitio.com/datos.php?pelicula=Virtuosity&genero=ciencia-ficcion&año=2011&enviar=enviar
//Configuracion de conexion y datos del servidor
require_once("config.php");
//Aqui decimos que no muestre errores
error_reporting(0);
//Aqui decimos que busque por nombre, genero y año
if(isset($_POST['pelicula'])){
        
$sql "SELECT * FROM Peliculas WHERE Nombre='".$_POST['pelicula']."'";
    } 
else if(isset(
$_POST['genero'])){
        
$sql "SELECT * FROM Peliculas WHERE Genero='".$_POST['genero']."'";
    } else {
        
$sql "SELECT * FROM Peliculas WHERE 1=1";
    }
if(isset(
$_POST['anio'])){
        
$sql .= " AND Anio='".$_POST['anio']."'";
    }
$query mysql_query($sql) or die(mysql_error());
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="es-ES">

    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Filtrado de datos - php y mysql</title>
<style type="text/css">
#form {
    border:1px solid #990000;
    width:450px;
    margin:auto;
}
#form legend{
    font-weight:bold;
    font-size:12px;
}
#form ol{
    list-style:none;
}
#form ol li{
    padding-bottom:5px;
}
#form ol li label{
    width:120px;
    float:left;
    text-align:left;
}
#form input[type=text] {
    border:1px solid #CCCCCC;
}
#form input.btn {
    padding:3px;
    color:#FFFFFF;
    background-color:#990000;
    border:1px solid #000000;
}
</style>
        </head>
        <body>
<!-- Aqui empieza el formulario de filtrado -->
    <form name="frm" method="post" action="<?php echo $_SERVER['PHP_SELF'?>">
        <fieldset id="form">
            <legend>Filtrado de peliculas</legend>
                <ol>
                        <li><label>Película</label><input type="text" name="pelicula" id="pelicula" /></li>
                    <li><label>Género</label>
                    <select id="genero" name="genero">
                    <option value="1">Accion</option>
                    <option value="2">Ciencia-Ficcion</option></select></li>
                    <li><label>Año</label>
                    <select id="anio" name="anio">
                    <option value="2000">2000</option>
                    <option value="2001">2001</option>
                    <option value="2002">2002</option>
                    <option value="2003">2003</option>
                    <option value="2004">2004</option>
                    <option value="2005">2005</option>
                    <option value="2006">2006</option>
                    <option value="2007">2007</option>
                    <option value="2008">2008</option>
                    <option value="2009">2009</option>
                    <option value="2010">2010</option>
                    <option value="2011">2011</option>
</select></li>
                </ul>
                                    <p align="center"><input type="submit" name="enviar" id="enviar" value="Enviar" /></p>
        </fieldset>
    </form> 
<!-- Aqui termina el formulario de filtrado -->
<p align="center">
<!-- Mostramos los datos obtenidos -->
<table border="1" cellspacing="0" align="center">
  <thead>
    <tr>
      <th>Nombre</th>
      <th>Genero</th>
      <th>Año</th>
    </tr>
  </thead>
<?php while($datos mysql_fetch_assoc($query)) { ?>
<tbody>
    <tr>
      <td><?php echo $datos['Nombre']; ?></td>
      <td><?php echo $datos['Genero']; ?></td>
      <td><?php echo $datos['Anio']; ?></td>
    </tr>
  </tbody>
<?php ?>
</table>
<!-- Mostramos los datos obtenidos y cerramos -->
</p>
</body>
</html>

Última edición por ahaugas; 30/10/2011 a las 08:46 Razón: codigo mal escrito
  #2 (permalink)  
Antiguo 30/10/2011, 08:52
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: problema al hacer un filtrado

Toma tu consulta:
Código MySQL:
Ver original
  1. SELECT * FROM Peliculas WHERE 1=1
Y luego ve haciendo ifs independientes para que vayan agregando los parametros a la busqueda.

Código PHP:
Ver original
  1. if(!empty($_POST['genero'])) {
  2.   $consulta .= " genero = '{$_POST['genero']}'";
  3. }
  4. if(!empty($_POST['blahblah'])) {
  5.   $consulta .= " blahblah = '{$_POST['blahblah']}'";
  6. }
  7. //etc
  8. //y ejecuta tu consulta
  #3 (permalink)  
Antiguo 30/10/2011, 09:35
Avatar de ahaugas  
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 249
Antigüedad: 12 años, 8 meses
Puntos: 21
Respuesta: problema al hacer un filtrado

gracias por la respuesta pero pongo ifempty y solo me busca en genero
no se mucho de php por decir nada pero mas o menos con ayuda puedo hacer algo
me puedes hechar una mano aver lo que falla?

Código PHP:
if(isset($_POST['pelicula'])){
        
$sql "SELECT * FROM Peliculas WHERE Nombre= '{$_POST['genero']}'";
    } 
if(!empty(
$_POST['genero'])) {
          
$sql " SELECT * FROM Peliculas WHERE Genero= '{$_POST['genero']}'";
} else {
        
$sql "SELECT * FROM Peliculas WHERE 1=1";
    }
if(isset(
$_POST['año'])){
        
$sql .= " AND Anio='".$_POST['anio']."'";
    }
$query mysql_query($sql) or die(mysql_error()); 
  #4 (permalink)  
Antiguo 30/10/2011, 10:01
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: problema al hacer un filtrado

Tu código sigue igual, no lo hiciste como te mostré.
  #5 (permalink)  
Antiguo 30/10/2011, 10:07
Avatar de ahaugas  
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 249
Antigüedad: 12 años, 8 meses
Puntos: 21
Pregunta Respuesta: problema al hacer un filtrado

en la forma exacta que me dices me da esto
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Genero= 'Ciencia-Ficcion'' at line 1

pero asi no hace nada de nada

Código PHP:
Ver original
  1. if(!empty($_POST['pelicula'])){
  2.         $sql = "SELECT * FROM Peliculas WHERE Nombre= '{$_POST['genero']}'";
  3.     }
  4. if(!empty($_POST['genero'])) {
  5.         $sql = " SELECT * FROM Peliculas WHERE Genero= '{$_POST['genero']}'";
  6.     }
  7.         $sql = "SELECT * FROM Peliculas WHERE 1=1";
  8.    
  9. $query = mysql_query($sql) or die(mysql_error());
  #6 (permalink)  
Antiguo 30/10/2011, 10:16
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: problema al hacer un filtrado

Código PHP:
Ver original
  1. <?php
  2.  
  3. $sql = "SELECT * FROM Peliculas WHERE 1=1";
  4.  
  5. if(!empty($_POST['pelicula'])){
  6.     $sql .= " AND Nombre = '{$_POST['pelicula']}'";
  7. }
  8. if(!empty($_POST['genero'])){
  9.     $sql .= " AND Genero = '{$_POST['genero']}'";
  10. }
  #7 (permalink)  
Antiguo 30/10/2011, 10:26
Avatar de ahaugas  
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 249
Antigüedad: 12 años, 8 meses
Puntos: 21
Respuesta: problema al hacer un filtrado

perdona pero no quiero causar molestias pero de esta forma lo he hecho y solo me saca datos de genero pero no de nombre de pelicula, yo no tengo mucha idea de php y agradezco tu tiempo pero esque ya no se que hacer por que solo me funciona una cosa y no las dos y lo necesito

muchas gracias por ayudar

Cita:
Iniciado por Ronruby Ver Mensaje
Código PHP:
Ver original
  1. <?php
  2.  
  3. $sql = "SELECT * FROM Peliculas WHERE 1=1";
  4.  
  5. if(!empty($_POST['pelicula'])){
  6.     $sql .= " AND Nombre = '{$_POST['pelicula']}'";
  7. }
  8. if(!empty($_POST['genero'])){
  9.     $sql .= " AND Genero = '{$_POST['genero']}'";
  10. }
el nombre de pelicula como si no estuviera en el formulario se lo salta y sale en blanco
  #8 (permalink)  
Antiguo 30/10/2011, 10:34
Avatar de ahaugas  
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 249
Antigüedad: 12 años, 8 meses
Puntos: 21
Respuesta: problema al hacer un filtrado

gracias muchas gracias, ya está solucionado este es el code bueno para individual y en grupo

Código PHP:
Ver original
  1. <?php
  2.  
  3. $sql = "SELECT * FROM Peliculas WHERE 1=1";
  4.  
  5. if(!empty($_POST['pelicula'])){
  6.     $sql .= " AND Nombre = '{$_POST['pelicula']}'";
  7. }
  8. elseif(!empty($_POST['genero'])){
  9.     $sql .= " AND Genero = '{$_POST['genero']}'";
  10. }

el
Código PHP:
Ver original
  1. eslseif
era el que no nos hemos fijado
gracias por todo
  #9 (permalink)  
Antiguo 30/10/2011, 10:39
Avatar de ahaugas  
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 249
Antigüedad: 12 años, 8 meses
Puntos: 21
Solucionado muestro el script completo: problema al hacer un filtrado

aqui dejo el codigo completo funcionando al 100%

Código PHP:
Ver original
  1. <?php
  2. //Este script es OpenSource, desarrollado por VideoCacao
  3. //METODO A USAR con GET: http://www.misitio.com/datos.php?pelicula=Virtuosity&genero=ciencia-ficcion&año=2011&enviar=enviar
  4. //Configuracion de conexion y datos del servidor
  5. require_once("config.php");
  6. //Aqui decimos que no muestre errores
  7. //Aqui decimos que busque por nombre, genero y año
  8.        
  9. $sql = "SELECT * FROM Peliculas WHERE 1=1";
  10.  
  11. if(!empty($_POST['pelicula'])){
  12.     $sql .= " AND Nombre = '{$_POST['pelicula']}'";
  13. }
  14. elseif(!empty($_POST['genero'])){
  15.     $sql .= " AND Genero = '{$_POST['genero']}'";
  16. }  
  17. $query = mysql_query($sql) or die(mysql_error());
  18. ?>
  19. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  20. <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="es-ES">
  21.  
  22.     <head>
  23.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  24.         <title>Filtrado de datos - php y mysql</title>
  25. <style type="text/css">
  26. #form {
  27.     border:1px solid #990000;
  28.     width:450px;
  29.     margin:auto;
  30. }
  31. #form legend{
  32.     font-weight:bold;
  33.     font-size:12px;
  34. }
  35. #form ol{
  36.     list-style:none;
  37. }
  38. #form ol li{
  39.     padding-bottom:5px;
  40. }
  41. #form ol li label{
  42.     width:120px;
  43.     float:left;
  44.     text-align:left;
  45. }
  46. #form input[type=text] {
  47.     border:1px solid #CCCCCC;
  48. }
  49. #form input.btn {
  50.     padding:3px;
  51.     color:#FFFFFF;
  52.     background-color:#990000;
  53.     border:1px solid #000000;
  54. }
  55. </style>
  56.         </head>
  57.         <body>
  58. <!-- Aqui empieza el formulario de filtrado -->
  59.     <form name="frm" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
  60.         <fieldset id="form">
  61.             <legend>Filtrado de peliculas <?php echo $hosdom; ?></legend>
  62.                 <ol>
  63.                         <li><label>Película</label><input type="text" name="pelicula" id="pelicula" /></li>
  64.                     <li><label>Género</label>
  65.                     <select id="genero" name="genero">
  66.                     <option value="Accion">Accion</option>
  67.                     <option value="Ciencia-Ficcion">Ciencia-Ficcion</option></select></li>
  68.                     <li><label>Año</label>
  69.                     <select id="anio" name="anio">
  70.                     <option value="2000">2000</option>
  71.                     <option value="2001">2001</option>
  72.                     <option value="2002">2002</option>
  73.                     <option value="2003">2003</option>
  74.                     <option value="2004">2004</option>
  75.                     <option value="2005">2005</option>
  76.                     <option value="2006">2006</option>
  77.                     <option value="2007">2007</option>
  78.                     <option value="2008">2008</option>
  79.                     <option value="2009">2009</option>
  80.                     <option value="2010">2010</option>
  81.                     <option value="2011">2011</option>
  82. </select></li>
  83.                 </ul>
  84.                                     <p align="center"><input type="submit" name="enviar" id="enviar" value="Enviar" /></p>
  85.         </fieldset>
  86.     </form>
  87. <!-- Aqui termina el formulario de filtrado -->
  88. <p align="center">
  89. <!-- Mostramos los datos obtenidos -->
  90. <table border="1" cellspacing="0" align="center">
  91.   <thead>
  92.     <tr>
  93.       <th>Nombre</th>
  94.       <th>Genero</th>
  95.       <th>Año</th>
  96.     </tr>
  97.   </thead>
  98. <?php while($datos = mysql_fetch_assoc($query)) { ?>
  99. <tbody>
  100.     <tr>
  101.       <td><?php echo $datos['Nombre']; ?></td>
  102.       <td><?php echo $datos['Genero']; ?></td>
  103.       <td><?php echo $datos['Anio']; ?></td>
  104.     </tr>
  105.   </tbody>
  106. <?php } ?>
  107. </table>
  108. <!-- Mostramos los datos obtenidos y cerramos -->
  109. </p>
  110. </body>
  111. </html>

Etiquetas: formulario, html, mysql, sql, filtros
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 04:35.