132 comentarios en Como hacer un Buscador con Ajax

Buscador en PHP con un poco de AJAX V 0.1 Beta

[...] actualizada tan pronto tenga el tutorial y la CSStilación de Stan en mis manos Mejor escribí otro post, para que aparescan los cambios en el [...]

Stan

Eres un Crack!

pecesama

El titulo en ingles quedaria mejor como <strong>How to Create an Ajax Live Search</strong> o algo similar :P

Victor De la Rocha

@Stan: :D
@pecesama: Si, me gusta mas y ya lo cambié en el url gracias, gracias jeje

JL

Te equivocaste, no son 1 y 2 los eventos sino 1 y 4 (el error es nadamas en la redacción, el código si está bien)

Victor De la Rocha

Gracias JL, ya hice el cambio :)

@<strong>Stanmx</strong>: No te hagas... Que estamos anciosos esperando la CSSstilización del buscador :D

Algunos estilos CSS para las cajas de búsqueda

[...] Mis Algoritmos Hi :) 123456 « Como hacer un Buscador con Ajax [...]

CHICOGREENDAY

mil algoritmos como harias un buscador youporn con ajax aver si hace un tuto y calro la descarga ah por cierto este buscador no le vanta tengo problemas con el config.php aver si me explicas si chaufas

Revilo

En la parte de la paginacion me direcciona a index.php pero este archivo no lo tengo, me podrias ayudar diciendome que lleva este archivo?

Victor De la Rocha

@CHICOGREENDAY: :S

@Revilo: Fue un error mio, hay que cambiar index.php por buscador.php en donde está la línea que configura la paginación: Deberá ser algo así $p->target('buscador.php') (En los archivos busqueda.php y buscador.php casi al final de ámbos archivos). Si esto no soluciona el problema lo veo mas tarde por que estoy fuera de la ciudad y lejos de mi computadora personal.

ChicaRubia

Jeje, lamento hacer pregunta de rubia, pero la parte del direccionamiento... no me anda!!! (son como las 5 de la madrugada, mola mogollon tu script, quise probarlo, pero... no anda! :S ) Intente lo de tu ultimo post, pero no se, creo q la fatiga me esta ganando!!! :P

Victor De la Rocha

ChicaRubia disculpa que no pueda atender esto en estos momentos, pero el fin de semana reviso con calma que está mal explicado o cual es el error.

:P Comprensión, comprensión... que estoy atareadamente lleno de trabajo :S

Intergus

Hola Victor

Me está gustando tu codigo, quiero utilizarlo pero me encuentro con algunas dudas. Estoy haciendo funcionar solo buscador.php y parace que todo va Ok, parece que no necesita a busqueda.php. Solo me da un error pero no creo que se deba a haber anulado busqueda.php

Cuando tecleo una letra que no está en lo buscado me devuelve en el DIV resultado el tipico OBJETO NO ENCONTRADO, sin embargo no hay problemas mientras vas tecleando letras que si que estan, es decir que si que arrojan resultados.

La otra duda es ¿para que el boton del submit, si no es necesario pulsarlo? ¿sería posible usarlo para enviar la consulta a otra pagina?

Esta ultima pregunta es porque sería muy util buscar en una base de datos y cuando ya tengas el resultado que buscas (por ejemplo se te haya quedado en 5 o 6 registros que coinciden con tu busqueda, le mandas a otro php la query que arroja esos 5 resultados para que haga algo con ellos, como por ejemplo pintarlos en un google map (que es mi intención), si te interesa hablamos del tema....
Saludos

Victor De la Rocha

Hola Intergus

buscador.php es la base de esta aplicación. El muestra resultados si le envías la variable ?q= en la barra de direcciones, pero si en vez de enviar la variable, escribes en la caja de texto, esta manda llamar a busqueda.php con la variable ?q= algo así busqueda.php?q=<query>. Así, busqueda.php trae los resultados tal cual lo haría buscador.php, pero sin volver a mostrar la caja de búsqueda y el botón enviar. <strong>Son indispensables, ámbos archivos</strong>.

<blockquote>Cuando tecleo una letra que no está en lo buscado me devuelve en el DIV resultado el tipico OBJETO NO ENCONTRADO, sin embargo no hay problemas mientras vas tecleando letras que si que estan, es decir que si que arrojan resultados.</blockquote>
No entendí muy bien eso...

El botón "submit" podría ocultarse con CSS, y aunque no sirva de mucho si tenémos javascript activado, este debería funcionar cuando "javascript no está activado" :)

Puedes comentar lo que gustes. Cuéntame más acerca de lo que quieres hacer con google map. Podría ocurrírseme algo.</query>

Intergus

Pues no entiendo entonces muy bien como va.... lo estudiaré un poco más.

Lo que quiero hacer es permitir que busquen todos aquellos registros que cumplan la condicion de tener en un determinado campo, la palabra que el usuario busca, cuando al usuario ya le parece buena la busqueda, enviar esa busqueda a otro php que hará esa consulta y meterá los resultados (que serán los mismos que arrojó el buscador), los meterá como marcadores en el google map. Esa parte ya la tengo funcionando, es decir puedo hacer una consulta "select * from tabla where campo like $q" y lo que arroja, lo estoy metiendo en el mapa, ya que los registros disponen de coordenadas entre otras cosas.

Pero no se como hacer para lanzar la consulta. Por eso te comentaba si se podia usar el boton del form para lanzar esa consulta a un index con la query oculta para que no aparezca en el navegador.....

No se, ¿cómo lo ves?

Intergus

La paginación da error. Al principio sale bien pero al no mostrar los resultados de la base de datos pero si los cuenta, saca paginación (2 páginas) pero no se ven resultados pues aun no se ha tecleado nada en la caja del buscador. Pues en ese momento si se pasa de pagina, salta error de OBJETO NO ENCONTRADO

Intergus

