JHsearch($search_string)

Type: code fragment
Version: version 1.0
Requires: no_search_words.txt, no_search_tables.txt  

<?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'], 0, 3) != "int" && substr($fields[$m]['Type'], 0, 4) != "date"){
                if(
$m > 0
){
                    
$query.= " ("
;
                }
                for(
$sc = 0; $sc <
count($searchcrit); $sc++){
                    
$query .= $fields[$m]['Field']." LIKE '%".$searchcrit[$sc]."%'"
;
                    if(
$sc !=
count($searchcrit) - 1){
                        
$query.= " AND "
;
                    }
                }
                if(
$m > 0 && $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($query, strlen($query) - 6, 6) != "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 ($handle, filesize ($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
;
}
?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值