Foros del Web » Programando para Internet » PHP »

Porque no va el buscador, se raya...

Estas en el tema de Porque no va el buscador, se raya... en el foro de PHP en Foros del Web. pues eso... una direccion donde leer algo para hacer susodicho buscador...., algo sencillito, para buscar de 1 a 3 palabras como mucho, y en 1 ...
  #1 (permalink)  
Antiguo 07/06/2003, 12:14
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 21 años, 6 meses
Puntos: 2
Pregunta Porque no va el buscador, se raya...

pues eso... una direccion donde leer algo para hacer susodicho buscador...., algo sencillito, para buscar de 1 a 3 palabras como mucho, y en 1 solo campo de registro

Cluster me dio una direccion una vez... pero no me la copie... sorry

Última edición por nuevo; 08/06/2003 a las 07:31
  #2 (permalink)  
Antiguo 07/06/2003, 14:18
Avatar de Rnsto  
Fecha de Ingreso: marzo-2002
Ubicación: Puerto Vallarta, Mexico
Mensajes: 204
Antigüedad: 22 años, 8 meses
Puntos: 0
pues aqui hay una liga donde te explican como hacer eso y algunas cosillas mas..

http://otri.us.es/recursosPHP/manual/index.htm
__________________
Saludos
Rnstho Luna
go2mexico.com
  #3 (permalink)  
Antiguo 07/06/2003, 14:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Tal vez te dí el URL:

www.mysql.com xDDDDD

(ahí puedes estudira sobre campos "Full Text" o algo así le llaman ..)

Y algo entre PHP y Msyql .. se trata de componer tu sentencia SQL a partir de las palabras que pueda tener tu cadena de busqueda ..

Osese .. si tienes:
$buscar="bla nose que";

Pues aplicas explode al caracter espacio y tienes las palabras ..

Lo recorres con un bucle foreach() por ejemplo (pues lo que te dá el explode es un array) y vas formando tu sentencia SQL del típo:

Código PHP:
$array_palabras=explode(" ",$buscar);
$sql="SELECT * FROM tabla WHERE ";
foreach(
$array_palabras as $palabra){
 
$sql_buscar .= "campo LIKE $palabra AND ";
}
$sql .= $sql_buscar// aquí concateno el SQL original .. con los "campo LIKE $palabra AND " que resulten 

echo "Sentencia SQL a buscar: ".$sql
Como veras .. le sobra un AND .. hay que trabajar más el código pero la base es esa .. En el foro se ha hablado de esto varias veces .. intenta usar el buscador del foro.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 07/06/2003, 19:32
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 21 años, 6 meses
Puntos: 2
Exclamación nada me estoy liando y no puedo

he probado con lo que tu dices Custer... pero no llego a mas... y ahora estoy probando esto que encontre... pero me pierdo..


--------------------------------------------------------------------------------<?
$query = "SELECT blob,identifier FROM your_table";
$result = mysql_query($query);
$number = mysql_numrows($result);
$j = 0;
WHILE ($j < $number){

/* Your "blob" */
$body = mysql_result($result,$j,"blob");

/*Your "identifier" */
$qid = mysql_result($result,$j,"qid");

/* Open the noise words into an array */
$noise_words = file("noisewords.txt");
$filtered = $body;

/* Got to put a space before the first word in the body, so that we can
recognize the word later */
$filtered = ereg_replace("^"," ",$filtered);

/* Now we suck out all the noisewords, and transform whats left into an
array */
/* Brought to you by poor ereg coding! */
for ($i=0; $i<count($noise_words); $i++) {
$filterword = trim($noise_words[$i]);
$filtered = eregi_replace(" $filterword "," ",$filtered);
}
$filtered = trim($filtered);
$filtered = addslashes($filtered);
$querywords = ereg_replace(",","",$filtered);
$querywords = ereg_replace(" ",",",$querywords);
$querywords = ereg_replace("?","",$querywords);
$querywords = ereg_replace("(","",$querywords);
$querywords = ereg_replace(")","",$querywords);
$querywords = ereg_replace(".","",$querywords);
$querywords = ereg_replace(",","','",$querywords);
$querywords = ereg_replace("^","'",$querywords);
$querywords = ereg_replace("$","'",$querywords);
/* We should now have something that looks like 'Word1','Word2','Word3'
so lets turn it into an array */
$eachword = explode(",", $querywords);

/* and finally lets go through the array, and place each word into the
database, along with its identifier */
for ($k=0; $k<count($eachword); $k++){
$inputword = "INSERT INTO search_table VALUES($eachword[$k],$qid)";
mysql_query($inputword);
}
/* Get the next set of data */
$j++;
}
?>



solo necesito un formulario con un campo de texto para poner unas palabras y buscar en un registro, nada mas

alguien se aclara...
  #5 (permalink)  