vale.... solucionado cambiando en busqueda.php y buscador.php, aquello de ....
$p->target("index.php............
por
$p->target("buscador.php..........

son 2 lineas en cada fichero.

Intergus

Hola Victor

En un intento de mejora, he modificado este trozo de codigo en ambos php (buscador y busqueda)

[php]if(isset($_GET['q']) and !eregi('^ *$',$_GET['q'])){
$q = sql_quote($_GET['q']); //para ejecutar consulta
$busqueda = htmlentities($q); //para mostrar en pantalla

if ($q''){
//CUENTA EL NUMERO DE PALABRAS
$trozos=explode(" ",$q);
$numero=count($trozos);
if ($numero==1) {
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
$sqlStr = "SELECT * FROM empresas WHERE pal_busca LIKE '%$q%'";
$sqlStrAux = "SELECT count(*) as total FROM empresas WHERE pal_busca LIKE '%$q%'";
} elseif ($numero>1) {
//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST
//busqueda de frases con mas de una palabra y un algoritmo especializado
$sqlStr = "SELECT *, MATCH ( descripcion, pal_busca ) AGAINST ( '$q' ) AS Score FROM empresas WHERE MATCH ( descripcion, pal_busca ) AGAINST ( '$q' ) ORDER BY Score DESC";
$sqlStrAux = "SELECT count(*) as total FROM empresas WHERE MATCH ( descripcion, pal_busca ) AGAINST ( '$q' )";

}
}
}else{
$sqlStr = "SELECT * FROM empresas WHERE pal_busca LIKE ''";
$sqlStrAux = "SELECT count(*) as total FROM empresas WHERE pal_busca LIKE ''";
}[/php]


Con ello pretendo hacer una busqueda más completa para cuando pongan mas de una palabra en la caja de busqueda, pues si en el campo hay por ejemplo "pan pasteles tartas" y en la caja de busqueda pones pan tartas ya no encontraría nada y con este otro tipo de busqueda si que lo haria, pero me da un error, relativo al mysql_assoc y es por el valor de $sqlStrAux que no le debe de llegar....

¿se te ocurre algo?
Gracias

Victor De la Rocha

Si <strong>Intergus</strong>, esa sería una mejora en la consulta que realiza la búsqueda. No está de mas mencionar que este paso requiere crear un índice de texto completo en la tabla con la que trabajaremos referenciando a los campos con los que se realizará la búsqueda (Esta es para <a href="http://www.stanmx.com" rel="nofollow">@<strong>Stan</strong></a> que está aprendiendo de estas cosas y trabajando con la CSStilización del buscador :P )

Este paso podemos verlo en la documentación de MySQL con mucho detalle: "<a href="http://dev.mysql.com/doc/refman/5.0/es/fulltext-search.html" rel="nofollow">12.7. Funciones de búsqueda de texto completo (Full-Text)</a>".

Bueno, continuando con el problema:

<del>Creo que en las últimas dos consultas SQL te equivocaste. Yo no pondría la búsqueda con espacios en blanco:

...}else{
$sqlStr = "SELECT * FROM empresas WHERE pal_busca LIKE ''";
$sqlStrAux = "SELECT count(*) as total FROM empresas WHERE pal_busca LIKE ''";
}

Yo lo haría así:

...}else{
$sqlStr = "SELECT * FROM empresas";
$sqlStrAux = "SELECT count(*) as total FROM empresas";
}

También veo otro errorsito, o algo que no entiendo por que lo haz hecho así:

</del><del> if ($q''){
//CUENTA EL NUMERO DE PALABRAS</del>

uff, espera, vi varios errores o cosas extrañas, así que mejor pongo como lo haría yo:

[php]if(isset($_GET['q']) and !eregi('^ *$',$_GET['q'])){
$q = sql_quote($_GET['q']); //para ejecutar consulta
$busqueda = htmlentities($q); //para mostrar en pantalla

if(strpos(trim($q),' ')){
/*
* Si encuentra un espacio, entonces tenemos 2 o mas palabras, por lo que podemos utilizar MATCH(campos) AGAINST(búsqueda).
* Siempre y cuando exista un índice de texto completo (FULLTEXT) en la tabla relacionado a los campos que se pretende realizar la búsqueda.
*/
$sqlStr = "SELECT *, MATCH ( descripcion, pal_busca ) AGAINST ( '$q' ) AS Score FROM empresas WHERE MATCH ( descripcion, pal_busca ) AGAINST ( '$q' ) ORDER BY Score DESC";
$sqlStrAux = "SELECT count(*) as total FROM empresas WHERE MATCH ( descripcion, pal_busca ) AGAINST ( '$q' )";
}else{
/*
* Si no encuentra ningun espacio, entonces tenemos nada mas una palabra, por lo que utilizamos LIKE en la consulta SQL.
*/
$sqlStr = "SELECT * FROM empresas WHERE pal_busca LIKE '%$q%'";
$sqlStrAux = "SELECT count(*) as total FROM empresas WHERE pal_busca LIKE '%$q%'";
}
}else{
$sqlStr = "SELECT * FROM empresas";
$sqlStrAux = "SELECT count(*) as total FROM empresas";
}[/php]

uff, por último, no entiendo por que te muestra un error en cuanto al mysql_assoc. Tal vez tenga que ver con la tabla que usas, algún campo mal escrito o el índice de texto completo. Revísale bien ;)

Intergus

Bueno, ahora no da error, faltaba poner como fulltext en la base de datos los 2 campos descripcion y pal_busca, pero ahora mientras tecleas la primera palabra va de lujo pero al teclear el espacio en blanco para continuar, ya no encuentra nada y aunque sigas tecleando ya no encuentra nada pero no da errores, simplemente dice que no coincide ningun registro.
...... sigo probando.....

Intergus

Nada, no funciona bien y tiene que ser por poca cosa. No me gustaria tirar la toalla pues me ha gustado el codigo pero sin el match again funcionando, vale de poco ....

