Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Problema su paginazione dopo ricerca con script di }gu|do[z]{

    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.

  2. #2

    Re: Problema su paginazione dopo ricerca con script di }gu|do[z]{

    Originariamente inviato da zero85
    Codice PHP:
    <?
    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();
    }
    così a naso qui c'è qualche cosa di strano

  3. #3

    Re: Re: Problema su paginazione dopo ricerca con script di }gu|do[z]{

    Originariamente inviato da dvds
    così a naso qui c'è qualche cosa di strano
    gia' ... il carattere di escape che manca...

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.