Antiguo 07/06/2003, 22:48
 
Fecha de Ingreso: abril-2003
Mensajes: 606
Antigüedad: 21 años, 7 meses
Puntos: 2
Bueno el Fulltext es algo sencillo. La idea es que indexas sobre los campos que vas a buscar. Para ello tienes que modificar tu tabla

ALTER TABLE ADD FULLTEXT(CAMPO1,CAMPO2)

Ahora bien, ya tienes indexado campo1 y campo2

Fulltext por default te quita las palabras de busqueda con menos o igual a 3 caracteres si no mal recuerdo. Ejemplo

$sql="SELECT * FROM TABLA WHERE MATCH(campo1,campo2) AGAINST ('".$_POST["busqueda"]."')";

Y listo, erl FULLTEXT es lo suficientemente inteligente como para ordenar del registro que más coincida al que menos.

Otro punto importante es que si mas de los regiustros en tu tabla coinciden no te regresa nada, esto es para que el usuario haga búsquedas mas específicas.

=D
  #6 (permalink)  
Antiguo 08/06/2003, 23:05
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 21 años, 6 meses
Puntos: 2
miren, ahora estoy usando este codigo, es de php3... tiene algo que ver eso para que no funcione en php4, porque funcionar funciona, no da error, pero no encuentra nada, dice que busqueda no encontrada, vamos que no encuentra regirstros


<?php
if (!isset($buscar)){
echo "Debe especificar una cadena a bucar";
echo "</html></body> \n";
exit;
}
$link = mysql_connect("localhost","root","0");
mysql_select_db("shadow_post", $link);
$result = mysql_query("SELECT * FROM usuarios WHERE nick LIKE '%$buscar%' ORDER BY nick", $link);
if ($row = mysql_fetch_array($result)){
echo "<table border = '1'> \n";
//Mostramos los nombres de las tablas
echo "<tr> \n";
while ($field = mysql_fetch_field($result)){
echo "<td>$field->name</td> \n";
}
echo "</tr> \n";
do {
echo "<tr> \n";
echo "<td>".$row["id"]."</td> \n";
echo "<td>".$row["nombre"]."</td> \n";
echo "<td>".$row["postdate"]."</td> \n";
echo "<td>".$row["postip "]."</td> \n";
echo "<td><a href='mailto:".$row["email"]."'>".$row["email"]."</a></td> \n";
echo "</tr> \n";
} while ($row = mysql_fetch_array($result));
echo "</table> \n";
} else {
echo "¡ No se ha encontrado ningún registro !";
}
?>


fijense, la 1º vez me dice esto:

Debe especificar una cadena a bucar


y la 2º vez que hago la busqueda:

¡ No se ha encontrado ningún registro !


??????????????????? porq?

holaaaa hay alguien...?
__________________
3w.valenciadjs.com
3w.laislatv.com

Última edición por nuevo; 08/06/2003 a las 23:05
  #7 (permalink)  
Antiguo 08/06/2003, 23:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Si pones el código del formulario que estás usando .. sería lo ideal .. pues ahí hace referencia por ejemplo a :