Victor, ¿no te animas?.... supongo que estarás hasta arriba pero a lo mejor es cosa de poco.

Intergus

Por cierto, no encuentra nada con ñ, en cuanto la tecleas... se acabó.

Abraham

Una duda... es posible en vez de hacer que pase las búsquedas (al dar clic en las diferentes páginas) por la URL que las pase por $_POST y así no cambié la URL???

:$

link

gracias me fue de mucha ayuda, lo adapte a mis necesidades, pero super facil de usar, no me demore nada

muchas gracias la verdad

Victor De la Rocha

@<b>Intergus</b>, debes de tener cuidado con el juego de caracteres. Tal vez si tomas en cuenta utf8_encode y utf8_decode puedas lograr lo que no funciona, de otra manera no podría ayudarte.

@<b>Abraham</b>, creo que es posible, tendrás que hacer alguna función que haga exáctamente lo mismo que hago al dar clic en el botón submit.

@<b>link</b>, me alegra mucho saberlo ¡Suerte con eso! ;)

¡Feliz año a todos! Ya estoy de vuelta por aquí ... uff, casi desde noviembre desaparecido. :D

Jackfort

Cual es la base de datos?

estibaliz2006

y si quiero poner más de un criterio de búsqueda, es decir, hacer un buscador avanzado, donde poder seleccionar los campos por los que buscar y si hay dos campos a buscar me los busque?

Victor De la Rocha

Sólo agrega los inputs que necesites y algún momento (apoyandote de los eventos) realizas la búsqueda.

Para cualquier otro caso, sólo es cuestion de agregar los <input> que necesites y tener en cuenta que cada uno tiene eventos especiales con los cuales podrías tu determinar "en este momento realiza la búsqueda".

Para buscas en dos campos, pues modificas la consulta en base a lo que envíes mediante los _POST.

Creo que es momento de dejar en claro: Para coomprender este documento, es necesario tener cierto dominio (al menos conocimiento básico) del funcionamiento de los formularios, y entender perfectamente que es el envío de datos por _GET, _POST u otro método. http://www.w3schools.com/html/html_forms.asp

Marcelo

AYUDA!!!!!!!


A mi no me funciona porque no tengo los campos nesesarios ;(!!!!!!!!!!!1


Dijiste todo menos la tabla y campo de mysql!!!!


Decime dejando un comentario en mi web...http://mrb.laweb.es o por msn, marcelo11_Cho@hotmail.com



Porfa!!!!

Alex Ludvin

Un saludo cordial a todos y gracias a ti Victor.

quisiera que pulbicases tambien el script d ela BD.

David

El script va perfectamente, pero hay un problema bastante grande, que la paginación no es ajax. Es decir, la busqueda la hace sin hacer la renovación de la página, pero la paginación necesita refrescarla.

Hay alguna forma para que la paginación también sea utilizando ajax?

Alex Ludvin

Como hago paraque al aparecer los links despues de la busqueda, al darle click, por ejemplo me lleve a otra pagina que tengo alojado en mi localhost

Alex Ludvin

Quizas no me explique bien:

Yo en mi buscador tecleo "algorit" y me muestra el contenido que teno en una tabla de mi BD, ahora quisiera saber como al darle click en un link que yo elijo me lleva a otra pagina donde muestro el contenido completo de lo que yo seleccione.

jaime

y si por ejemplo quiero hacer uina busqueda, en la cual yo le envien el nombre del campo donde va a buscar?? los nombres de los campos se pueden manaejar con un combo

gabriel_666

siii, el gran problema de ajax es la letra ñ y Ñ y los acentos, yo tambien hice un buscador pero cuando metia palabras con ñ o Ñ no las encontraba, osea, las encotraba si tecleaba todo en minusculas pero si lo hacia con mayusculas no lo encontraba y es debido a q la ñ y Ñ se codifican de distinto modos y usando la funcion utf8_encode no lo solucionaba, tampoco pasando todo a mayuscula o minuscula con strtoupper y strtolower
todavia sigo buscando como corregir eso si alguien tiene alguna sugerencia

Andres

Hola! Muchas gracias, una gran ayuda.

Como comentario podria decir que si se pone una llamada a la funcion "buscar" al final de la página buscador.php nos ahorrariamos duplicar el codigo.

Siempre insertamos lo que nos de busqueda.php.

Miquel

Victor, eres un crack.

Muchas gracias!!! Funciona todo fenomenal. Me he ahorrado algunas horas.

Quizás cambiaria el LIKE de la SELECT, y hacer la consulta con MATCH.

Miquel

Ah ok, ya veo que usan MATCH en los comentarios, saludos

alejandro

Hola , perdon por mi ignorancia, pero he subido todos los archivos, y resulta que no se donde esta el archivo SQL , me podriais orientar por favor !

mariano

hola alguien me puede decir porque no me conecta configuro todos los parametros (host,user,pass,database) correctamente y me sale " Ocurrió un error al intentar conectar. Verifica que están correctamente los datos dentro de config.php.", que puede pasar..

Gracias

Victor De la Rocha

Quiere decir que tienes mal alguno de los datos en el config.php, quizá no existe la base de datos o estas escribiendo mal el nombre. En algunos hostings se le pone el prefijo de tu usuario a el nombre de tus bases de datos (<em>algo así: mariano_buscador</em>).

mariano

los datos estan bien, lo estoy probando en modo local, pero no se porque no levanta, alguna sugerencia.

Gracias por responder

mariano

hola victor te cuento que ya solucione el tema de la conexion le saque los corchetes y quedo ahora me tira este error y no se porque se procude

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\buscadorajax\busqueda.php on line 26

podiras orientarme.
Gracias

Victor De la Rocha

Antes de la línea en que haces esto:

<code lang="php"><?
$aux = Mysql_Fetch_Assoc(mysql_query($sqlStrAux,$link));
$query = mysql_query($sqlStr.$limit, $link);
?></code>

Agregale esta línea:

<code lang="php">echo $sqlStrAux;</code>

Y muestrame el resultado por favor.

mariano

hola victor ahora me sale este error
Parse error: parse error, expecting `','' or `';'' in C:\xampp\htdocs\buscadorajax\busqueda.php on line 26

25 echo $sqlStrAux
26 $aux = Mysql_Fetch_Assoc(mysql_query($sqlStrAux,$link));
27 $query = mysql_query($sqlStr.$limit, $link);

gracias te puese los numeros de las lineas del codigo para que veas cual es la linea 26

Victor De la Rocha

Te escribiré un correo en privado.

Mariano

Hola Victor. Puedes decirme que agregar exactamente para que no me salgan estos errores:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/mercadol/public_html/librehost.com/buscador.php on line 30

Ya no se como seguir y me parece un excelente buscador para agregar a mi web.

Mariano

Amigo y tocayo Mariano. Aqui solucione ese error que yo tambien tenia. Eso es provocado por un faltante en la configuracion interna.

Aqui te dejo el ZIP (REPARADO) y completo del amigo Victor de la Rocha.

http://rapidshare.com/files/243332101/AjaxReparado_REPARADO.zip.html

Respondenos como te funciono amigo. Saludos muy atentamente

Mariano

Hola. Buen dia Victor de la Rocha.

Yo ya tengo funcionando mi buscador,. Pero tengo una consulta. Exactamente que es lo que tengo que cambiar para que encuentre las palabras a buscar.

Me refiero a que ya agregue mi caja buscadora en el index HTML de mi sitio pero al momento que quiero buscar algo me dice siempre esto:

No hay registros que coincidan con tu búsqueda "PALABRABUSCADA"

Y mi pregunta exactamente es,. Como hago para que quede igual al buscador DEMO.

Saludos y muchas gracias por la respuesta

Victor De la Rocha

Si tu buscador se despliega correctamente, es porque tienes correctamente: /buscador.php

Tienes que hacer que /busqueda.php se vea igual a /buscador.php pero sin la caja de búsqueda, etiqueta <html>, <body>, etc. Sólo los resultados.

Lo mas importante antes de hacer funciona la búsqueda en modo "live search" o en modo "real", "en vivo" es ASEGURARSE que funciona su consulta SQL en el archivo /busqueda.php y /buscador.php.

Para probar la consultas, utilicen el phpMyAdmin o en alguna otra aplicación de su gusto.

Para comprobar que los archivos /busqueda.php y /buscador.php funcionan. Envíenle el parámetro ?q= con una búsqueda de prueba. http://localhost/buscador/busqueda.php?q=buscame+esto

Gyselle

Hola victor, me fue de gran ayuda tu codigo, con el cambio del foco del action funciona correctamente, gracias...

mariano

Hola ante todo agracer al tocayo Mariano por pasarme el buscador reparado, ahora bien, sigo con problemas ahora no me encuentra nada en la busqueda , ponga lo que ponga me pone que no se encontraron datos.

Alguna idea?

Gracias

Victor De la Rocha

Si no muetra datos es por que tienes mal la consulta SQL.

mariano

hola molesto nuevamente, como seria la consulta mi base de datos se llama catalogos y la tabla sala9, como seria porque no le encuentro la vuelta.

Por el momento esta asi

$sqlStr = "SELECT * FROM catalogos WHERE sala9 LIKE '%$q%'"; $sqlStrAux = "SELECT count(*) as total FROM catalogos WHERE sala9 LIKE '%$q%'";
}else{
$sqlStr = "SELECT * FROM catalogos";
$sqlStrAux = "SELECT count(*) as total FROM sala9";
}

