Evindesign
09-21-2007, 03:50 PM
I have made a searching script that returns results but something is not quite right I can´t get the paging to work... I Think it has something to do with the SQL query but I´m not sure maybe you guys know
I need a line that figures out the total number of line selected in DB conducted in the search.
Also I´m not sure about line 141 either...
$total_pages = ......
Also an unrelataed problem:
If you conduct a search using this script, containing say three words, it will return results for all three but only if the three are found, but if 2 are found and not the last one it returns: No mathes ??
Here goes the code anyway:
<?php
//This script assumes you are searching 3 fields
$hostname_logon = "localhost" ;
$database_logon = "test" ;
$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!" );
// If current page number, use it
// if not, set one!
if(!isset($_GET['page'])){
$page = 1;
} else {
$page = $_GET['page'];
}
// 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>" ;
}
// Search must be at least 3 characters long
if (strlen($trimmed)<3){
$resultmsg = "<p>Search Error</p><p>You must search for at least 3 characters</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 annonsmarknad WHERE rubrik LIKE '%$trimm%' OR pris like '%$trimm%' OR fritext like '%$trimm%' ORDER BY rubrik 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);
$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 searchresult.
do{
$adid_array[] = $row[ 'annonsid' ];
}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="sok2.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 annonsmarknad WHERE annonsid=".$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['rubrik' ] );
$linkhigh = preg_replace ( "'($var)'si" , "<b>\\1</b>" , $row_linkcat['pris' ] );
$linkdesc = preg_replace ( "'($var)'si" , "<b>\\1</b>" , $row_linkcat['fritext' ] );
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);
$linkdesc = preg_replace( "'($trimm)'si" , "<b>\\1</b>" ,
$linkdesc);
}
//end highlight
} //end foreach $trimmed_array
?>
<p>
<?php echo $titlehigh; ?><br>
<?php echo $linkhigh; ?><br>
<?php echo $linkdesc; ?><br>
<?php echo $max_results; ?><br>
<?php echo $from; ?><br>
</p>
<?php
}
// ------------- Paging --------------------
// Define the number of results per page
$max_results = 2;
// Figure out the limit for the query based
// on the current page number.
$from = (($page * $max_results) - $max_results);
$query_value .=" LIMIT $from, $max_results";
// Figure out the total number of pages. Always round up using ceil()
$total_pages = ceil($row_num_links_main / $max_results);
// Build Page Number Hyperlinks
echo "<center>Select a Page<br />";
// Build Previous Link
if($page > 1){
$prev = ($page - 1);
echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$prev\"><<Previous</a> ";
}
for($i = 1; $i <= $total_pages; $i++){
if(($page) == $i){
echo "$i ";
} else {
echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$i\">$i</a> ";
}
}
// Build Next Link
if($page < $total_pages){
$next = ($page + 1);
echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$next\">Next>></a>";
}
echo "</center>";
?>
I need a line that figures out the total number of line selected in DB conducted in the search.
Also I´m not sure about line 141 either...
$total_pages = ......
Also an unrelataed problem:
If you conduct a search using this script, containing say three words, it will return results for all three but only if the three are found, but if 2 are found and not the last one it returns: No mathes ??
Here goes the code anyway:
<?php
//This script assumes you are searching 3 fields
$hostname_logon = "localhost" ;
$database_logon = "test" ;
$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!" );
// If current page number, use it
// if not, set one!
if(!isset($_GET['page'])){
$page = 1;
} else {
$page = $_GET['page'];
}
// 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>" ;
}
// Search must be at least 3 characters long
if (strlen($trimmed)<3){
$resultmsg = "<p>Search Error</p><p>You must search for at least 3 characters</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 annonsmarknad WHERE rubrik LIKE '%$trimm%' OR pris like '%$trimm%' OR fritext like '%$trimm%' ORDER BY rubrik 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);
$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 searchresult.
do{
$adid_array[] = $row[ 'annonsid' ];
}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="sok2.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 annonsmarknad WHERE annonsid=".$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['rubrik' ] );
$linkhigh = preg_replace ( "'($var)'si" , "<b>\\1</b>" , $row_linkcat['pris' ] );
$linkdesc = preg_replace ( "'($var)'si" , "<b>\\1</b>" , $row_linkcat['fritext' ] );
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);
$linkdesc = preg_replace( "'($trimm)'si" , "<b>\\1</b>" ,
$linkdesc);
}
//end highlight
} //end foreach $trimmed_array
?>
<p>
<?php echo $titlehigh; ?><br>
<?php echo $linkhigh; ?><br>
<?php echo $linkdesc; ?><br>
<?php echo $max_results; ?><br>
<?php echo $from; ?><br>
</p>
<?php
}
// ------------- Paging --------------------
// Define the number of results per page
$max_results = 2;
// Figure out the limit for the query based
// on the current page number.
$from = (($page * $max_results) - $max_results);
$query_value .=" LIMIT $from, $max_results";
// Figure out the total number of pages. Always round up using ceil()
$total_pages = ceil($row_num_links_main / $max_results);
// Build Page Number Hyperlinks
echo "<center>Select a Page<br />";
// Build Previous Link
if($page > 1){
$prev = ($page - 1);
echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$prev\"><<Previous</a> ";
}
for($i = 1; $i <= $total_pages; $i++){
if(($page) == $i){
echo "$i ";
} else {
echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$i\">$i</a> ";
}
}
// Build Next Link
if($page < $total_pages){
$next = ($page + 1);
echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$next\">Next>></a>";
}
echo "</center>";
?>