Forum Moderators: coopster

Message Too Old, No Replies

search.php problem

         

Lived

12:05 am on Nov 22, 2006 (gmt 0)

10+ Year Member



I hope someone could help me with a problem i have with a search script. The problem is that when i do a search everything is found like it should, but it's how everything is showing up on the screen that make my hair gray... There is 10 search hits but they all got the next link underneath and they only reload the page.
I can see there should be more hits but it doesn't matter whitch next link of the 10 i chose. It will only reload the page and don't lead me to the next 10 search hits.
Any idee what to do?!?
The script i use is this:

<?php

include 'library/config.php';
include 'library/opendb.php';

//open database connection
$connections = mysql_connect($dbhost, $dbuser, $dbpass) or die ( "Unabale to connect to the database" );

//select database
mysql_select_db($dbname) 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>Sökord saknas</p><p>Ange ett sökord...</p>" ;
}

// check for a search parameter
if (!isset($var)){
$resultmsg = "<p>Ingen sökträff</p><p>Din sökning gav inget resultat! </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 allonline WHERE performerid LIKE \"%$trimm%\" OR languages LIKE \"%$trimm%\" OR bio LIKE \"%$trimm%\" ORDER BY id 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>Sök resultat för:" . $trimmed ."</p><p>Din sökning gav inget resultat!</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="allonline.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{


$a = $s + ($limit) ;
if ($a > $row_num_links_main) { $a = $row_num_links_main ; }
$b = $s + 1 ;

echo "<div align='center'><p>Sök resultat för: $var - $b to $a of $row_num_links_main</p></div>";

}

foreach($newarr as $value){


// EDIT HERE and specify your table and field names for the SQL query
$query_value = "SELECT * FROM allonline WHERE id = '$value'";
$num_value=mysql_query ($query_value);
$row_linkcat= mysql_fetch_array ($num_value);
$row_num_links= mysql_num_rows ($num_value);

$linkimages =( $row_linkcat[ 'picture' ] );
//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[ 'performerid' ] );
$linkhigh = preg_replace ( "'($var)'si" , "<b>\\1</b>" , $row_linkcat[ 'languages' ] );
$linkdesc = preg_replace ( "'($var)'si" , "<b>\\1</b>" , $row_linkcat[ 'bio' ] );

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);
$linkhigh = preg_replace( "'($trimm)'si" , "<b>\\1</b>" , $linkhigh);
$linkdesc = preg_replace( "'($trimm)'si" , "<b>\\1</b>" , $linkdesc);
}
//end highlight

?>
<table align="center" width="500" border="1" cellspacing="0" cellpadding="0">
<tr>
<td rowspan="2" width="100"><img src="<?php echo $linkimages;?>" width="100" height="75"></td>
<td width="394"><div align="center"><a href="http://www.mydomain.com/index.php?id=<?php echo $titlehigh;?>"><?php echo $titlehigh;?> - <?php echo $linkhigh;?></a></div></td>
</tr>
<tr>
<td><?php echo $linkdesc;?></td>
</tr>
</table>
<br>
<?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='center'><a href=\"$PHP_SELF?s=$prevs&q=$var\">Previous " .$limit. "</a></div>";
}
// check to see if last page
$slimit =$s+$limit;
if (!(($slimit/$limit)==$row_num_links_main) && $row_num_links_main!=1) {
// not last page so display next link
$n=$s+$limit;
echo "<div align='center'><a href=\"$PHP_SELF?s=$n&q=$var\">Next " .$limit. "</a></div>";
}
}
} //end foreach $newarr
echo "<div align='center'><p>Showing results $b to $a of $row_num_links_main</p></div>";


?>

Lived

12:04 pm on Nov 22, 2006 (gmt 0)

10+ Year Member



I did a test with a other search script i was find on the net and it was give me the same results. 10 first hits shows up but when i press the link for next 10 hits nothing happens
What am i missing here?!? It must be some part i missing but i can't find out what.....

jatar_k

7:49 pm on Nov 22, 2006 (gmt 0)

WebmasterWorld Administrator 10+ Year Member



are the proper variables appended to your 'Next' links?

it looks like you may be relying on global vars as well.

mcibor

9:05 pm on Nov 22, 2006 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



You forgot to read the $s variable:

instead of
if (empty($s)) {
$s=0;
}

use

$s=0;
if (isset($_GET['s'])) $s = (int)$_GET['s'];

Also when posting code try not to use your language (Dannish I presume), but English. Moreover try not to post unrelevant code.

Regards
Michal

Lived

12:57 am on Nov 23, 2006 (gmt 0)

10+ Year Member



Thanx for your time and help....
I did sort it out before i read your repleys but it's nice to see that people like to help....

/L

eelixduppy

5:51 am on Nov 23, 2006 (gmt 0)



>>>but it's nice to see that people like to help

We love to help here! By the way, I'd like to welcome you to WebmasterWorld!

May your stay here be pleasant. :)