Victor De la Rocha

Debería ser así:

$sqlStr = "SELECT * FROM catalogos WHERE (sala9 LIKE '%$q%' OR sala9 LIKE '$q%' OR sala9 LIKE '%$q')";
$sqlStrAux = "SELECT count(*) as total FROM catalogos WHERE (sala9 LIKE '%$q%' OR sala9 LIKE '$q%' OR sala9 LIKE '%$q')";
}else{
$sqlStr = "SELECT * FROM catalogos";
$sqlStrAux = "SELECT count(*) as total FROM catalogos";
}

marc

Buenas Víctor, la verdad es que el tutorial me parece de 10.

Tengo un par de dudas de principiante:

* Cuando cargas la pagina busqueda.php internamente como trabaja el navegador, es decir , como sabe que tiene que sustituir de buscador.php. La pregunta puede parecer un poco estúpida pero me encuentro que en mi caso se me duplica el contenido.

Tengo una lista inicial, con todos los registros y cuando filtro, la lista inicial permanece y ademas aparece la lista filtrada.


* La segunda dude es referente al estilo. Si quiero que la lista filtrada tenga un estilo determinado, debo incluir la hoja de estilo en el archivo busqueda.php o en el archivo buscador.php

Gracias por todo compañero

alejandro

hola a todos se que este post es medio viejito y me a servido mucho pero ahora estoy en la orca quiero saber cual es el archivo que hay que editar buscador.php o busqueda.php tambien

aqui

