Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/12/2007, 21:22
komodo
 
Fecha de Ingreso: noviembre-2006
Mensajes: 437
Antigüedad: 18 años
Puntos: 3
Busqueda en ajax en una base de datos Mysql

Hola foreros. Tengo un problema que no consigo solucionar y por eso me dirijo a ustedes. Quiero realizar una busqueda a una tabla de una base de datos con un criterio de busqueda y poder seleccionar el campo en el que quiro buscar. Me explico:
Teniendo una tabla con los campos id, nombre, apellidos, tengo que hacer un buscador que me permita escribir en un text el criterio de busqueda y en un select seleccionar el campo de la base de datos que quiero.

¿Como podria hacerlo?¿Sabeis de algun ejemplo?

He probado con lo siguiente pero sin resultado..
Buscador.php
Código PHP:
<?php
require('config.php');
require(
'include/conexion.php');
require(
'include/funciones.php');

$tabla="usuarios";
if(isset(
$_GET['campo'])){
$campo=$_GET['campo'];
}
else{
$campo="usuario";
}


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

        
$sqlStr "SELECT * FROM ".$tabla." WHERE ".$campo." LIKE '%$q%'";
        
$sqlStrAux "SELECT count(*) as total FROM ".$tabla." WHERE ".$campo." LIKE '%$q%'";
    }else{
        
$sqlStr "SELECT * FROM ".$tabla;
        
$sqlStrAux "SELECT count(*) as total FROM ".$tabla;
    }

$aux mysql_fetch_assoc(mysql_query($sqlStrAux,$link));
$query mysql_query($sqlStr$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>
<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()">
      <select name="campo" onchange="return buscar()">
      <?php
      
for($i=0;$i<mysql_num_fields($query);$i++)
                                {
                                   echo 
"<option value=".mysql_field_name($query,$i).">".mysql_field_name($query,$i)."</option>";
                                }
      
?>
      </select>
      <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: <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: <strong>[ ".$busqueda." ] </strong>";
            }
    
?></p>

    <?php 
        
if($aux['total']>0){
            echo 
"<table border='1'>";
            echo 
"<tr>";
            for(
$i=0;$i<mysql_num_fields($query);$i++)
                                {
                                   echo 
"<td>".mysql_field_name($query,$i)."</td>";
                                }
            echo 
"</tr>";
            
$total_campos=mysql_num_fields($query);
            while(
$row mysql_fetch_array($query)){
          echo 
"<tr>";
          for(
$i=0;$i<$total_campos;$i++){
          echo 
"<td>".htmlentities($row[$i])."</td>";
                                          }
          echo 
"</tr>";
          }
           echo 
"</table>";
        }
    
?>
    </div>
</body>
</html>
Buscador.js
Código:
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('campo').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)"&campo="+encodeURIComponent(query2),true);
		ajax.send(null);
		return false;
	}
busqueda.php
Código PHP:
<?php
require('config.php');
require(
'include/conexion.php');
require(
'include/funciones.php');

$tabla="usuarios";
if(isset(
$_GET['campo'])){
$campo=$_GET['campo'];
}
else{
$campo="usuario";
}


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

        
$sqlStr "SELECT * FROM ".$tabla." WHERE ".$campo." LIKE '%$q%'";
        
$sqlStrAux "SELECT count(*) as total FROM ".$tabla." WHERE ".$campo." LIKE '%$q%'";
    }else{
        
$sqlStr "SELECT * FROM ".$tabla;
        
$sqlStrAux "SELECT count(*) as total FROM ".$tabla;
    }

$aux mysql_fetch_assoc(mysql_query($sqlStrAux,$link));
$query mysql_query($sqlStr$link);
?>    <p><?php
        
if($aux['total'] and isset($busqueda)){
                echo 
"{$aux['total']} Resultado".($aux['total']>1?'s':'')." que coinciden con:<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:<strong>[ ".$busqueda." ]</strong>";
            }
    
?></p>

    <?php 
        
if($aux['total']>0){
            echo 
"<table border='1'>";
            echo 
"<tr>";
            for(
$i=0;$i<mysql_num_fields($query);$i++)
                                {
                                   echo 
"<td>".mysql_field_name($query,$i)."</td>";
                                }
            echo 
"</tr>";
            
$total_campos=mysql_num_fields($query);
            while(
$row mysql_fetch_array($query)){
          echo 
"<tr>";
          for(
$i=0;$i<$total_campos;$i++){
          echo 
"<td>".htmlentities($row[$i])."</td>";
                                          }
          echo 
"</tr>";
          }
           echo 
"</table>";
        }
    
?>
Un saludo y grácias de antemano, espero que puedan ayudarme