Ver Mensaje Individual
  #3 (permalink)  
Antiguo 09/01/2008, 05:37
Avatar de estibaliz2006
estibaliz2006
 
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 6 meses
Puntos: 1
Re: buscador en ajax

ok. perdona. mira lo que voy a hacer es poner el ejemplo que me valió a mí para realizar mi buscador y sobre él os hago las consultas, ok? bueno. os cuento. Supongamos una base de datos llamada 'ejemplo' con una tabla llamada 'alumnos' donde existen tres campos: idalumno (autonumérico), nombre, direccion.

las funciones en javascript son las siguientes: página funciones.js

Código PHP:
function nuevoAjax(){
    var 
xmlhttp=false;
    try{
        
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(
e){
        try {
            
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }catch(
E){
            
xmlhttp false;
        }
    }

    if (!
xmlhttp && typeof XMLHttpRequest!='undefined') {
        
xmlhttp = new XMLHttpRequest();
    }
    
    return 
xmlhttp;
}

function 
buscarDato(){
    
resul document.getElementById('resultado');
    
    
bus=document.frmbusqueda.dato.value;
    
    
ajax=nuevoAjax();
    
ajax.open("POST""busqueda.php",true);
    
ajax.onreadystatechange=function() {
        if (
ajax.readyState==4) {
            
resul.innerHTML ajax.responseText
        
}
    }
    
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    
ajax.send("busqueda="+bus)


El formulario de consulta es el siguiente:

Código HTML:
<head>
<title>Buscador en Ajax</title>
<!-- referenciamos al archivo funciones.js donde se encuentra la funcion objetoAjax-->
<script language="JavaScript" type="text/javascript" src="funciones.js"></script>
</head>

<body>
<form name="frmbusqueda" action="" onsubmit="buscarDato(); return false">
  <div align="center">Buscar Alumno:
    <input type="text" name="dato" /> 
  </div>
</form>
<fieldset><legend>Resultado</legend>
<div id="resultado"></div>
</fieldset>
</body> 
Por último, la página que consulta los datos y los muestra es la siguiente: busqueda.php

Código PHP:

$busqueda=$_POST['busqueda'];
// DEBO PREPARAR LOS TEXTOS QUE VOY A BUSCAR si la cadena existe
if ($busqueda<>''){
    //CUENTA EL NUMERO DE PALABRAS
    $trozos=explode(" ",$busqueda);
    $numero=count($trozos);
    if ($numero==1) {
        //SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE
        $cadbusca="SELECT * FROM alumnos WHERE nombre LIKE '%$busqueda%' OR direccion LIKE '%$busqueda%' LIMIT 10;";
    } 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
        $cadbusca="SELECT * , MATCH ( nombre, direccion) AGAINST ( '$busqueda' ) AS Score FROM alumnos WHERE MATCH ( nombre, direccion) AGAINST ( '$busqueda' ) ORDER BY Score DESC LIMIT 50;";
    }
    
    function limitarPalabras($cadena, $longitud, $elipsis = "..."){
        $palabras = explode(' ', $cadena);
        if (count($palabras) > $longitud)
            return implode(' ', array_slice($palabras, 0, $longitud)) . $elipsis;
        else
            return $cadena;
    }
?>
    <table style="width:100%;" border="1px"> 
    <tbody>
        <tr>
            <td class="nombre">Nombre</td>
            <td class="direccion">Direccion</td>
            
        </tr>
<?php
    $result
=mysql_query($cadbusca$con);
    
$i=1;
    while (
$row mysql_fetch_array($result)){
        echo 
"
            <tr>
                <td class=\"nombre\">"
.$row[nombre]."</td>
                <td class=\"direccion\">"
.limitarPalabras($row[direccion],20)."</td>
                
            </tr>"
;
        
$i++;
    }
}
?>
    </tbody>
    </table>
Bien. hasta aquí funciona todo más o menos. mis preguntas ahora serían:

1.- ¿cómo hago para que si no existen datos con los criterios de búsqueda aparezca que no existen datos?
2.- ¿cómo hago para meter un mensaje que diga se han encontrado "x" resultados con esos criterios de búsqueda?

a ver si me echáis un cable. gracias