<?php // dbsearch.php
/*
    PHP Database search function by Fred Houweling - November 2005
    fred@houweling.com.au     http://www.houweling.com.au/
    
    DisplayRecords($db, $lookfor, $AlternateQuery="");
    This function generates a HTML table from a SQL database search,
    Either the primary key is used or a full text search is performed on all fields of the database.
    Your primary key should be numerical only.
    The full text search is not case sensitive and a query is built after an initial select to
    Identify all the column names, i.e.
    It is possible to bypass these queries and pass in a custom query.
    Your primary key should be the first field in your table, else you will have to modify the code.
    The first column will be selectable and will pass the following post variables to your script.
    act    =SelectRecord
    lookfor=(the selected primary key)
    
    $db is the postgres database reference.
    $lookfor is either the database $idxname primary key to select.
        Or the text to search for.
    $AlternateQuery is optional and will bypass the default select operation.
        The caller is responsible for the integrity of the passed query, 
        It's passed through unmodified.
    
    $db_table is a global and should be set to the table's name that is to be worked with.
    $idxname is a global and should be set to the name of the primary key.
    act=disp_f&lookfor=
    The commented menu() calls are possible chances to display your own menu.
*/
function DisplayRecords($db$lookfor$AlternateQuery="")

    global 
$db_table$idxname;
    
$res=0;
    if(
version_compare(phpversion(),"4.1.0")<0)
    {
        
$ScriptName=$PHP_SELF;
    }
    else
    {
        
$ScriptName=$_SERVER['SCRIPT_NAME'];
    }
    if(
$AlternateQuery!="")
    {
        
$res=pg_exec($db$AlternateQuery);
    }
    else
    {
        if(!
preg_match("/^([0-9]+)$/"$lookfor)) // Only a number
        
{
            
$lookfor=pg_escape_string($lookfor); // Keep the nasties out.
            
$res=pg_exec($db"select * from $db_table limit 0");
            
$query="select * from $db_table where ";
            for(
$i=0;$i<pg_numfields($res);$i++)
            {
                if(
$i>0)
                    
$query.=" or ";
                
$query.="upper(".pg_fieldname($res$i).") like upper('%$lookfor%')";
            }
            
$query.=" order by ".pg_fieldname($res0);
            
$res=pg_exec($db$query);
        }
        else
        {
            
$lookfor=pg_escape_string($lookfor);
            if(
preg_match("/^([0-9]+)$/"$lookfor))
            {
                
$res=pg_exec($db"select * from $db_table where $idxname = '$lookfor'");
            }
            else
            { 
// Should never get here.
                
print "Numbers Only Please\n";
                
//menu();
                
return;
            }
        }
    }
    if(
$res==0// Invalid response, database connection not valid?
    
{
        return;
    }
    if(
pg_numrows($res)<=0)
    {
        print 
"Nothing Found\n";
        
// menu();
        
return;
    }
    print 
"<table border=1 cols=".pg_numfields($res).">\n";
    print 
"<tr align=\"left\" valign=\"top\">\n";
    for(
$i=0;$i<pg_numfields($res);$i++)
    {
        print 
"<td><strong>".pg_fieldname($res$i)."</strong></td>";
    }
    print 
"\n</tr>\n";
    for(
$i=0;$i<pg_numrows($res);$i++)
    {
        print 
"<tr align=\"left\" valign=\"top\">\n";
        for(
$j=0;$j<pg_numfields($res);$j++)
        {
            print 
"<td nowrap=nowrap>";
            if(
pg_fieldname($res$j) == $idxname)
            {
                print 
"<a href=\"$ScriptName?act=SelectRecord&lookfor=".pg_result($res$i$j).">";
            }
            if(
strlen(pg_result($res$i$j))>0)
                print 
pg_result($res$i$j);
            else
                print 
"&nbsp"// Make sure that there are no void's in the table.
            
if(pg_fieldname($res$j) == $idxname)
            {
                print 
"</a>";
            }
            print 
"</td>";
        }
        print 
"</tr>\n";
    }
    print 
"\n</table>\n";
}
?>