MySQL Forums
Forum List  »  PHP

HELP!
Posted by: Eyþór Páll Eyþórsson
Date: March 17, 2009 09:02AM

I'm trying to make a search script that searches in one table but multiple fields. here is what I have so far. got this from some site, and was trying to modify it.
Can someone please help?

<?php

$hostname_logon = "******" ;
$database_logon = "******" ;
$username_logon = "******" ;
$password_logon = "******" ;
//open database connection
$connections = mysql_connect($hostname_logon, $username_logon, $password_logon) or die ( "Unabale to connect to the database" );
//select database
mysql_select_db($database_logon) or die ( "Unable to select database!" );

//specify how many results to display per page
$limit = 10;

// Get the search variable from URL
$var = @$_GET['q'] ;
//trim whitespace from the stored variable
$trimmed = trim($var);
//separate key-phrases into keywords
$trimmed_array = explode(" ",$trimmed);
// check for an empty string and display a message.
if ($trimmed == "") {
$resultmsg = "<p>Search Error</p><p>Please enter a search...</p>" ;
}

// check for a search parameter
if (!isset($var)){
$resultmsg = "<p>Search Error</p><p>We don't seem to have a search parameter! </p>" ;
}
// Build SQL Query for each keyword entered
foreach ($trimmed_array as $trimm){
// EDIT HERE and specify your table and field names for the SQL query
$query = "SELECT * FROM vlisti WHERE vorunumer LIKE '%$trimm%' OR lysing like '%$trimm%' OR erlend like '%$trimm%' OR evorunumer like '%$trimm%' ORDER BY vorunumer DESC" ;
// Execute the query to get number of rows that contain search kewords
$numresults=mysql_query ($query);
$row_num_links_main =mysql_num_rows ($numresults);

// next determine if 's' has been passed to script, if not use 0.
// 's' is a variable that gets set as we navigate the search result pages.
if (empty($s)) {
$s=0;
}

// now let's get results.
$query .= " LIMIT $s,$limit" ;
$numresults = mysql_query ($query) or die ( "Couldn't execute query" );
$row= mysql_fetch_array ($numresults);

//store record id of every item that contains the keyword in the array we need to do this to avoid display of duplicate search result.
do{
$adid_array[] = $row[ 'fieldid' ];
}while( $row= mysql_fetch_array($numresults));
} //end foreach

if($row_num_links_main == 0 && $row_set_num == 0){
$resultmsg = "<p>Search results for: ". $trimmed."</p><p>Sorry, your search returned zero results</p>" ;
}
//delete duplicate record id's from the array. To do this we will use array_unique function
$tmparr = array_unique($adid_array);
$i=0;
foreach ($tmparr as $v) {
$newarr[$i] = $v;
$i++;
}

// now you can display the results returned. But first we will display the search form on the top of the page
?>

<form action="search3.php" method="get" name="search">
<div align="center">
<input name="q" type="text" value=" <?php echo $q; ?> " size="15">
<input name="search" type="submit" value="Search">
</div>
</form>

<?php
// display what the person searched for.
if( isset ($resultmsg)){
echo $resultmsg;
exit();
}else{
echo "Search results for: " . $var;
}

foreach($newarr as $value){
// EDIT HERE and specify your table and field names for the SQL query
$query_value = "SELECT * FROM vlisti WHERE vorunumer = '$value' AND lysing = '$value' AND erlend = '$value' AND evorunumer = '$value' AND birgi = '$value'";
$num_value=mysql_query ($query_value);
$row_linkcat= mysql_fetch_array ($num_value);
$row_num_links= mysql_num_rows ($num_value);

//now let's make the keywods bold. To do that we will use preg_replace function.
//Replace field
$titlehigh = preg_replace ( "'($var)'si" , "<b> //1</b>" , $row_linkcat[ 'vorunumer' ] );
$linkhigh = preg_replace ( "'($var)'si" , "<b> //1</b>" , $row_linkcat[ 'lysing' ] );
$linkdesc = preg_replace ( "'($var)'si" , "<b> //1</b>" , $row_linkcat[ 'erlend' ] );
$evorudesc = preg_replace ( "'($var)'si" , "<b> //1</b>" , $row_linkcat[ 'evorunumer' ] );
$birgidesc = preg_replace ( "'($var)'si" , "<b> //1</b>" , $row_linkcat[ 'birgi' ] );

foreach($trimmed_array as $trimm){
if($trimm != 'b' ){
$titlehigh = preg_replace( "'($trimm)'si" , "<b> //1</b>" , $titlehigh);
$linkhigh = preg_replace( "'($trimm)'si" , "<b> //1</b>" , $linkhigh);
$evorudesc = preg_replace( "'($trimm)'si" , "<b> //1</b>" , $linkdesc);
$birgidesc = preg_replace( "'($trimm)'si" , "<b> //1</b>" , $birgidesc);
}
//end highlight

?>
<p>
<?php echo $titlehigh; ?><br>
<?php echo $linkhigh; ?><br>
<?php echo $linkdesc; ?><br>
<?php echo $linkhigh; ?><br>
<?php echo $birgidesc; ?><br>
</p>

<?php
} //end foreach $trimmed_array
if($row_num_links_main > $limit){
// next we need to do the links to other search result pages
if ($s>=1) { // do not display previous link if 's' is '0'
$prevs=($s-$limit);
echo "<div align='left'><a href='$PHP_SELF?s=$prevs&q=$var&catid=$catid'>Previous " .$limit. "</a></div>";
}
// check to see if last page
$slimit =$s+$limit;
if (!($slimit >= $row_num_links_main) && $row_num_links_main!=1) {
// not last page so display next link
$n=$s+$limit;
echo "<div align='right'><a href='$PHP_SELF?s=$n&q=$var&catid=$catid'>Next " .$limit. "</a></div>";
}
}
} //end foreach $newarr
?>

Options: ReplyQuote


Subject
Written By
Posted
HELP!
March 17, 2009 09:02AM
March 17, 2009 09:09AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.