$sqlStr = "SELECT * FROM preguntas WHERE pregunta LIKE '%$q%'";
$sqlStrAux = "SELECT count(*) as total FROM preguntas WHERE pregunta LIKE '%$q%'";
}else{
$sqlStr = "SELECT * FROM preguntas";
$sqlStrAux = "SELECT count(*) as total FROM preguntas";


en donde pongo la tabla y en donde pongo la bd

no entiendo esa parte


preguntas:?
pregunta:?

que va en cada cual........... ayuda es urgente miren

http://www.centrodescargas.com/buscador/buscador.php

en mi buscador salen Total de registros: 24 pero no hay resultado

ayuda!!!!!!!!!!

mostuni

me sigue sin funcionar, ¿me podrias pasar algun ejemplo con alguna base sql?, asi la cargo en mi server y me fijo que es lo que esta pasando porque no le encuentro la vuelta a esto

Gracias y perdon por todas las molestias

Victor De la Rocha

Los resultados se cargan dentro del <div id="resultados">. El archivo javascript incluido lo localiza y carga el contenido después de haberse realizado la petición por ajax.

La hoja de estilo deberías incluirla en el archivo buscador.php, ya que busqueda.php sólo devuelve resultados, y el buscador en si completo es buscador.php.

Victor De la Rocha

Alejandro, yo veo que funciona correctamente tu buscador. Sólo te hace falta desplegar los datos correctamente:

Cambia los nombres de los campos en buscador.php y busqueda.php en la parte donde muestra los resultados (htmlentities($row['pregunta']), cambialo por el nombre de la columna en tu base de datos que represente el título de lo que se está buscando).

ppx

Tenia el mismo problema y la solucion, cambiar el nombre de buscador.php a index.php.

ah y para motsuni prueba con esta bd.


CREATE TABLE `preguntas` (
`id` int(11) NOT NULL auto_increment,
`pregunta` varchar(40) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;


INSERT INTO `preguntas` VALUES (1, 'google');
INSERT INTO `preguntas` VALUES (2, 'hattrick');
INSERT INTO `preguntas` VALUES (2, 'terra');

ppx

es que victor lo estaba trabajando en index

:)

alejandro

hola que tal ya logre que funcionara muchas gracias pero ahora el problema es que cuando le doy click a cualquier busqueda me manda a tu web como arreglo eso dime...!!

alejandro

gracias Victor De la Rocha pero ahora el problema no lo comprendo, lo que pasa es que lo busca pero cuando le doy click me trae a tu web http://www.centrodescargas.com/buscador/buscador.php

le doy a cualquiera pero me lleva a donde no es

fernando

Excelente compae. Que elegante el codigo cuando lo adapte.

El mio no da una Url+ imagen + descripcion y todo lo que saque de la db.

fernando

Perdon si da una Url+ imagen + descripcion y todo lo que saque de la db.
elegante. Te la echaste con esta.

fernando sarasty

hola, como estas.
tengo un inconveniente que aun no lo logro solucionar, al momento de hacer la búsqueda si me sale el total de registros, pero los registros como tal no me aparacen en pantalla, que podria ser??
muchas gracias
fernando

Cristian

me resulto de lo mas bien.. estuve acomodando mis bases de datos y los resultados , a mi forma,, y que excelente.. muchas gracias...

aunque el buscador sea de año 2007 es genial..

Pablo

Aparece un error y no encuentro la solucion:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /public_html/buscar/index.php on line 30

el archivo subido en Rapidshare tambien tiene error al parecer solo deja descarcarlo pocas veces

haber si puedes enviarme por favor el codigo completo

Esta interesante el buscador

espero me lo puedas enviar

Saludos

Alvaro

Hola te cuento q estoy adaptando tu codigo para poder usarlo con oracle, estoy un poco trnacado en la parte d ela paginacion pero cuando este listo lo comparto. Y muchas gracias

Gerardo

Esta muy bueno el código me sirvió mucho gracias ......

Pero tengo una pregunta porque al momento de buscar algo se pierde la paginación y al inicio si la pone ....

Al iniciar muestra la paginación si le doy siguiente pagina y me quiero regresar al inicio ya no me aparece nada osea se pierden los primeros resultados =(

Gerardo

Buen día, esta muy bueno tu código me sirvió de mucho...

Pero tengo una pregunta al momento de iniciar me pone bien la paginación pero le doy siguiente y todo bien peor le doy atrás o inicio y ya no me pone nada .........

Otra porque al momento de buscar tampoco me respeta la paginación osea pone todos los registros =(

saludos........

Gerardo

Que bien esta tu código me ayudo mucho =)....

pero tengo una pregunta como puedo hacer para agregar mas columnas a la tabla

saludos

Cris. Telematica

buena pagina.
tengo tarea sobre esto. ya lei y creo que va a ser de gran ayuda! ..grac grac

christian

hola amigo podemos estar en contacto tengo algunas dudas si puedes me agregas me llamo christian de peru

Nerhix

Buen Dia, Interesante publicación y sinceramente muy agradecido con el aporte , mi pregunta es la siguiente:

-Ya logre conectar a la BD y configurarlo pero el problema es como vinculo a la web sin que me muestre en la url la variable ?p=id( de la tabla) y me direccione a la pagina que requiero, como Ud, lo hizo en el ejemplo:
http://mis-algoritmos.com/buscador/

Y reiterandole mi respetos y admiracion por el trabajo que Ud. realiza.
Estare agradecido si pudiera responderme
Atte. Henry C.C
gerenciar@hotmail.com

Toby

Me pasa algo raro, me funciona todo a la perfección pero cuando cargo buscador.php me funciona todo perfectamente pero no me sale el listado inicial con todos los resultados, no es hasta cuando introduzco algo en el buscador cuando empieza a mostrarme resultados, ¿imagináis porque es? Gracias.

Zeros

Buen dia ...

Funciona a la perfección solo tengo un problema no se como mandar mas criterios de búsqueda lo he intentado y nada modifique el js y nada el buscador.php y busqueda.php pero nada no se si me podrías ayudar .....

saludos

Eduardo

Hola. tengo la misma pregunta de Zeros. Como hago para poder buscar con mas criterios. por ejemplo. tengo una base de datos con: nombre, descripcion y ciudad. me gustaria es poder por ejemplo que alguien busque el nombre pero que pueda filtrar por ciudad. que busque JOSE en la ciudad de BOGOTA. En un formulario php normal lo logro hacer, pero con ajax no me ha dado el resultado. Alguien sabe como ajustar este excelete scritp a un formulario avanzado ?. Gracias :D

Manuel Avalos

Excelente tutorial... y super útil... gracias papá!

Yenny

hola,, sabes estubo funcionando ok,, hasta q modifique el diseño d la pagina y funciona perfectamente en Mozilla Firefox pero en el bendito explorer se revelo y no hace nada ,,por favor que sugerencias me podria dar...Sabes es una gran aporte de ajax,felicitaciones

Andr35

tengo una inquietud, tengo BD basada en oracle, no me acepta parametros como limit, e estado tratando de investigar creo que es con ROWNUN, mas sin embargo no e podido configurar la funcion para que haga la busqueda! si podrian ayudarme! gracias de antemano!

andy

Que tal amigos !!
Muy buen buscador me agrado y me gusto solo que tengo un pekeño problemilla, y necesito ayuda urgente, si alguien de ustedes puede ayudarme se los agradecere bastante.

Warning: pg_query() [function.pg-query]: Query failed: ERROR: LIMIT #,# syntax is not supported HINT: Use separate LIMIT and OFFSET clauses. in C:Program Files (x86)Apache Software FoundationApache2.2htdocsInventarioArticulosbuscador.php on line 27

Warning: pg_fetch_assoc() expects parameter 1 to be resource, boolean given in C:Program Files (x86)Apache Software FoundationApache2.2htdocsInventarioArticulosbuscador.php on line 108

para esto ustoy utilizando postgresql 8.3


andy

me falto especificar cual es el problema xD ...
En la primera pagina si aparecen resultados y todo parece bien, pero cuando le doy click en siguiente es donde aparecen esos mensajes.

gracias por cualkier recomenacion

valeria

mis respetos, casi 3 años después y tu código sigue ayudando.. tiene un par de deprecados ya xD pero todo genial! .. mil gracias! ;)

Victor De la Rocha

Valeria, Muchas Gracias por tu comentario ;)

