Buscador PHP
Estoy haciendo una pequeña web con PHP y mySQL y ahora me he metido a hacer un buscador BOOLEANO para ella. A la hora de hacerlo creé en las tablas de la base de datos unos índices FULLTEXT para que la sentencia SQL para la búsqueda sea:
SELECT * FROM tabla_bbdd WHERE MATCH(campoindice1,campoindice2) AGAINST ('$lo_que_busca_el_usuario IN BOOLEAN MODE')
Esa instrucción la empleo para todas las tablas, 5 en total. Mi problema es que puse unos if y elseif para que dependiendo de la sección escogida en el formulario de búsqueda y pasada GET por la URL, se buscase en una u otra tabla de la base de datos. Este problema es que sólo me realiza la búsqueda en la tabla que está en el primer if, tabla trucos, y en las otras pues no busca nada.
A continuación te remito el código para que veas lo que te digo, y para que me digas que errores hay, y además si tienes alguna opción para mejorar el código, me lo dijeses. Paso por URL las variables $seccion y $que, que es lo que se ha introducido en el campo de texto del formulario.
**********************************
formulario de búsqueda (index2.php)
<?php
$secciones['articulos'] = "Articulos";
$secciones['downloads'] = "Downloads";
$secciones['taller'] = "Taller";
$secciones['trucos'] = "Trucos S.O.";
$secciones['trucosjuegos'] = "Trucos Juegos";
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documento sin título</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form name="buscar" method="get" action="search2.php">
<p>Introduce el criterio de búsqueda <br>
<input type="text" name="que">
<input type="submit" name="buscar" value="Buscar">
</p>
<p>
<select name="seccion">
<option value=0>Todas la secciones</option>
<?php
foreach ($secciones as $key=>$value) {
echo "<option value=$key>$value</option>";
}
?>
</select>
</p>
</form>
</body>
</html>
************************************
página search2.php donde se realizan las búsquedas:
*************************************
<?php require_once('Connections/fullsearch.php'); ?>
<?php
$seccion = $HTTP_GET_VARS['seccion'];
$que = $HTTP_GET_VARS['que'];
if ($seccion='trucos')
{
mysql_select_db($database_fullsearch, $fullsearch);
$query_rsTrucos = "SELECT * FROM trucos WHERE MATCH(descripcion,contenido) AGAINST ('$que IN BOOLEAN MODE')";
$rsTrucos = mysql_query($query_rsTrucos, $fullsearch) or die(mysql_error());
$row_rsTrucos = mysql_fetch_assoc($rsTrucos);
$totalRows_rsTrucos = mysql_num_rows($rsTrucos);
}
elseif ($seccion='articulos')
{
mysql_select_db($database_fullsearch, $fullsearch);
$query_rsArticulos = "SELECT * FROM articulos WHERE MATCH(titulo,contenido) AGAINST ('$que IN BOOLEAN MODE')";
$rsArticulos = mysql_query($query_rsArticulos, $fullsearch) or die(mysql_error());
$row_rsArticulos = mysql_fetch_assoc($rsArticulos);
$totalRows_rsArticulos = mysql_num_rows($rsArticulos);
}
elseif ($seccion='downloads') {
mysql_select_db($database_fullsearch, $fullsearch);
$query_rsDownloads = "SELECT * FROM downloads WHERE MATCH(descripgr,descrippq,nombre) AGAINST ('$que IN BOOLEAN MODE')";
$rsDownloads = mysql_query($query_rsDownloads, $fullsearch) or die(mysql_error());
$row_rsDownloads = mysql_fetch_assoc($rsDownloads);
$totalRows_rsDownloads = mysql_num_rows($rsDownloads);
}
elseif ($seccion='taller') {
mysql_select_db($database_fullsearch, $fullsearch);
$query_rsTaller = "SELECT * FROM taller WHERE MATCH(titulo,contenido) AGAINST ('$que IN BOOLEAN MODE')";
$rsTaller = mysql_query($query_rsTaller, $fullsearch) or die(mysql_error());
$row_rsTaller = mysql_fetch_assoc($rsTaller);
$totalRows_rsTaller = mysql_num_rows($rsTaller);
}
elseif ($seccion='trucosjuegos') {
mysql_select_db($database_fullsearch, $fullsearch);
$query_rsJuegos = "SELECT * FROM trucosjuegos WHERE MATCH(titulo,contenido) AGAINST ('$que IN BOOLEAN MODE')";
$rsJuegos = mysql_query($query_rsJuegos, $fullsearch) or die(mysql_error());
$row_rsJuegos = mysql_fetch_assoc($rsJuegos);
$totalRows_rsJuegos = mysql_num_rows($rsJuegos);
}
?>
<html>
<head>
<title>Documento sin título</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.Estilo1 {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
}
-->
</style>
</head>
<body>
<?php if ($totalRows_rsTrucos > 0) { // Show if recordset not empty ?>
<table width="452" border="0" cellspacing="1">
<tr>
<td colspan="2" class="Estilo1">Resultados de la búsqueda de <?php echo $que ?> en TRUCOS </td>
</tr>
<?php do { ?>
<tr>
<td class="Estilo1"><?php echo $row_rsTrucos['Descripcion']; ?></td>
<td class="Estilo1"><?php echo $row_rsTrucos['So']; ?></td>
</tr>
<?php } while ($row_rsTrucos = mysql_fetch_assoc($rsTrucos)); ?>
</table>
<hr>
<?php } // Show if recordset not empty ?>
<?php if ($totalRows_rsArticulos > 0) { // Show if recordset not empty ?>
<table width="452" border="0" cellspacing="1">
<tr>
<td colspan="2" class="Estilo1">Resultados de la búsqueda de <?php echo $que ?> en ARTÍCULOS </td>
</tr>
<?php do { ?>
<tr>
<td class="Estilo1"><?php echo $row_rsArticulos['Titulo']; ?></td>
<td class="Estilo1"><?php echo $row_rsArticulos['DescripPq']; ?></td>
</tr>
<?php } while ($row_rsArticulos = mysql_fetch_assoc($rsArticulos)); ?>
</table>
<hr>
<?php } // Show if recordset not empty ?>
<?php if ($totalRows_rsDownloads > 0) { // Show if recordset not empty ?>
<table width="452" border="0" cellspacing="1">
<tr>
<td colspan="2" class="Estilo1">Resultados de la búsqueda de <?php echo $que ?> en DOWNLOADS</td>
</tr>
<?php do { ?>
<tr>
<td class="Estilo1"><?php echo $row_rsDownloads['Nombre']; ?></td>
<td class="Estilo1"><?php echo $row_rsDownloads['DescripPq']; ?></td>
...
SELECT * FROM tabla_bbdd WHERE MATCH(campoindice1,campoindice2) AGAINST ('$lo_que_busca_el_usuario IN BOOLEAN MODE')
Esa instrucción la empleo para todas las tablas, 5 en total. Mi problema es que puse unos if y elseif para que dependiendo de la sección escogida en el formulario de búsqueda y pasada GET por la URL, se buscase en una u otra tabla de la base de datos. Este problema es que sólo me realiza la búsqueda en la tabla que está en el primer if, tabla trucos, y en las otras pues no busca nada.
A continuación te remito el código para que veas lo que te digo, y para que me digas que errores hay, y además si tienes alguna opción para mejorar el código, me lo dijeses. Paso por URL las variables $seccion y $que, que es lo que se ha introducido en el campo de texto del formulario.
**********************************
formulario de búsqueda (index2.php)
<?php
$secciones['articulos'] = "Articulos";
$secciones['downloads'] = "Downloads";
$secciones['taller'] = "Taller";
$secciones['trucos'] = "Trucos S.O.";
$secciones['trucosjuegos'] = "Trucos Juegos";
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documento sin título</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form name="buscar" method="get" action="search2.php">
<p>Introduce el criterio de búsqueda <br>
<input type="text" name="que">
<input type="submit" name="buscar" value="Buscar">
</p>
<p>
<select name="seccion">
<option value=0>Todas la secciones</option>
<?php
foreach ($secciones as $key=>$value) {
echo "<option value=$key>$value</option>";
}
?>
</select>
</p>
</form>
</body>
</html>
************************************
página search2.php donde se realizan las búsquedas:
*************************************
<?php require_once('Connections/fullsearch.php'); ?>
<?php
$seccion = $HTTP_GET_VARS['seccion'];
$que = $HTTP_GET_VARS['que'];
if ($seccion='trucos')
{
mysql_select_db($database_fullsearch, $fullsearch);
$query_rsTrucos = "SELECT * FROM trucos WHERE MATCH(descripcion,contenido) AGAINST ('$que IN BOOLEAN MODE')";
$rsTrucos = mysql_query($query_rsTrucos, $fullsearch) or die(mysql_error());
$row_rsTrucos = mysql_fetch_assoc($rsTrucos);
$totalRows_rsTrucos = mysql_num_rows($rsTrucos);
}
elseif ($seccion='articulos')
{
mysql_select_db($database_fullsearch, $fullsearch);
$query_rsArticulos = "SELECT * FROM articulos WHERE MATCH(titulo,contenido) AGAINST ('$que IN BOOLEAN MODE')";
$rsArticulos = mysql_query($query_rsArticulos, $fullsearch) or die(mysql_error());
$row_rsArticulos = mysql_fetch_assoc($rsArticulos);
$totalRows_rsArticulos = mysql_num_rows($rsArticulos);
}
elseif ($seccion='downloads') {
mysql_select_db($database_fullsearch, $fullsearch);
$query_rsDownloads = "SELECT * FROM downloads WHERE MATCH(descripgr,descrippq,nombre) AGAINST ('$que IN BOOLEAN MODE')";
$rsDownloads = mysql_query($query_rsDownloads, $fullsearch) or die(mysql_error());
$row_rsDownloads = mysql_fetch_assoc($rsDownloads);
$totalRows_rsDownloads = mysql_num_rows($rsDownloads);
}
elseif ($seccion='taller') {
mysql_select_db($database_fullsearch, $fullsearch);
$query_rsTaller = "SELECT * FROM taller WHERE MATCH(titulo,contenido) AGAINST ('$que IN BOOLEAN MODE')";
$rsTaller = mysql_query($query_rsTaller, $fullsearch) or die(mysql_error());
$row_rsTaller = mysql_fetch_assoc($rsTaller);
$totalRows_rsTaller = mysql_num_rows($rsTaller);
}
elseif ($seccion='trucosjuegos') {
mysql_select_db($database_fullsearch, $fullsearch);
$query_rsJuegos = "SELECT * FROM trucosjuegos WHERE MATCH(titulo,contenido) AGAINST ('$que IN BOOLEAN MODE')";
$rsJuegos = mysql_query($query_rsJuegos, $fullsearch) or die(mysql_error());
$row_rsJuegos = mysql_fetch_assoc($rsJuegos);
$totalRows_rsJuegos = mysql_num_rows($rsJuegos);
}
?>
<html>
<head>
<title>Documento sin título</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.Estilo1 {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
}
-->
</style>
</head>
<body>
<?php if ($totalRows_rsTrucos > 0) { // Show if recordset not empty ?>
<table width="452" border="0" cellspacing="1">
<tr>
<td colspan="2" class="Estilo1">Resultados de la búsqueda de <?php echo $que ?> en TRUCOS </td>
</tr>
<?php do { ?>
<tr>
<td class="Estilo1"><?php echo $row_rsTrucos['Descripcion']; ?></td>
<td class="Estilo1"><?php echo $row_rsTrucos['So']; ?></td>
</tr>
<?php } while ($row_rsTrucos = mysql_fetch_assoc($rsTrucos)); ?>
</table>
<hr>
<?php } // Show if recordset not empty ?>
<?php if ($totalRows_rsArticulos > 0) { // Show if recordset not empty ?>
<table width="452" border="0" cellspacing="1">
<tr>
<td colspan="2" class="Estilo1">Resultados de la búsqueda de <?php echo $que ?> en ARTÍCULOS </td>
</tr>
<?php do { ?>
<tr>
<td class="Estilo1"><?php echo $row_rsArticulos['Titulo']; ?></td>
<td class="Estilo1"><?php echo $row_rsArticulos['DescripPq']; ?></td>
</tr>
<?php } while ($row_rsArticulos = mysql_fetch_assoc($rsArticulos)); ?>
</table>
<hr>
<?php } // Show if recordset not empty ?>
<?php if ($totalRows_rsDownloads > 0) { // Show if recordset not empty ?>
<table width="452" border="0" cellspacing="1">
<tr>
<td colspan="2" class="Estilo1">Resultados de la búsqueda de <?php echo $que ?> en DOWNLOADS</td>
</tr>
<?php do { ?>
<tr>
<td class="Estilo1"><?php echo $row_rsDownloads['Nombre']; ?></td>
<td class="Estilo1"><?php echo $row_rsDownloads['DescripPq']; ?></td>
...
2 Respuestas
Respuesta de mcmarthygan
1
Respuesta de Jorge Vila
1