if (!isset($buscar)){


Luego por ahí hace:

if ($row = mysql_fetch_array($result)){

Para luego hacer otro

while ($row = mysql_fetch_array($result));

ya con el primero .. el puntero de la consulta se habrá movido a la siguiente posición .. y si sólo hay un resultado de tu consulta ($result) .. no va a tener nada el "While()" bucle para recorrer ..

Te recomiendo que analices tu código .. ¿como? .. Haciendo "echo" a tus variables que tengas .. y mirando en el manual de PHP oficial que hace cada función ..

Las funciones mysql_fetch_xxx() extraen un registro de tu consulta realizada hacia un array, objeto, row .. etc .. dependiendo cual uses y "Mueven" el puntero a la siguiete posición .. Con esa teoría en la "mano" puedes ver lo que te comento .. Eso y otras cosas cómo: if ($row = mysql_fetch_array() ...) así se está asignando a $row lo que pueda resultar de hacer mysql_fetch_array pero si te fijas en la documentación de esa función en PHP.net .. veras que si no puede extraer ningún resultado (registro) de tu consulta .. da FALSE .. por lo tanto se usa como "boolean" (verdadero/falso) para el condicional . .pero, con la particularidad que "mueve" el puntero de la consulta una posición hacia adelante .. pues se está ejecutando mysql_fetch_xxx() ..

Ese "if ($row= mysql_fetch_array(...)) .. " Debería ser un mysql_num_rows() para ver si hay o no registros en la consulta realizada:

Código PHP:
if (mysql_num_rows($result) > 0){ 
Y .. lo demas .. lo dicho .. mira si tienen valor y que valor las variables que uses . sigue la lógica de los condicionales y bucles usados .. etc .. etc .. Analiza tu script .. piesa como lo haría PHP .. y por ahí detectaras el problema.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 09/06/2003, 01:31
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 21 años, 6 meses
Puntos: 2
formulario:

·················································· ·················································· ···
<html>
<body>
<form method="POST" action="buscador.php">
<strong>Palabra clave:</strong> <input type="text" name="T1" size="20"><br><br>
<input type="submit" value="Buscar" name="buscar">
</form>
</body>
</html>
·················································· ·················································· ···

y el php:

<html>
<body>

<?
if (!isset($buscar)){
echo "Debe especificar una cadena a bucar";
echo "</html></body> \n";
exit;
}
$link = mysql_connect("localhost","root","0");
mysql_select_db("shadow_post", $link);
$result = mysql_query("SELECT * FROM usuarios WHERE nick LIKE '%$buscar%' ORDER BY nick", $link);
if ($row = mysql_fetch_array($result)){
echo "<table border = '1'> \n";
//Mostramos los nombres de las tablas
echo "<tr> \n";
while ($field = mysql_fetch_field($result)){
echo "<td>$field->name</td> \n";
}
echo "</tr> \n";
do {
echo "<tr> \n";
echo "<td>".$row["id"]."</td> \n";
echo "<td>".$row["nombre"]."</td> \n";
echo "<td>".$row["postdate"]."</td> \n";
echo "<td>".$row["postip "]."</td> \n";
echo "<td><a href='mailto:".$row["email"]."'>".$row["email"]."</a></td> \n";
echo "</tr> \n";
} while ($row = mysql_fetch_array($result));
echo "</table> \n";
} else {
echo "¡ No se ha encontrado ningún registro !";
}
?>

</body>
</html>

Última edición por nuevo; 09/06/2003 a las 02:52
  #9 (permalink)  
Antiguo 09/06/2003, 14:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Y? .. Tomastes en cuenta las recomendaciones que te hice en el anterior mensaje?

Usa preferentemente:

if (!isset($_POST['buscar'])){

En lugar de:
if (!isset($buscar)){


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 09/06/2003, 23:15
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 21 años, 6 meses
Puntos: 2
nada cluster, se me resiste... hace lo mismo volverse loko
Código PHP:
<?php 
if (!isset($_POST['buscar'])){
      echo 
"Debe especificar una cadena a bucar"
      echo 
"</html></body> \n"
      exit; 

$link mysql_connect("localhost","root","0"); 
mysql_select_db("shadow_post"$link); 
$result mysql_query("SELECT * FROM usuarios WHERE nick LIKE '%$buscar%' ORDER BY nick"$link); 
if (
$row mysql_fetch_array($result)){ 
      echo 
"<table border = '1'> \n"
//Mostramos los nombres de las tablas 
echo "<tr> \n"
while (
$field mysql_fetch_field($result)){ 
            echo 
"<td>$field->name</td> \n"

      echo 
"</tr> \n"
do { 
            echo 
"<tr> \n"
            echo 
"<td>".$row["id"]."</td> \n"
            echo 
"<td>".$row["nombre"]."</td> \n"
            echo 
"<td>".$row["postdate"]."</td> \n"
            echo 
"<td>".$row["postip    "]."</td> \n"
            echo 
"<td><a href='mailto:".$row["email"]."'>".$row["email"]."</a></td> \n"
            echo 
"</tr> \n"
      } while (
$row mysql_fetch_array($result)); 
            echo 
"</table> \n"
} else { 
echo 
"¡ No se ha encontrado ningún registro !"

?>
1º me dice esto: Debe especificar una cadena a bucar
2º ¡ No se ha encontrado ningún registro !

ahhhg
__________________
3w.valenciadjs.com
3w.laislatv.com

Última edición por nuevo; 09/06/2003 a las 23:29
  #11 (permalink)  
Antiguo 10/06/2003, 11:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
A ver ..

de tu formulario ..

<strong>Palabra clave:</strong> <input type="text" name="T1" size="20"><br><br>

el campo a buscar (variable) es T1 .. y buscar es el nombre del boton "submit" .. Pero eso no implica que tenga valor T1 ..

Te das cuenta? ...


Código PHP:
<html
<
body
<
form method="POST" action="buscador.php"
<
strong>Palabra clave:</strong> <input type="text" name="buscar" size="20"><br><br
<
input type="submit" value="Buscar" name="medaigual"
</
form
</
body
</
html
Y..
Código PHP:
$result mysql_query("SELECT * FROM usuarios WHERE nick LIKE '%".$_POST['buscar']."%' ORDER BY nick"$link); 

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 10/06/2003, 12:07
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 21 años, 6 meses
Puntos: 2
Cluster eres Genial.... ya ta solucionao... gracias por vijesima vez... graciasssssssss

jo tenia la cabeza ya como un bombo....
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 12:51.