Diego

Hola, muy buena la publicación, excelente herramienta para la consulta.
Tengo un inconveniente, al buscar las primeras 3 palabras las obvia y genera este error Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:AppServwwwconsulta_ajaxbuscadorbusqueda.php on line 26
y despues de la tercera letra busca sin problema, quede un poco confundido ya que e realizado muchas pruebas con el codigo y el error persiste.

Diego

Ya solucione el problema, era el tipo de campo en la base de datos que cree, pero la pregunta seria si este modelo aplicaria tambien para el uso con SQL server.. de nuevo gracias por este valioso aporte

pattan

excelente buscador, excelente herramienta, mis felicitaciones.
Solo una duda, deseo mostrar los registros por orden descente, segun la fecha de ingreso.
Al generar la consulta muestra los datos por orden descendente solo en la primera hoja , al consultar la pagina 2 los muestra en orden ascendente, como puedo cambiar el orden de la consulta.
por favor ayuda.

Edwin

Muy buen tutorial Gracias

Edwin

Hola Me gustaría saber que al seleccionar un registro de los listados en el buscador me lleve a el y me deje actualizarlo.

Juan

alguna solucion para el problema de la ñ Ñ ???

saludos

Eduardo

muy bueno brother felicidades me sirvio un bue gracias

Victor De la Rocha

Juan el problema para la ñ o Ñ o cualquier símbolo especial se soluciona utilizando utf8.

Eduardo

Disculpa, ya implemente el código junto con las modificaciones, no obstante, cuando tecleo alguna letra, por ejemplo: c, me envía lo siguiente:

array(1) {["nom"]=> string(4) "call"}
1 resultado que coinciden con tu búsqueda "c".

y no aparece nada en la tabla, podrias decirme porque sale este mensaje, porfavor.
De antemano muchas gracias.

THEIFTHENELSE

Hola Victor genial tu blog.

Bueno Victor dejame ver como te explico para que me puedas entender y asi recibir tu variosa ayuda mas rapido.

1- tengo en DB tres tablas: Negocios, Municipios y Anuncios.

