Estoy tratando de hacer un buscador web en ajax, encontre un codigo muy bueno y he tratado de modificarlo para que pueda buscar segun varios criterios.
Por ejemplo, tengo en una tabla los datos Nombre, Descripcion, Ciudad. Entonces la idea es que en el buscador alguien busque un nombre, si no especifica la ciudad pues que salgan todos los nobres segun la busqueda, pero que si el usuario quiere, pueda filtrar los nombres por ciudad. Por ejemplo buscar Eduardo en bogota. Entonces despligue los resultados si hay eduardos en bogota. Espero que me puedan colaborar.
Aui dejo lo que llevo trabajado.
Buscador.php:
Código PHP:
<?php
/*
* Buscador en AJAX. Ejemplo creado por Victor De la Rocha [http://www.mis-algoritmos.com]
* http://www.mis-algoritmos.com/?p=169
*/
require('config.php');
require('include/conexion.php');
require('include/funciones.php');
require('include/pagination.class.php');
$items = 10;
$page = 1;
if(isset($_GET['page']) and is_numeric($_GET['page']) and $page = $_GET['page'])
$limit = " LIMIT ".(($page-1)*$items).",$items";
else
$limit = " LIMIT $items";
if(isset($_GET['q']) and !eregi('^ *$',$_GET['q'])){
$q = sql_quote($_GET['q']); //para ejecutar consulta
$c = sql_quote($_GET['c']);
$busqueda = htmlentities($q); //para mostrar en pantalla
$sqlStr = "SELECT * FROM preguntas WHERE pregunta LIKE '%$q%' OR ciudad ='%$c%'";
$sqlStrAux = "SELECT count(*) as total FROM preguntas WHERE pregunta LIKE '%$q%' OR ciudad ='%$c%'";
}else{
$sqlStr = "SELECT * FROM preguntas";
$sqlStrAux = "SELECT count(*) as total FROM preguntas";
}
$aux = Mysql_Fetch_Assoc(mysql_query($sqlStrAux,$link));
$query = mysql_query($sqlStr.$limit, $link);
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Buscador en AJAX</title>
<link rel="stylesheet" href="pagination.css" media="screen">
<link rel="stylesheet" href="style.css" media="screen">
<script src="include/buscador.js" type="text/javascript" language="javascript"></script>
</head>
<body>
<form action="index.php" onsubmit="return buscar()">
<label>Buscar</label> <input type="text" id="q" name="q" value="<?php if(isset($q)) echo $busqueda;?>" onKeyUp="return buscar()">
<label>
<select name="c" id="c">
<option value="bogota">bogota</option>
<option value="medellin">medellin</option>
</select>
</label>
<input type="submit" value="Buscar" id="boton">
<span id="loading"></span>
</form>
<div id="resultados">
<p><?php
if($aux['total'] and isset($busqueda)){
echo "{$aux['total']} Resultado".($aux['total']>1?'s':'')." que coinciden con tu búsqueda \"<strong>$busqueda</strong>\".";
}elseif($aux['total'] and !isset($q)){
echo "Total de registros: {$aux['total']}";
}elseif(!$aux['total'] and isset($q)){
echo"No hay registros que coincidan con tu búsqueda \"<strong>$busqueda</strong>\"";
}
?></p>
<?php
if($aux['total']>0){
$p = new pagination;
$p->Items($aux['total']);
$p->limit($items);
if(isset($q))
$p->target("index.php?q=".urlencode($q));
else
$p->target("index.php");
$p->currentPage($page);
$p->show();
echo "\t<table class=\"registros\">\n";
echo "<tr class=\"titulos\"><td>Titulo</td></tr>\n";
$r=0;
while($row = mysql_fetch_assoc($query)){
echo "\t\t<tr class=\"row$r\"><td><a href=\"http://www.mis-algoritmos.com/?p={$row['id']}\" target=\"_blank\">".htmlentities($row['pregunta'])."</a></td></tr>\n";
if($r%2==0)++$r;else--$r;
}
echo "\t</table>\n";
$p->show();
}
?>
</div>
</body>
</html>
Código PHP:
<?php
require('config.php');
require('include/conexion.php');
require('include/funciones.php');
require('include/pagination.class.php');
$items = 10;
$page = 1;
if(isset($_GET['page']) and is_numeric($_GET['page']) and $page = $_GET['page'])
$limit = " LIMIT ".(($page-1)*$items).",$items";
else
$limit = " LIMIT $items";
if(isset($_GET['q']) and !eregi('^ *$',$_GET['q'])){
$q = sql_quote($_GET['q']); //para ejecutar consulta
$c = sql_quote($_GET['c']);
$busqueda = htmlentities($q); //para mostrar en pantalla
$sqlStr = "SELECT * FROM preguntas WHERE pregunta LIKE '%$q%' OR ciudad ='%$c%'";
$sqlStrAux = "SELECT count(*) as total FROM preguntas WHERE pregunta LIKE '%$q%' OR ciudad ='%$c%'";
}else{
$sqlStr = "SELECT * FROM preguntas";
$sqlStrAux = "SELECT count(*) as total FROM preguntas";
}
$aux = Mysql_Fetch_Assoc(mysql_query($sqlStrAux,$link));
$query = mysql_query($sqlStr.$limit, $link);
?> <p><?php
if($aux['total'] and isset($busqueda)){
echo "{$aux['total']} Resultado".($aux['total']>1?'s':'')." que coinciden con tu búsqueda \"<strong>$busqueda</strong>\".";
}elseif($aux['total'] and !isset($q)){
echo "Total de registros: {$aux['total']}";
}elseif(!$aux['total'] and isset($q)){
echo"No hay registros que coincidan con tu búsqueda \"<strong>$busqueda</strong>\"";
}
?></p>
<?php
if($aux['total']>0){
$p = new pagination;
$p->Items($aux['total']);
$p->limit($items);
if(isset($q))
$p->target("index.php?q=".urlencode($q));
else
$p->target("index.php");
$p->currentPage($page);
$p->show();
echo "\t<table class=\"registros\">\n";
echo "<tr class=\"titulos\"><td>Titulo</td></tr>\n";
$r=0;
while($row = mysql_fetch_assoc($query)){
echo "\t\t<tr class=\"row$r\"><td><a href=\"http://www.mis-algoritmos.com/?p={$row['id']}\" target=\"_blank\">".htmlentities($row['pregunta'])."</a></td></tr>\n";
if($r%2==0)++$r;else--$r;
}
echo "\t</table>\n";
$p->show();
}
?>
Código PHP:
function xmlhttp(){
var xmlhttp;
try{xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");}
catch(e){
try{xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");}
catch(e){
try{xmlhttp = new XMLHttpRequest();}
catch(e){
xmlhttp = false;
}
}
}
if (!xmlhttp)
return null;
else
return xmlhttp;
}
function buscar(){
var query = document.getElementById('q').value;
var query2 = document.getElementById('c').value;
var A = document.getElementById('resultados');
var B = document.getElementById('loading');
var ajax = xmlhttp();
ajax.onreadystatechange=function(){
if(ajax.readyState==1){
B.innerHTML = "<img src='images/loading.gif' alg='Loading...'>";
}
if(ajax.readyState==4){
A.innerHTML = ajax.responseText;
B.innerHTML = "";
}
}
ajax.open("GET","busqueda.php?q="+encodeURIComponent(query),true);
ajax.send(null);
return false;
}
Código PHP:
<?php
function sql_quote( $value )
{
if( get_magic_quotes_gpc() )
{
$value = stripslashes( $value );
}
//check if this function exists
if( function_exists( "mysql_real_escape_string" ) )
{
$value = mysql_real_escape_string( $value );
}
//for PHP version < 4.3.0 use addslashes
else
{
$value = addslashes( $value );
}
return $value;
}
?>
Esos son los archivos que interactua el buscador. Ya la conexion a la base de datos me funciona, pero no logro hacer el filtro segun los criterios que el usuario escoja, en este caso, buscar solo por ciudad.
Aqui pueden ver el buscador corriendo:
http://www.grupoedal.com/b/buscador.php
Espero me puedan colaborar !! Gracias !!!