Salve a tutti, ho un problema che mi sta facendo passare le notti in bianco, ho un piccolo motore di ricerca che visualizza i risultati paginati grazie a questo script:
Codice PHP:
<?php/**
* Funzione per la paginazione automatica delle query, con propagazione delle querystring
*
* @author      Pippo Pluto - }gu|do[z]{®© <pippo@pluto.paperino> - Supporto su [url]www.guidoz.it/forum[/url]
* @version     1.1  (11/11/2005)
* @param       string   $query     La query sql con cui intendiamo estrarre i nostri dati
* @param       integer  $x_pag     Il numero di record che vogliamo visualizzare in una singola pagina (default: 10)
* @param       integer  $num_links Il numero di link alle pagine precedenti e successive da stampare nel menu' (default: 5)
* @return      array               Il primo valore è il risultato della query, il secondo il menu' stampabile
*/


function paging($query,$x_pag=15,$num_links=5)
{

 
//conteggio i record presenti
 
$resource =  mysql_query($query); //grazie a piero.mac per la compatibilità con mysql 5
 
$righe mysql_num_rows($resource);
 if (
$righe == 0){ return false; }

 
//calcolo il numero di pagine necessarie per visualizzare i dati
 
$numpages ceil($righe/$x_pag);
 
 
//ottengo il numero di pagina, se manca lo imposto ad 1
 
$pag = isset($_GET['pag'])? $_GET['pag'] : 1;
 
 
//imposto il primo estremo del limit
 
$da = ($pag-1) * $x_pag;
 
 
//appendo il limit alla query originaria
 
$query .= " LIMIT $da,$x_pag";
 
 
//gesisco la propagazione della query string
 
$querystring '';
    foreach(
$_GET as $k => $v)
      {
       if (
$k != 'pag')
         {
           
$querystring .= "&".$k."=".$v;
         }
      }
 
 
//inizializzo una stringa vuota in cui appenderò l'output del menu'
 
$menu '';
 

//serie di condizionali in cascata per costruire il menu' 
if($numpages <= $num_links
  {
    for (
$pagina 1$pagina <= $numpages$pagina++)
      {
        if (
$pagina == $pag)
          
$menu .= "[<span class=\"pag_selected\"> $pagina </span>] ";
        else
          
$menu .= "[<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>] ";
      }
  }

//se la pag corrente è tra le prime $num_links/2 --> stampo i primi $nun_links link
else if($pag <= ceil($num_links/2))
  {
    for (
$pagina=1$pagina<=$num_links$pagina++)
      {
        if (
$pagina == $pag)
          
$menu .= "[<span class=\"pag_selected\"> $pagina </span> ";
        else
          
$menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a> ";
      }
    
$menu .= "<a class=\"pag_link\" href=\"?pag={$numpages}{$querystring}\" title=\"Vai all'ultima pagina\"> >> </a> ";
  }

//se la pag corrente è tra le ultime $num_links/2 --> stampo gli ultimi $nun_links link
else if($pag > ($numpages-ceil($num_links/2)))
  {
    
$menu .= "<a class=\"pag_link\" href=\"?pag=1{$querystring}\" title=\"Vai alla prima pagina\"> << </a> ";
    for (
$pagina=$numpages-$num_links+1$pagina<=$numpages$pagina++)
      {
        if (
$pagina == $pag)
          
$menu .= "[<span class=\"pag_selected\"> $pagina </span>] ";
        else
          
$menu .= "[<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>] ";
      }
  }

//Altrimenti la pagina corrente è una dell centrali --> stampo i $nun_links/2 link prima ed $nun_links/2 link dopo
else
  {
    
$menu .= "<a class=\"pag_link\" href=\"?pag=1{$querystring}\" title=\"Vai alla prima pagina\"> << </a> ";
    for (
$pagina $pag-ceil($num_links/2-1); $pagina <= $pag+ceil($num_links/2-1); $pagina++)
      {
        if (
$pagina == $pag)
          
$menu .= "[<span class=\"pag_selected\"> $pagina </span>] ";
        else
          
$menu .= "[<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>] ";
      }
    
$menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai all'ultima pagina\"> >> </a> ";
  }

 
//restituisco il risultato della query, e l'output del menu'
 
return array(mysql_query($query),$menu);
}
?>
il form di ricerca è semplice:
codice:
<form method="post" action="cerca_result.php">
   <input name="cerca" type="text" size="15">
   <input type="submit" value="Cerca" class="button">
</form>
dopo di che il tutto viene dato in pasto allo script di ricerca:
Codice PHP:
<?php
include("../config.inc.php");
include(
"../top_foot.inc.php");

top();//intestazione dell pagona

if(empty($_POST["cerca"])) //sono state inserite keyword?
{
    echo 
"

    <table width=\"80%\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"cont\">
        <tr>
                  <td align=\"center\">

Devi specificare una chiave di ricerca</p></td>
        </tr>
    </table>"
;
            
    
foot(); //chiude la pagina
    
exit();
}

//connessione al db
$db mysql_connect($db_host$db_user$db_password)or die ("Parametri di connessione errati");
//selezione db
mysql_select_db($db_name$db)or die ("Parametri di connessione errati");


$keys explode (" "$cerca);

$richiesta "";
reset ($keys);
while (list(,
$parola) = each ($keys))

       
$parola trim($parola);
       if (
$parola != "")
       {
           
$richiesta .= "titolo LIKE '%$parola%' OR news LIKE '%$parola%' OR autore LIKE '%$parola%' OR ";
       }

}

