Foros del Web » Programando para Internet » PHP »

Lo he logrado con 1, me ayudan para hacerlo con n?

Estas en el tema de Lo he logrado con 1, me ayudan para hacerlo con n? en el foro de PHP en Foros del Web. Código PHP: <?php $texto  =  "Amigos, gracias a sus multiples ayudas he logrado avanzar un poco en PHP y mySQL. Creo que lo que mas puede añorar una persona es tener un buscador en su web. Precisamente es lo que intento, y me he topado con esta dificultad: (Por favor ayudadme) Hice una tabla en mySQL que se llama paginas. alli esta el campo id y el campo contenido. Con un form envio un campo de nombre \"busqueda\" a la pagina x.php, la cual tiene estas instrucciones: \$sql = \"SELECT * FROM \$tabla WHERE contenido LIKE '%\".\$busqueda.\"%' \"; \$result = mysql_query(\$sql,\$conexion); Esa consulta la almaceno en un campo al que llamo \"texto\", he hice un pequeño arreglo para mostrar \"adornado\" el resultado de la consulta: PD: en esta pagina ingreso el valor de \$texto para facilitar un poco el que ustedes me ayuden. Como veran, busco \$busqueda en \$texto, y saco el resultado. Todo \"esta bien\", pero como hago esto mismo si \$calve son 2 palabaras? Muchas gracias por la ayuda que me brinden." ; ////////////////////////// AQUI TERMINA EL TEXTO ////////////////////////// Y AQUI INICIA EL SCRIPT "BUSCADOR" ////////////////////////// Concideran ustedes que puedo hacer lo mismo de forma + sencilla? ////////////////////////// Como?, con que funcion? ////////////////////////// Como busco una palabra completa en una cadena de multiples palabras? ...
  #1 (permalink)  
Antiguo 06/12/2003, 17:03
Usuario baneado!
 
Fecha de Ingreso: diciembre-2002
Ubicación: En mi chozita
Mensajes: 142
Antigüedad: 21 años, 4 meses
Puntos: 0
Exclamación Lo he logrado con 1, me ayudan para hacerlo con n?

Código PHP:
<?php
$texto 
"Amigos, gracias a sus multiples ayudas he logrado avanzar un poco en PHP y mySQL.

Creo que lo que mas puede añorar una persona es tener un buscador en su web.

Precisamente es lo que intento, y me he topado con esta dificultad:
(Por favor ayudadme)

Hice una tabla en mySQL que se llama paginas.
alli esta el campo id y el campo contenido.

Con un form envio un campo de nombre \"busqueda\" a la pagina x.php, la cual tiene estas instrucciones:

\$sql = \"SELECT * FROM \$tabla WHERE contenido LIKE '%\".\$busqueda.\"%' \";
\$result = mysql_query(\$sql,\$conexion);

Esa consulta la almaceno en un campo al que llamo \"texto\", he hice un pequeño arreglo para mostrar \"adornado\" el resultado de la consulta:

PD: en esta pagina ingreso el valor de \$texto para facilitar un poco el que ustedes me ayuden.

Como veran, busco \$busqueda en \$texto, y saco el resultado.

Todo \"esta bien\", pero como hago esto mismo si \$calve son 2 palabaras?

Muchas gracias por la ayuda que me brinden."
;

////////////////////////// AQUI TERMINA EL TEXTO
////////////////////////// Y AQUI INICIA EL SCRIPT "BUSCADOR"
////////////////////////// Concideran ustedes que puedo hacer lo mismo de forma + sencilla?
////////////////////////// Como?, con que funcion?
////////////////////////// Como busco una palabra completa en una cadena de multiples palabras?
////////////////////////// Y si son 2 o + palabras?
////////////////////////// Para el buscador he pensado colocar todas las paginas en la BD con un id.
////////////////////////// Eso no es lo que debo hacer?
////////////////////////// Que me aconsejan?.
////////////////////////// No he podido dar uso a la funcion eregi()
////////////////////////// Si se busca por ejemplo "precisamente" no lograre que me salga un
////////////////////////// resultado positivo, aunque si esta la palabra. (Por la Mayuscula)
////////////////////////// Gracias, espero su ayuda.

$palrededor 5;                //Definimos qantas palabras alrededor seran mostradas
$textodividi explode(" ",$texto);    //Dividimos el texto en palabras
$numpalabras count($textodividi);    //Contamos el numero de palabras
//$clave = "nuestros";            //Lo que se buscara
$clave trim($clave);            //Quitamos epacios para evitar errores

for ($i 0$i $numpalabras$i++)
{if (
$textodividi[$i] == $clave){$hallazgo $i;} else {echo "";}}
$m = isset($hallazgo);            //Averiguamos si $hallazgo esta vacia
if ($m 1)
{echo 
"Lo sentimos, no hallamos coincidencias.";} else {
for (
$inicio $hallazgo $palrededor$inicio $hallazgo $palrededor 1$inicio++)
{
$salida .= $textodividi[$inicio]." ";}
}
$salida ereg_replace("\n","<BR>",$salida);
$salida ereg_replace("$clave","<B>$clave</B>",$salida);
echo 
"$salida...<HR>";
?>
<FORM ACTION="pagina.php" METHOD=POST><INPUT TYPE=TEXT name=clave><INPUT TYPE=SUBMIT VALUE=Buscar></FORM>

Última edición por RAZACALA; 06/12/2003 a las 17:13
  #2 (permalink)  
Antiguo 10/12/2003, 16:35
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 9 meses
Puntos: 16
Bueno, veo que para dividir en palabras el texto lo partes por ' '. Entonces un texto como 'Hola. ¿Como estas?' se divide en tres 'palabras': 'Hola.' '¿Como' y 'estas?'. Y si buscas 'Hola', no obtendras ninguna coincidencia, ya que 'Hola'!='Hola.'. Asi que creo que tu forma de calcular las palabras del texto no es del todo correcta. Ademas, tu algoritmo no corresponde a la consulta SQL que has puesto, ya que con esa consulta si buscas 'ola' en el texto de ejemplo, da coincidencia en 'Hola'. Y en tu algoritmo debe ser exacta.

Si tu version de PHP es la 4.3 o superior, puedes probar str_word_count() (www.php.net/str_word_count) o mirar alguna de las soluciones que ponen en los comentarios de los usuarios. Esto para crear el array de las palabras.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 11/12/2003, 08:54
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 9 meses
Puntos: 16
Visitando sitepoint he dado con este mensaje: http://www.sitepointforums.com/showthread.php?t=142422 . En el comentan un buscador como el tuyo (creo), solo que recorre varios ficheros.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 15:55.