CREATE TABLE negocios (
negoid int(10) unsigned NOT NULL AUTO_INCREMENT,
nom_negocio char(100) NOT NULL,
PRIMARY KEY (negoid)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


CREATE TABLE municipios (
munid int(10) unsigned NOT NULL AUTO_INCREMENT,
provincia_padre int(10) unsigned NOT NULL,
munombre char(40) NOT NULL,
PRIMARY KEY (munid),
KEY provid (provincia_padre)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE anuncios (
idanuncio int(5) unsigned NOT NULL AUTO_INCREMENT,
cliente_nombre int(11) unsigned NOT NULL,
negocio_nombre int(3) unsigned NOT NULL,
municipio_nombre int(3) unsigned NOT NULL,
nombre varchar(45) NOT NULL,
direccion varchar(100) NOT NULL,
telefonoNegocio varchar(13) NOT NULL,
SitioWeb varchar(20) NOT NULL,
foto varchar(60) NOT NULL,
descripcion varchar(500) NOT NULL,
PRIMARY KEY (idanuncio),
KEY negoid (negocio_nombre),
KEY munid (municipio_nombre),
KEY idcli (cliente_nombre)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Como puedes observar yo relaciono las tablas de negocio y municipio con la de anuncio es donde unicamente se relacionan sus ids por esta tercera tabla.

Pues quiero lograr eso mismo lo que hace tu buscador, solo que con dos campos:
Por ejemplo:

1-Negocios: un texbox (donde pongo el nombre del negocio que quiero)
2-Municipio: un Drop Down (Seleccionar el municipio que quiero) Nota(ultizaria un menu de salto, de tal forma al seleccionarlo me lance la pagina de resultados) osea la lista de todos los anuncios que pertenecen a este municipio.

Mi primera duda: tengo bien la relacion con mis tablas?

Mi segunda duda: es posible lograr eso? por favor toda la ayuda que puedas suministrarme te lo agradezco en el alma.... seria bueno que creara un tutorial asi mismo, pero con varios campos incluyendo desplegables...

De antemano muchisisimas gracias por tu inmensa ayuda... se que es un sacrificio inmenso y lo haces por vocacion... Gracias.

Ahhhhh mi pagina web no la he subido aun... es la que estoy desarrollando actualmente....

Angel

Estoy interesado en hacer algo asi para un proyecto que estoy realizando, pero se podria hacer lo mismo pero en ves de ser con un input que sea con varios select?

Kpary

muy buen articulo!
Que pena que no hayas incluido en este articulo ni en el archivo para descargar las Base De Datos con sus respectivas tablas y algunos registros de prueba.

Estaria bueno que lo integraras.

Muchas gracias
Saludos!

Ozk

Victor,

Hola! La verdad q el codigo este esta muy practico, es muy maleable para hacer las consultas que se necesitan (sea like, match o lo q sea, teoria de sql pura... muy bueno! :D ) La verdad q te felicito, aun hoy dia SIGUE VIGENTE! La verdad q hago funcionar al pelo... salvo el tema de caracteres multilinguales! (ñ, á, ß, etc.)

La conexion la fuerzo con un utf8 En el archivo conexion.php, meto un @mysql_query("SET NAMES 'UTF-8'"); (tb se puede poner un cotejamiento de un charset tal o cual, y funciona indistintamente, asi q aca no hay dramas) Y si bien la busqueda del caracter multilingual funciona (o sea, el utf8 llego"vivo" al mysql) en la barra de busqueda (dominio.algo/?q=Stra%DFe), no funciona via el cuadro de busqueda de index.php / busqueda.php... intente jugar un poco con utf8_encode & utf8_decode... pero creo q lo hice en los lugares y de la forma equivocada...

O sea, antes de preguntar, me documente pa preguntar: ¿como hago para que haga la busqueda en ajax de carateres en utf8?

Ozk

Bueno gente, mas o menos lo resolvi, asi que como este codigo lo uso mogollon, lo menos que puedo hacer es compartir la solucion! :D Reemplazando en la busqueda (en busqueda.php) '%$q%' con '%".utf8_decode($q)."%' hara la busqueda necesaria... pero no queda enteramente, ya que imprime la busqueda con caracteres chungos... eso se soluciona cambiando:

$busqueda = htmlentities($q); //para mostrar en pantalla

por esta otra

$busqueda = utf8_encode($q); //para mostrar en pantalla

Si a alguien se le ocurre algo mas elegante para resolver esto, por favor, que lo comparta! (xq otra manera de hacerlo, no se me ocurrio... y despues de todo, funciona!)

PD: Por ultimo, recomiendo cambiar el archivo de conexion, forzando a conectarse en utf8, y a elegir el cotejamiento que os sea mas util (sea hungaro, eslovaco, sueco... elegid, q pa eso estan! :D )

leidy

hola tu buscador esta super victor, me gustaria adptarlo a mi pagina pero me da este error, lei en las respuestas de los amigos de arriba y alguna configuraion me podrias ayudar por fa, tambien hay un link con la solucion pero no funciona.. gracias por tu ayuda.. saludos =)..
este es el error:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:Program FilesEasyPHP 3.0wwwNueva carpeta (2)buscador.php on line 29


Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:Program FilesEasyPHP 3.0wwwNueva carpeta (2)busqueda.php on line 26

Jose Eduardo

Muy buen ejemplo 100% funcional y muy util gracias por el aporte :D

carlos caicedo

Genial, que existan personas como vos, lsto y dispuestos a compartir lo que saben. Dios te bendiga! (perdon si ofendo tus credos). Mira estoy realizando una aplicacion, que tiene su header, su footer y su parte central o body, en el body tengo dos divs: un div funge de barra lateral izquierda y el div derecho se destino a contener datos; pero en este último div, que lo he llamado como vos al tuyo ("resultados") tengo un div pequeño que contiene la caja de busqueda y en la parte de abajo hay otro div destinado a contener los datos de una busqueda, la idea es que ahi se ponga una consulta que puede arrojar varias filas y quiero que queden metidas como en una tabla.

Podés decirme si tu codigo lo hace, o tengo que hacer algunos ajustes (clao los de la tabla) Te seré un seguidor de ti siempre agradecido. Mil gracias!

MarkGus

a nadie mas le marco error en el
$p->target("buscador.php?q=".urlencode($q));

cuando le paso alguna variable a la q no me funciona
y probé con el archivo busqueda.php así
$p->target("busqueda.php?q=".urlencode($q));

y asi si me funciona, y pues ya copie y pegue el codigo de busqueda.php a el de buscador.php y sigue marcando error

en resumen cuando yo le paso algo a q, en buscador.php me marca error

$p->target("buscador.php?q=".urlencode($q));

alguien que haya tenido el mismo problema? que me pueda ayudar

MarkGus

ya pude usarlo muchas gracias Victor esta muy bueno el buscador

Yony Montan

Alguel puede pasarme el proyecto completo, el que esta publicado tiene errores gracias .....

PPK17

Muchas gracias por esto, al principio no me cuadraba, pero con mucho esfuerzo lo modifique a mi gusto, ya que soy realmente un principiante en programacion.
Pude modificar los registros agregando un campo de tipo radio que me manda a otra pagina, donde modifico todo lo que quiero, nuevamente felicidades!!!

Ness

Oigan amigos... no funciona la paginación.. ya intenté resolverlo y cuando presiono la página 2 me manda vacío...

1) Ya revisé lo del target y no es eso.
2) Modifiqué la consulta metiéndole un OR porque en mi caso yo busco que coincidan TITULO y DESCRIPCION son los nombres de los 2 campos que quiero encontrar coincidencias.

Ya para los que tienen muchos campos que coincidir, pueden usar MATCH como bien dicen.

Pero la solución de la paginación no lo he resuelto... aparte veo que tienes duplicado el código en buscador.php y búsqueda.php .. se podría hacer una función como bien dicen.

Lo que yo intentaré hacer es METERLE MI PROPIA PAGINACIÓN. (Ya que tengo un algoritmo para paginar).

En cuanto haya probado con mi algoritmo de paginación les aviso.

