herghost Posted April 22, 2009 Share Posted April 22, 2009 Hi all, I have this script which has basically been pinched from a tuturial and I have taken out bits I dont need etc. The script I have left after I was finished effing about with it is: <?php include('include/database.php'); //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 user WHERE bandname LIKE \"%$trimm%\" ORDER BY bandname DESC" ; // Execute the query to get number of rows that contain search kewords $numresults=mysql_query ($query) or die(mysql_error()); $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[ 'bandname' ]; }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 user WHERE bandname = '$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' ] //This script assumes you are searching only 3 fields. If you are searching more fileds make sure that add appropriate line. $titlehigh = preg_replace ( "'($var)'si" , "<b>\\1</b>" , $row_linkcat[ 'bandname' ] ); foreach($trimmed_array as $trimm){ if($trimm != 'b' ){ //IF you added more fields to search make sure to add them below as well. $titlehigh = preg_replace( "'($trimm)'si" , "<b>\\1</b>" , $titlehigh); } //end highlight ?> <p> <?php echo $titlehigh; ?><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 ?> Which is currently stored as search.php. here goes the questions! If the user is on search.php then everything displays fine, however I also have this search bar in my header.php which appears on every page on the site. If the user is on index.php, then in the search bar I get an error message: Notice Undefined variable: q in include\header.php on line 8 I understand that q is the search variable present once the box has been filled in but I dont know how to use the search bar here without the error appearing. My other question is somewhat different. i also want the search to find the userid of the bandname and display it as so <a href="newprofile.php?userid=(idhere)">View This Band</a> The userid is the same table 'user' an is an auto increment so auto assigned when a user signs up. I understand I can use something like this: <?php $sql = "SELECT * FROM user WHERE userid = '$userid'"; $result = mysql_query($sql) or die(mysql_error()); while($row = mysql_fetch_array($result)) { { echo $row['userid']; } } ?> but not sure if this is the best way and how to implement this into the script. i have to admit, this script is a bit past my basic knowledge I am slowly building up of php! Many thanks as always Link to comment https://forums.phpfreaks.com/topic/155277-php-search-help/ Share on other sites More sharing options...
Gighalen Posted April 22, 2009 Share Posted April 22, 2009 In response to your first question, your query seems to only run on search.php. This means that the variable q is only declared on search.php, and is not available to any other pages. Link to comment https://forums.phpfreaks.com/topic/155277-php-search-help/#findComment-816937 Share on other sites More sharing options...
herghost Posted April 22, 2009 Author Share Posted April 22, 2009 I managed to sort that one by just removing the line Now on to the second one.... Link to comment https://forums.phpfreaks.com/topic/155277-php-search-help/#findComment-816944 Share on other sites More sharing options...
Gighalen Posted April 22, 2009 Share Posted April 22, 2009 In your search query on the display page, your using a SELECT *, so you're getting all the data from the database about that one band - including ID. Just find where it echos out and add the <a href> stuff around the ['bandname'] variable. Make sure to avoid " by using \" Link to comment https://forums.phpfreaks.com/topic/155277-php-search-help/#findComment-816948 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.