Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/10/2003, 00:02
aallard
 
Fecha de Ingreso: agosto-2003
Mensajes: 7
Antigüedad: 20 años, 8 meses
Puntos: 0
¿cómo restringir búsquedas?

Tengo una base de datos MySQL con dos campos: Clave y Valor. El usuario consulta por clave y se le devuelve Valor, el código completo, es este:

<?php

$hostname_global_con = "*******";

$database_global_con = "**";

$username_global_con = "*****";

$password_global_con = "******";

$global_con = mysql_connect($hostname_global_con, $username_global_con,

$password_global_con) or die(mysql_error());

mysql_select_db($database_global_con, $global_con);



//COMPRUEBO QUE SE HAYA ENVIADO EL FORMULARIO Y QUE EL CAMPO CLAVE TENGA ALGUN VALOR

if(isset($_POST['CLAVE']) && $_POST['CLAVE'] != ''){

//CREO LA CONSULTA, CON $_POST['tabla'] LE INDICO A QUE TABLA TIENE QUE HACER LA CONSULTA, EL VALOR VIENE DE UN CAMPO OCULTO

//QUE HAY EN CADA UNO DE LOS FORMULARIOS

$SQL = "SELECT * FROM ".$_POST['tabla']." WHERE clave LIKE '%".$_POST['CLAVE']."%'";

$result = mysql_query($SQL) or die (mysql_error.$SQL());

}

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>www.lenguandina.org / Diccionario Aymara en línea</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>


<body bgcolor="#336699" text="#FFFFFF">
<div align="center">

<p>&nbsp;</p>
<p><font color="#333333" size="5" face="Courier New, Courier, mono"><strong><font color="#66CC33" size="6">www.lenguandina.org</font></strong></font></p>
<p><font color="#FFFFFF" face="Verdana, Arial, Helvetica, sans-serif">diccionario
Catellano Aymara / Aymara Castellano en l&iacute;nea</font></p>
<p><font color="#FFFFFF" face="Courier New, Courier, mono"><strong><font face="Verdana, Arial, Helvetica, sans-serif">[en
construcci&oacute;n]</font></strong></font></p>
<p>&nbsp;</p>

<table width="80%" border="2" cellpadding="0" cellspacing="0" bordercolor="#333333">
<tr>

<td width="50%" bgcolor="#336699">
<p align="center"><font color="#FFFFFF" size="2" face="Verdana, Arial, Helvetica, sans-serif">Castellano-Aymara</font></p>

<form name="form1" method="post" action="">
<font face="Verdana, Arial, Helvetica, sans-serif">
<input name="CLAVE" type="text" id="CLAVE">

<input name="consulta1" type="submit" id="consulta1" value="Consultar">

<input name="tabla" type="hidden" id="tabla" value="diccionario1">

</font>

</form>


</td>

<td width="50%"><p align="center"><font color="#FFFFFF" size="2" face="Verdana, Arial, Helvetica, sans-serif">Aymara-Castellano</font></p>

<form name="form2" method="post" action="">
<font face="Verdana, Arial, Helvetica, sans-serif">
<input name="CLAVE" type="text" id="CLAVE">

<input name="consulta2" type="submit" id="consulta2" value="Amajas&auml;si&ntilde;a">

<input name="tabla" type="hidden" id="tabla" value="diccionario2">

</font>

</form>


</td>

</tr>

<tr>

<td><div align="center">

<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Lista

de palabras castellanas disponibles</font></p>

<p><font face="Verdana, Arial, Helvetica, sans-serif">A B C D E F G

H I J K L M N &Ntilde; O P Q R S T U V W X Y Z</font></p>

</div></td>

<td><div align="center">

<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Lista

de palabras aymaras disponibles</font></p>

<p><font face="Verdana, Arial, Helvetica, sans-serif">A CH CHH CH' I

J K KH K' L LL M N &Ntilde; P PH P' Q QH Q' S T TH T' U W Y</font></p>

</div></td>

</tr>

</table>

<br>

<?php

//AQUI EMPIEZA EL BUSCADOR

if(isset($_POST['CLAVE']) && $_POST['CLAVE'] != ''){

//COMPRUEBO QUE HAYA ENCONTRADO ALGO, mysql_num_rows DEVUELVE EL NUMERO DE FILAS AFECTADAS POR LA CONSULTA

if(mysql_num_rows($result) > 0){

?>

<table width="80%" border="2" bordercolor="#333333">

<tr>

<td width="50%"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">RESULTADOS

DE BUSQUEDA</font></td>

<td width="50%"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">VALORES

ENCONTRADOS</font></td>

</tr>

<?php

//EMPIEZO A RECORRER LAS FILAS DEVUELTAS

while($row=mysql_fetch_assoc($result)){

?>

<tr>

<td><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><?php echo(str_replace($_POST['CLAVE'],'<B>'.$_POST['CLAVE'].'</B>',$row['CLAVE']))?></font></td>

<td><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><?php echo($row['VALOR'])?></font></td>

</tr>

<?php

//SOBRE str_replace, BUSCA UNA CADENA DE CARACTERES DENTRO DE OTRA Y LA SUSTITUYE POR UNA TERCERA, EL MECANISMO ES EL SIGUIENTE:

//str_replace ('cadena buscada', 'cadena_reemplazo', 'lugar en el que buscar')

}

?>

</table>

<?php

} else {

//ESTO ES POR SI NO ENCUENTRA NADA

echo('<font face="Verdana, Arial, Helvetica, sans-serif" size="2">NO SE HA ENCONTRADO NINGUNA COINCIDENCIA, POR FAVOR, VUELVA A INTENTARLO</font>');

}

//LIBERO MEMORIA

mysql_free_result($result);

}

//CIERRO LA CONEXION

mysql_close($global_con);

?>

</div>

</body>

</html>

Resulta que, en CLAVE no hay palabras, sino expresiones (pueden verlo en www.lenguandina.org) y cuando un usuario pone "de", no se le devuelven las entradas donde dice "venir 'de' lejos" o "subir 'de' a poco" sino tooooodas las entradas que tengan "de": "demonio, dedo, debajo, dejar" etc, lo que confunde a cualquiera. Mi pregunta es: qué modificaciones debo hacer, y dónde, para que busque por palabras completas, y no cuando la palabra buscada forme parte de otra, pero que eso no signifique que solo salgan las entradas con el texto exacto, ¿se entiende la pregunta?, que si alguien pone "de" salga efectivamente "venir 'de' lejos", pero no "demonio"... No sé mucho de esto, agradeceré cualquier ayuda.