Zend - The PHP Company




Searching and Trees

Add Code


JHsearch($search_string)  

Type: code fragment
Added by: jameshartford
Entered: 16/12/2003
Last modified: 01/12/2003
Rating: **** (7 votes)
Views: 12485
Search a database with this function. Tables and fields are automatically found and searched. Exclude words or table names if you like (no_search_words.txt, no_search_tables.txt). Please send comments to jim@jarzion.com or Click Here


<?PHP
/***************************************************************************
JHsearch() was written by James R Hartford
JHsearch() may be used and modified freely, but I ask that you please note
the original author (James R Hartford) and refer to the function by its
original name (JHsearch())
If you do make changes that I may find useful, please email them to jim@jarzion.com and I will include your name in later versions of JHsearch()
database connection is set up for MySQL but can be changed if needed.
****************************************************************************/

//use these globals to set up your database connection.
global $dbhost$dbhost '';
global 
$dbname;    $dbname '';
global 
$dbuser;    $dbuser '';
global 
$dbpass;    $dbpass '';

/*******************************************************************
Below is an example of how the JHsearch function can be used and 
display the results of the search. You can test for the table name 
and display the result accordingly for that table.
*********************************************************************/
$searchResult JHsearch("test a");
if (
count($searchResult) < 1){
    
$output .= "No results for search 'test a'";
}else{
    
$SR array_keys($searchResult);
    for(
$i 0$i count($SR); $i++){
        if(
$SR[$i] == "site_info"){//this is checking to see if the table name is media
            
for($c=0$c count($searchResult[$SR[$i]]); $c++){
                echo 
"Siteinfo:  ".$searchResult[$SR[$i]][$c]['description']."<br>";
            }
        }
        if(
$SR[$i] == "class"){//this is checking to see if the table name is media
            
for($c=0$c count($searchResult[$SR[$i]]); $c++){
                echo 
"Class:  ".$searchResult[$SR[$i]][$c]['title']."<br>";
            }
        }
    }
}


/*##############################################################
################################################################*/


/***********************************************************
Function:     JHsearch($search_string)
Purpose:     search an entire database and return the results in a
            3 dimensional array. Words found in no_search_words.txt
            will not be searched.  Table names found in
            no_search_tables.txt will not be searched.   
            result example: $result[table_name][row][field_name]
Author:     James R Hartford
************************************************************/
function JHsearch$string ){
    
$newstring $string;
    
$searchcrit explode(" "$newstring); //get the words to be searched
    
$dontsearchwords JHgetnos("words"); //get the words not to search into an array
    
    //get the actual search criteria
    
$searchcrit array_diff($searchcrit$dontsearchwords);
    
$searchcrit JHarray_reindex($searchcrit);
    
    
//get the tables to search
    
$query "Show Tables";
    
$tables JHRquery($query);
    for(
$i 0$i count($tables); $i++){
        
$gettables[$i] = $tables[$i][0];
    }
    
$tables $gettables;
    
$tabletakeout JHgetnos("tables");  //tables to leave out of search
    
$tables array_diff($tables$tabletakeout);
    
$tables JHarray_reindex($tables);
    
$resultcount 0;
    
    
//Build the search query
    
for($i 0$i count($tables) && count($searchcrit) > 0$i++){
        
$query "SELECT * FROM ";
        
$query .= $tables[$i]." WHERE ";
        
$qt "SHOW FIELDS FROM ".$tables[$i];
        
$fields JHRquery($qt);
        
        for(
$m 0$m count($fields); $m++){
            if(
substr($fields[$m]['Type'], 03) != "int" && substr($fields[$m]['Type'], 04) != "date"){
                if(
$m ){
                    
$query.= " (";
                }
                for( 
$sc 0$sc count($searchcrit); $sc++){
                    
$query .= $fields[$m]['Field']." LIKE '%".$searchcrit[$sc]."%'";
                    if(
$sc != count($searchcrit) - 1){
                        
$query.= " AND ";
                    }
                }
                if(
$m && $m count($fields)){
                    
$query.= ") OR ";
                }
            }
        }
        
//this if statement is for if the query ended in WHERE because the only
        //field types in the table are ints or dates
        
if(substr($querystrlen($query) - 66) != "WHERE " || $tempResult[$tables[$i][0]][0] != ""){
            
$query substr($query,0,strlen($query) - 4);
            
//echo $query."<br><br>";
            
$tempResult[$tables[$i]] = JHRquery($query);
        }

        if(
$tempResult[$tables[$i]][0] != ""){
            
$realResult[$tables[$i]] = $tempResult[$tables[$i]];
        }
    }
    return 
$realResult;
}

/*********************************************************
Function: JHgetnos($where);
Purpose: Pares a text file to find out what not to search
Author: James R Hartford
**********************************************************/
function JHgetnos($where){
    
    
//get the words that should not be searched for
    
if($where == "words"){$filename "no_search_words.txt";}
    
//get the tables that should not be searched
    
else if($where == "tables"){$filename "no_search_tables.txt";}
    
    
$handle fopen ($filename"r");
    
$contents explode(" "fread ($handlefilesize ($filename)));
    
fclose ($handle);
    
    return 
$contents;

}

/*********************************************************
Function: JHarray_reindex($array);
Purpose: reindex an array
Author: James R Hartford
**********************************************************/
function JHarray_reindex($somearray){
    
    
$keys array_keys($somearray);    
    for(
$i 0$i count($keys);$i++){
        
$result[$i] = $somearray[$keys[$i]];
    }
    return 
$result;
}

/*********************************************************
Function: JHRquery($sql_string);
Purpose: Execute query and return results in a 2d array
Author: James R Hartford
**********************************************************/
function JHRquery $query ){
    
    global 
$dbhost;global $dbname;global $dbuser;global $dbpass;
    
$link mysql_connect $dbhost$dbuser$dbpass );
    
mysql_select_db($dbname) or die("Could not select database $dbhost");
    
$result mysql_query($query$link) or die("Could not execute query $query");
    
$resultArray = array();
    for (
$i 0$temp mysql_fetch_array $result ); $i++) {
        if (
$temp){$resultArray [$i] = $temp;}
    }
    return 
$resultArray;
}
?>


Usage Example




Rate This Script





Search



This Category All Categories