Page 1 of 1

search script bug

Posted: Wed May 09, 2007 10:10 am
by crazy8
I am running XAMP on my system so that I can test my PHP code localy incase im somewhere, where i dont have internet acces. Anyway I kind of have it working in some way. the page displays but as soon as the page loads it also displays this error.
search error we dont have a search perameter
This is where my code is at now with all I have done to it up to this point. i have looked at it alot over the weekend and I dont know if I over looked something or what but I just cant seem to see where the issue is.

Code: Select all

<?php
//This is a working script
//Make sure to go through it and edit database table filelds that you are seraching
//This script assumes you are searching 3 fields
$hostname_logon = "localhost" ;   
$database_logon = "hotspot" ;  
$username_logon = "root" ;  
$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 restaurants WHERE place LIKE \"%$trimm%\" OR address LIKE  \"%$trimm%\" OR city LIKE \"%$trimm%\" OR zip LIKE \"%$trimm%\"
	 OR areacode LIKE \"%$trimm%\" OR phone LIKE \"%$trimm%\" OR keywords LIKE \"%$trimm%\" ORDER BY place   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{
 //EDIT HERE and specify your field name that is primary key
          $adid_array[] = $row[ 'id' ];
      }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="search.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 restaurants WHERE place = '$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.
//EDIT parts of the lines below that have fields names like $row_linkcat[ 'field1' ]
//If you are searching more fileds make sure that add appropriate line. 
  $place = preg_replace ( "'($var)'si" , "<b>\\1</b>" , $row_linkcat[ 'place' ] );
  $placeaddress = preg_replace ( "'($var)'si" , "<b>\\1</b>" , $row_linkcat[ 'address' ] );
  $placecity = preg_replace ( "'($var)'si" , "<b>\\1</b>" , $row_linkcat[ 'city' ] );
  $placezip = preg_replace ( "'($var)'si" , "<b>\\1</b>" , $row_linkcat[ 'zip' ] );
  $placeareacode = preg_replace ( "'($var)'si" , "<b>\\1</b>" , $row_linkcat[ 'areacode' ] );
  $placephoe = preg_replace ( "'($var)'si" , "<b>\\1</b>" , $row_linkcat[ 'phone' ] );
  $placekeywords = preg_replace ( "'($var)'si" , "<b>\\1</b>" , $row_linkcat[ 'keywords' ] );

foreach($trimmed_array as $trimm){
    if($trimm != 'b' ){
//IF you added more fields to search make sure to add them below as well.
        $place = preg_replace( "'($trimm)'si" ,  "<b>\\1</b>" , $place);
        $placeaddress = preg_replace( "'($trimm)'si" , "<b>\\1</b>" , $placeaddress);
        $placecity = preg_replace( "'($trimm)'si" ,  "<b>\\1</b>" , $placecity); 
		$placezip = preg_replace( "'($trimm)'si" , "<b>\\1</b>" , $placezip);
        $placeareacode = preg_replace( "'($trimm)'si" ,  "<b>\\1</b>" , $placeareacode);
		$placephone = preg_replace( "'($trimm)'si" , "<b>\\1</b>" , $placephone);
        $placekeywords = preg_replace( "'($trimm)'si" ,  "<b>\\1</b>" , $placekeywords);
     }
//end highlight

?>
 <p>
<?php echo $place; ?><br>
<?php echo $placeaddress; ?><br>
<?php echo $placecity; ?><br>
<?php echo $placezip; ?><br>
<?php echo $placeareacode; ?><br>
<?php echo $placephone; ?><br>
<?php echo $placekeywords; ?>
</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
?>
Thank you all for the help.

Posted: Wed May 09, 2007 12:51 pm
by Begby
$var isn't getting set and its causing that error.

you should be calling it with an arguement like search.php?q=something

Posted: Wed May 09, 2007 1:25 pm
by crazy8
Well I do get hat added to the link in the browser if I end up doing a search anyway. The link shows up like this
That is what I get when I search "example bakery" which is what I have in my db for testing right now. So how do I call $var with search.php?q= ?

Thankk you much for the help.

Posted: Wed May 09, 2007 2:30 pm
by crazy8
actually I just noticed that I get a blank result so even though it displays that one error as soon as page loads, if I still do a search anyway for "example bakery" I get this
Search results for: example bakery
and no results are displayed.

So along with the first issue is there any reason I would get this or are the two tied together?

Posted: Thu May 10, 2007 11:55 am
by crazy8
dang! 41 views and no hits yet. Should this maybe be moved or posted in the PHP code forum?

Thank you all for the help.

Posted: Fri May 11, 2007 10:22 am
by crazy8
Any ideas at all on this as to what might be wrong, would be greatly appreciated.

Thank you all much.