Foros del Web » Programando para Internet » PHP »

Búsqueda de coincidencias en base de datos

Estas en el tema de Búsqueda de coincidencias en base de datos en el foro de PHP en Foros del Web. Hola buenas tardes. Quisiera perdir ayuda en un tema que me trae de cabeza desde hace varias semanas, y no he logrado resolverlo del todo ...
  #1 (permalink)  
Antiguo 12/06/2009, 09:31
 
Fecha de Ingreso: octubre-2006
Mensajes: 18
Antigüedad: 17 años, 5 meses
Puntos: 0
Búsqueda de coincidencias en base de datos

Hola buenas tardes.
Quisiera perdir ayuda en un tema que me trae de cabeza desde hace varias semanas, y no he logrado resolverlo del todo pese a leer y leer en este foro, por google...probar cosas yo mismo sin tener mucho conocimiento...

El asunto es que estoy realizando un archivo .php que hace una busqueda en una base de datos y presenta los datos en una tabla, con sus respectivas columnas y todo eso, bonito y tal.

El asunto es que quiero que se pueda hacer la busqueda en base a varios criterios, en mi caso, sería para buscar alumnos en base a criterios como "curso", "nombre" ...etc

Evidentemente en la tabla de la base de datos tengo sus respectivos campos, e inserto datos a la base de datos con otro archivo .php, un formulario evidentemente.

Aquí os dejo el código que tengo de momento:

Archivo buscarpor.php:

Código PHP:
<html>
<
body>
<
center>
<
form method="POST" action="buscarpor2.php">
Curso:
<
select name="buscarcurso">
        <
option selected="selected">Cualquiera</option>
        <
option value="6ºPrim. C">6ºPrimC</option>
        <
option value="1ºESO A">1ºESO A</option>
        <
option value="1ºESO B">1ºESO B</option>
        <
option value="1ºESO C">1ºESO C</option>
        <
option value="2ºESO A">2ºESO A</option>
        <
option value="2ºESO B">2ºESO B</option>
        <
option value="2ºESO C">2ºESO C</option>
        <
option value="3ºESO A">3ºESO A</option>
        <
option value="3ºESO B">3ºESO B</option>
        <
option value="3ºESO C">3ºESO C</option>
        <
option value="4ºESO A">4ºESO A</option>
        <
option value="4ºESO B">4ºESO B</option>
        <
option value="4ºESO C">4ºESO C</option>
        <
option value="1ºBach. A">1ºBachA</option>
        <
option value="1ºBach. B">1ºBachB</option>
        <
option value="2ºBach. A">2ºBachA</option>
        <
option value="2ºBach. B">2ºBachB</option>
     </
select>
Gravedad:
     <
select name="buscargravedad">
        <
option selected="selected">Cualquiera</option>
        <
option value="Leve">Leve</option>
        <
option value="Grave">Grave</option>
        <
option value="Muy Grave">Muy Grave</option>
     </
select>
     
Día:
     <
select name="dia">
        <
option selected="selected">Cualquiera</option>
        <
option value="1">1</option>
        <
option value="2">2</option>
        <
option value="3">3</option>
        <
option value="4">4</option>
        <
option value="5">5</option>
        <
option value="6">6</option>
        <
option value="7">7</option>
        <
option value="8">8</option>
        <
option value="9">9</option>
        <
option value="10">10</option>
        <
option value="11">11</option>
        <
option value="12">12</option>
        <
option value="12">13</option>
        <
option value="12">14</option>
        <
option value="12">15</option>
        <
option value="12">16</option>
        <
option value="12">17</option>
        <
option value="12">18</option>
        <
option value="12">19</option>
        <
option value="12">20</option>
        <
option value="12">21</option>
        <
option value="12">22</option>
        <
option value="12">23</option>
        <
option value="12">24</option>
        <
option value="12">25</option>
        <
option value="12">26</option>
        <
option value="12">27</option>
        <
option value="12">28</option>
        <
option value="12">29</option>
        <
option value="12">30</option>
        <
option value="12">31</option>
     </
select>
Mes:
     <
select name="mes">
        <
option selected="selected">Cualquiera</option>
        <
option value="1">1</option>
        <
option value="2">2</option>
        <
option value="3">3</option>
        <
option value="4">4</option>
        <
option value="5">5</option>
        <
option value="6">6</option>
        <
option value="7">7</option>
        <
option value="8">8</option>
        <
option value="9">9</option>
        <
option value="10">10</option>
        <
option value="11">11</option>
        <
option value="12">12</option>
     </
select>
Año:
     <
select name="ano">
        <
option selected="selected">Cualquiera</option>
        <
option value="2009">2009</option>
        <
option value="2010">2010</option>
        <
option value="2011">2011</option>
        <
option value="2012">2012</option>
        <
option value="2013">2013</option>
        <
option value="2014">2014</option>
        <
option value="2015">2015</option>
        <
option value="2016">2016</option>
        <
option value="2017">2017</option>
        <
option value="2018">2018</option>
        <
option value="2019">2019</option>
        <
option value="2020">2020</option>
     </
select>
Nombre y apellidos:
<
input type="text" name="alumno" size="40">
<
br>
<
center>
<
input type="submit" name="submit" value="Buscar" />
</
center>
</
center>
</
form>
</
center>
</
body>
</
html
Este archivito, gracias a su form, me lleva a un segundo archivo donde se realiza la consula, llamado buscarpor2.php:

Código PHP:
<title>Búsqueda de incidencias</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="../_estilos.css" rel="stylesheet" type="text/css" />

