Foros del Web » Programando para Internet » PHP »

Funcion de Busqueda

Estas en el tema de Funcion de Busqueda en el foro de PHP en Foros del Web. Tengo 2 Archivos una funcion de busqueda y mi archivo buscar.php funciones.php Código PHP: <?  function  search_query  ( $buscar , $tablas , $campos ) {       ...
  #1 (permalink)  
Antiguo 28/07/2004, 13:59
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 20 años, 9 meses
Puntos: 2
Funcion de Busqueda

Tengo 2 Archivos una funcion de busqueda y mi archivo buscar.php

funciones.php
Código PHP:
<? function search_query ($buscar,$tablas,$campos) { 

    
// Divido los campos, las tablas y el texto en un array 
    
$campos explode('|',$campos); 
    
$tablas explode('|',$tablas); 
    
$buscar explode(' ',$buscar); 
     
    
// Hago un query por cada tabla 
    
foreach($tablas as $tabla) { 
        
$condiciones = array(); 
        
// Comienzo a definir la sintaxis 
        
$sintax 'SELECT * FROM ' addslashes($tabla) . ' WHERE '
        foreach(
$campos as $campo) { 
            
// Busco en cada campo cada palabra del texto que as puesto en buscar. 
            
foreach($buscar as $buscarr) { 
                
$campoo explode('.',$campo); 
                
// Si el campo es perteneciente a la tabla que estoy haciendo el query ejecuto: 
                
if($tabla == $campoo[0]) { 
                    
// Añado el like 
                    
$condiciones[] = addslashes($campoo[1]) . ' LIKE \'%' addslashes($buscarr) . '%\''
                } 
            } 
        } 
         
        
// Con este implode pongo todos los OR 
        
$sintax .= implode(" OR ",$condiciones); 
         
        
$resp mysql_query($sintax) or die(mysql_error()); 
        
// Meto en el array los resultados de esta busqueda 
        
while($encontrado mysql_fetch_assoc($resp)) $retorno[] = $encontrado
    } 
    return 
$retorno

 
?>
buscar.php

Código PHP:
<? 
<?php 
include("config.php");
include(
"funciones.php");

// Ejemplo de uso: 
// $resp = search_query("<palabras a buscar separado por espacios>","<tablas sql en donde buscar separadas por |>","<campos a buscar separados por | (los campos deben ser escribidos asi tabla.campo1,tabla.campo2 (en donde dice tabla pondra la tabla que usara de las tablas que hayas seleccionado)>"); 
// Un Ejemplo de la funcion search_query seria:
if (isset($_POST['busqueda'])) {
    
$consulta trim($_POST['busqueda']);
    if(
$consulta == "") {
    echo 
"No hubo Resultados";
    } else {        
$resp search_query("$consulta","entradas","entradas.titulo|entradas.intro|entradas.texto");
while(
$sql search_fetch_array($resp)) { 
    
// Aqui lo que quieras :) 
$query2 "SELECT nombre FROM categorias WHERE id = " $sql['categoria'] . ""
$resp2 mysql_query($query2);
$sql2 mysql_fetch_array($resp2); 
echo 
"- <a href=\"index.php?op=leer&amp;entrada=" $sql['id'] . "\">" $sql['titulo'] . "</a> - ".$sql2['nombre'].", (" $sql['fecha'] . ")<br/>";
}
}
}
?> 
 ?>
Como veran funciona, pero cuando no haya resultados no muestra nada ... Quiero poner un mensaje en el cual diga que no hubo resultados, que debo modificar .. GRacias
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #2 (permalink)  
Antiguo 29/07/2004, 07:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Usando mysql_num_rows() puedes saber el nº de resultados (registros) arrojados por tu consulta SQL:

Código PHP:
        $resp mysql_query($sintax) or die(mysql_error()); 
        if (
mysql_num_rows($resp) > 0){
        
// Meto en el array los resultados de esta busqueda 
        
while($encontrado mysql_fetch_assoc($resp)) $retorno[] = $encontrado
       }else{
          
$retorno=FALSE;
       }
    } 
Como usas una función .. usé como resultado a devolver un "boolean" tipo "FALSE" si no hay resultados. Así que tu función .. o devolverá un array o un FALSE .. lo cual podrás usa bajo un condicional (IF) como el ejemplo:

Código PHP:
if ($resp search_query("$consulta","entradas","entradas.titulo|entradas.intro|entradas.texto")){
    
// obtienes tus resultados (record-set)
    
while($sql search_fetch_array($resp)) { 
      
// Aqui lo que quieras :) 
     
$query2 "SELECT nombre FROM categorias WHERE id = " $sql['categoria'] . ""
     
$resp2 mysql_query($query2); 
     
$sql2 mysql_fetch_array($resp2); 
     echo 
"- <a href=\"index.php?op=leer&amp;entrada=" $sql['id'] . "\">" $sql['titulo'] . "</a> - ".$sql2['nombre'].", (" $sql['fecha'] . ")<br/>"
    } 
} else {
   echo 
"NO hay resultados";

Un saludo,

Última edición por Cluster; 29/07/2004 a las 07:58
  #3 (permalink)  
Antiguo 29/07/2004, 15:36
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 20 años, 9 meses
Puntos: 2
Gracias Cluster

Asi

Código PHP:
<?php 
// Ejemplo de uso: 
// $resp = search_query("<palabras a buscar separado por espacios>","<tablas sql en donde buscar separadas por |>","<campos a buscar separados por | (los campos deben ser escribidos asi tabla.campo1,tabla.campo2 (en donde dice tabla pondra la tabla que usara de las tablas que hayas seleccionado)>"); 
// Un Ejemplo de la funcion search_query seria:
if (isset($_POST['busqueda'])) {
    
$consulta trim($_POST['busqueda']);
    if(
$consulta == "") {
    echo 
"No hubo Resultados";

else if (
$resp search_query("$consulta","entradas","entradas.titulo|entradas.intro|entradas.texto")){ 
    
// obtienes tus resultados (record-set) 
    
while($sql search_fetch_array($resp)) { 
      
// Aqui lo que quieras :) 
     
$query2 "SELECT nombre FROM categorias WHERE id = " $sql['categoria'] . ""
     
$resp2 mysql_query($query2); 
     
$sql2 mysql_fetch_array($resp2); 
     echo 
"- <a href=\"index.php?op=leer&amp;entrada=" $sql['id'] . "\">" $sql['titulo'] . "</a> - ".$sql2['nombre'].", (" $sql['fecha'] . ")<br/>"
    } 
} else { 
   echo 
"NO hay resultados"

}
?>
Gracias por la ayuda :)
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
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 19:10.