jose

Necesito akax php y postgres, sobre busqueda de una sola columna
Alf

jose

Busqueda de un solo campo por decir nombre de colegio en un combo box pero eso si con Php, postgres y Ajax. Gracias

Zerocool

Se puede implementar la clase de paginacion con jquery o me pueden me podria ayudar

crowman

Esta genial el buscador, muchas felicidades

juan carlos

gracias muy buen aporte a todos millones de puntos esta al 100%

juan zuñiga

exelente compadre lo necesitaba un 10 este si que es un buen post :) mil gracias (Y)

Sofyan


if(isset($_GET['q']) and !stripos('^ *$',$_GET['q'])){
$q = sql_quote($_GET['q']); //para ejecutar consulta
$busqueda = htmlentities($q); //para mostrar en pantalla





hAY UN ERROR EN ESTE CODIGO HAY QUE QUITAR LA FUNCION

eregi() Y SUSTITUIRLA POR stripos()




lucas

hola me salio este error


Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/a9733878/public_html/busqueda.php on line 26
la liena 26 seria :


me podrías decir como lo soluciono gracias

Uriel Ceron

Mexico, Quintana Roo.
Hola a todos!!!
links
http://php.apsique.com/ajax/utf8
http://xaviesteve.com/354/acentos-y-enes-aparecen-mal-a%C2%B1-en-php-con-mysql-utf-8-iso-8859-1/
--------------------------
Solucion de la ñ

en el archivo busqueda.php
cambia
$q = sql_quote($_GET['q']);

por
$q = sql_quote(utf8_decode($_GET['q']));

Saludos!!!!
A mi me funciono, espero comentarios....

Pablo

Hola estoy intentando modificar la busqueda para que busque en varios campos de la misma tabla y he hecho esto:
$sqlStrAux = "SELECT count(*) as total FROM Mi_Tabla WHERE campo1 LIKE '%$q%' OR campo2 LIKE '%$q%'";

el tema es que al introducir alguna busqueda me dice que hay resultados pero no me los muestra tambien he modificado la tabla de resultados para que tenga dos columnas y funciona perfectamente:

echo "tt<tr class="row$r"><td width=400px><a href="../ver.php?id={$row['id']}" target="_parent">".htmlentities($row['campo1'])."</a></td><td>".htmlentities($row['campo2'])."</td></tr>n";

Podrias echarme una mano.
Gracias

ariel

hola, antes que nada el aporte es muy bueno, pero hay cosas que no logro modificar, por ejemplo
como dijo pablo en un comentario, si le agrego condiciones a la consulta, por mas que las encuentre no me las muestra, luego en el bucle while, no logro modificarlo a gusto, y tampoco encuentro donde esta el blucle que muestra los resultados para poder formatearlo.
por lo que vi, no hay respuestas a las consultas, pero por las dudas posteo igual, por si alguien lo lee
saludos

ariel

por ahi alguien comento que pudo modificar el codigo a gusto, sobre todo la parte del formateo de los resultados, estaria bueno que digan como, ya que no logro hacerlo, y por ejemplo linkear los resultados a mi pagina
saludos

ariel

hola amigos, necesito ayuda, si alguien puede decirme cual es la pagina que debo modificar para poder formatear los resultados de las busquedas, ya que no encuentro como hacerlo!
saludos y gracias

ariel

ya pude resolver todos los pequeños problemitas que tenia!! y formatear los resultados a mi gusto
muchas gracias por el aporte victor! saludos cordiales

Xtian

Hola victor, estoy queriendo utilizar tu buscador para un trabajo practico de la facultad, pero quieron implementar me tope que no tengo la BD de tu ejemplo, podrias pasarmelo porfavor, te estare eternamente agradecido jeje..

saludos
christian arce

ayanamy

como poner imagen al bucador cuando muestra los resultados
ala derecha

anghel

Victor muy buena tu explicacion, pero yo tengo un pequeno problema con los caracteres.

el carecter & me corta la palabra. cuando busco por desir sodas & bebidas

pero los otros caracteres funcionan y la tilde tambien, solo tengo problemas con el caracter &

Gracias, muy buen blog

Mario Roman

Muchísimas gracias por el código funciona excelente y hace ver muy bien a mi página.
Cuando entro a mi página buscador.php aparece el cuadro de búsqueda y escribo algo lo encuentra y lo muestra y si borro el texto del cuadro de busqueda me vuelve a mostrar todos los registros de la tabla.

Tengo solo un problema

Cuando le doy F5 a la pagina buscador.php otra vez escribo algo en el cuadro de busqueda, lo encuentra y lo muestra, pero ahora si borro el texto del cuadro de busqueda ya no me vuelve a mostrar todos los registros de la tabla. Por favor si a alguien le pasó y lo solucionó por favor echénme la mano ;)

Yudith

Hola! Disculpa.. Me da errores... ademas no se que colocar en config.php.. .S.O.S. :/

Sonia

Hola, eh visto que algunos ya arreglaron el problema de mysql_fetch
Warning: mysql_query() expects parameter 2 to be resource, null given in /var/www/sysmweb/buscador ajax/buscador/buscador.php on line 30

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, null given in /var/www/sysmweb/buscador ajax/buscador/buscador.php on line 30

Warning: mysql_query() expects parameter 2 to be resource, null given in /var/www/sysmweb/buscador ajax/buscador/buscador.php on line 31

Alguien puede decirme como lo arreglo?
por que la consulta funciona perfectamente, me trae bien los resultados pero me sale ese error.
Saludos

Sonia

Yudith tal ves ya lo resolviste pero si no debe de quedar algo asi <?php
$host = 'localhost(el hosting)';
$user = 'root(usuario de mysql)';
$pass = 'contraseña de tu mysql';
$db = 'tubase';
?>

Mine

como se implementaria el buscador en oracle?

Deja un comentario

¿Cuanto es 2 + 3 - 5? =

Suscribirse a los comentarios.