<br>
<table width="1612" border="1" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td colspan="12"><?php include("../header2.php");?></td>
    </tr>
  <tr class="negrita">
       <td><a href="../panel.html"><font size="5"><b>->INICIO</b></font></a></td>
       <td><a href="addsrv.php"><font size="5"><b>->Añadir incidencia</b></font></a></td>
    </tr>
 <tr>
    <th>Alumno</th>
    <th>Curso</th>
    <th>Infracción</th>
    <th>Sanción</th>
    <th>Gravedad</th>
    <th>Días expulsión</th>
    <th>¿Sanción Cumplida?</th>
    <th>P.Informante</th>
    <th>Fecha</th>
    <th>Última modificación</th>
</tr>
<?php 
 
include("../_config.php");
 
$resultado=mysql_query("SELECT * FROM $dbsrv WHERE alumno LIKE '%$alumno%'",$ofp);
 while(
$row=mysql_fetch_array($resultado)){
?>
     <tr>
    <td width="68"><b><?php  echo $row['alumno']; ?></b></td>
    <td width="68"><b><?php  echo $row['curso']; ?></b></td>
    <td width="31"><b><?php  echo $row['acto']; ?></b></td>
    <td width="31"><b><?php  echo $row['castigo']; ?></b></td>
    <td width="31"><b><?php  echo $row['gravedad']; ?></b></td>
    <td width="31"><b><?php  echo $row['expulsar']; ?></b></td>
    <td width="31"><b><?php  echo $row['cumplido']; ?></b></td>
    <td width="31"><b><?php  echo $row['profesor']; ?></b></td>
    <td width="31"><b><?php  echo $row['dia']; ?>-<?php  echo $row['mes']; ?>-<?php  echo $row['ano'] ;?></b></td>
    <td width="31"><b><?php  echo $row['diam']; ?>-<?php  echo $row['mesm']; ?>-<?php  echo $row['anom'] ;?></b></td>
   <td><a href="modsrv.php?key=<?php printf($row["id"]);?>">Modificar</a></td>
   <td><a href="delsrv.php?key=<?php printf($row["id"]);?>">Eliminar</a></td>
</tr>
<?php mysql_close($ofp);?>
</table>
El asunto es que en la consulta de "Selected" a la base de datos, no se que hacer para que me tenga en cuenta los demás campos de búsqueda de "buscarpor.php" y que busque resultados coincidentes sólo con lo que el usuario quiera.

Es decir, si pones curso 2ºESO B y nombre Pepito, que solo te salgan los resultados con nombre de Pepito en 2ºESO B, no los resultados de todo 2ºESO B y los resultados de todos los Pepitos xDDDD, espero haberme explicado bien.

Espero vuestra ayuda :P Confío en vosotros :D

Saludos y gracias de antemano, espero que sea fácil y no daros mucha guerra con el asunto :P
  #2 (permalink)  
Antiguo 12/06/2009, 09:40
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Búsqueda de coincidencias en base de datos

La query string debe ser formada dinámicamente a partir de los filtros de búsqueda que te lleguen.

Ejemplo ficticio:

Código PHP:
$alumno $_REQUEST['alumno'];
$curso $_REQUEST['curso'];

$filtros_where = array();

if(
$alumno)
    
$filtros_where[] = "alumno = '".$alumno."'";
    
if(
$curso)    
    
$filtros_where[] = "curso = '".$curso."'";
    
if(
$filtros_where && is_array($filtros_where))    
    
$cadena_where "WHERE ".implode(" AND "$filtros_where);
    
$query "SELECT * FROM tabla_cursos ".$cadena_where;

// etc... etc... etc... 
PD: El código anterior no esta probado, es solo orientativo.

Saludos!
  #3 (permalink)  
Antiguo 12/06/2009, 09:48
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Búsqueda de coincidencias en base de datos

Ampliación al anterior mensaje.

Con el código propuesto consigues lo siguiente:

CASO A: Solo recibes la variable alumno.
La query formada dinámicamente será...

SELECT * FROM tabla_cursos WHERE alumno = 'foo'
CASO B: Solo recibes la variable curso.
La query formada dinámicamente será...

SELECT * FROM tabla_cursos WHERE curso = 'foo'
CASO C: Recibes ambas variables
La query formada dinámicamente será...

SELECT * FROM tabla_cursos WHERE alumno = 'foo' AND curso = 'bar'
Saludos!
  #4 (permalink)  
Antiguo 13/06/2009, 16:15
 
Fecha de Ingreso: octubre-2006
Mensajes: 18
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Búsqueda de coincidencias en base de datos

Pfff esto me supera, podrías indicarme como puedo hacerlo un poco más a lo novato?

Es que entre que no manejo mucho y que como me dices no sabes si ese codigo funciona 100% tengo un lio tremendo jaja.

Bueno mientras tanto seguiré probando a ver si consigo hacer algo(aunque como parte del codigo no lo entiendo pues voy jodio, pero bueno existe san google jaja)


Muchas gracias por tus respuestas :D!!
  #5 (permalink)  
Antiguo 14/06/2009, 08:16
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Búsqueda de coincidencias en base de datos

Este método ya lo he usado en otras implementaciones, cuando me referia a que el código no estaba probado me refería al que te puse de ejemplo, ya que lo escribí basandome en tu código de ejemplo.

De todas formas te animo a que vuelvas a leer el código que te puse e intentes entenderlo ya que no posee un grado de complejidad extrema, cualquiera que sepa que es un IF o manejar las funciones de PHP puede llegar a entenderlo.

Para aprender a usar las funciones de PHP te recomiendo que recurras a la web oficial de PHP y en su buscador escribas la función que buscas.

http://www.php.net
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 08:17.