$richiesta .= "id=0";


$query0 mysql_query"CREATE TEMPORARY TABLE ricerca SELECT id, titolo, data, autore, news FROM news WHERE ".$richiesta);

$query "SELECT * FROM ricerca ORDER BY data DESC";

include(
"paging.func.php");
$res paging($query);//funzione di paging

if (!$res[0]) 

    echo 
"<div align=\"center\"></br>La ricerca non ha prodotto nessun risultato.</br></br>
                        <?
include("
../config.inc.php");
include("
../top_foot.inc.php");
top();

if(empty(
$_POST["cerca"]))
{
    echo "

    
<table width=\"80%\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"cont\">
        <tr>
                  <td align=\"center\">

Devi specificare una chiave di ricerca</p></td>
        </tr>
    </table>"
;
            
    
foot();
    exit();
}

$db mysql_connect($db_host$db_user$db_password)or die ("Parametri di connessione errati");
mysql_select_db($db_name$db)or die ("Parametri di connessione errati");


$keys explode (" "$cerca);

$richiesta "";
reset ($keys);
while (list(,
$parola) = each ($keys))
$parola trim($parola);

if (
$parola != ""){
$richiesta .= "titolo LIKE '%$parola%' OR news LIKE '%$parola%' OR autore LIKE '%$parola%' OR ";
}

}

$richiesta .= "id=0";


$query0 mysql_query"CREATE TEMPORARY TABLE ricerca SELECT id, titolo, data, autore, news FROM news WHERE ".$richiesta);

$query "SELECT * FROM ricerca ORDER BY data DESC";

include(
"paging.func.php");
$res paging($query);//funzione di paging

if (!$res[0])
{
    echo 
"<div align=\"center\"></br>La ricerca non ha prodotto nessun risultato.</br></br>
    <INPUT TYPE=\"button\" VALUE=\"TORNA INDIETRO\" onClick=\"history.back()\" class=\"button\"></br></br>
    </div></br>"
;
}
else

   while(
$row mysql_fetch_array($res[0])) 
   {
          
    
setlocale (LC_TIME"italian");
    
$dbtime $row[data];
    
$dates explode("-"$dbtime);
    echo 
"[*]<a href=\"view.php?id=".$row['id']."\">" date("j/n/Y"mktime(000$dates[1], $dates[2], $dates[0])) . " - ".$row['titolo']."</a>";

    }
}
    
echo 
"<div class=\"pag\" align=\"right\">Pagine: ".$res[1]."</div></br></br>";

mysql_close($db);

foot();
?>
ora tutto funziona bene nel caso in cui il campo di ricerca è vuoto (visualizza specificare una chiave di ricerca), nel caso in cui a ricerca dia esiti positivi (tutti i recor vengono visualizzati e paginati correttamente), ma nel caso in cui la ricerca dia esito negativo lo script si blocca alla funzione di paging e sembra come andare in loop.
Nessun errore mysql viene restituito e nessun errore sintattico è presente... non so più dove sbattere la testa.