• User

    impaginare risultati query in php

    Ho la necessita di impaginare i risultati delle query presenti in questo file, in sostanza vorrei che venissero mostrati una quindicina di record a video e poi ci sia la possibilità di andare alla pagina successiva o precedente.
    ho ptovato cosi ma non va' mi mostra tutti i numeri di pagina e basta...
    ho provato solo sul primo if...
    [php]<h1>Risultati della ricerca</h1><br>
    <?php
    error_reporting(E_ALL);
    include("config.inc.php");
    include("connect.inc.php");

    if($_POST) {
    if($_POST['azione'] == "cerca"){

    $chiave = $_POST['chiave'];
    $keys = explode (",", $chiave);
    $query = "";
    reset ($keys);
    while (list(,$parola) = each ($keys))
    { $parola = trim($parola);
    if ($parola != "")
    $query .= "titolo LIKE '%$parola%' OR ingredienti LIKE '%$parola%' OR tipopiatto LIKE '%$parola%' OR ingredienteprincipale LIKE '%$parola%' OR regione LIKE '%$parola%' OR note LIKE '%$parola%' OR ";
    }
    $query .= "0";
    $query = "SELECT id, titolo, ingredienteprincipale, regione FROM DBRicette WHERE " . $query;
    $count = mysql_query("SELECT COUNT(*) FROM DBRicette");
    $res_count = mysql_fetch_row($count);

    // numero totale di records
    $tot_records = $res_count[0];

    // risultati per pagina(secondo parametro di LIMIT)
    $per_page = 10;

    // numero totale di pagine
    $tot_pages = ceil($tot_records / $per_page);

    // pagina corrente
    $current_page = (!$_GET['page']) ? 1 : (int)$_GET['page'];

    // primo parametro di LIMIT
    $primo = ($current_page - 1) * $per_page;

    $query = "SELECT id, titolo, ingredienteprincipale, regione FROM DBRicette LIMIT $primo, $per_page WHERE " . $query;

    $result = mysql_query($query, $db);
    //echo $query; dopo l'esecuzione di una query ne mostra il risultato a video
    while ($row = mysql_fetch_array($result))
    { echo "<a href="index.php?pag=15&id=$row[id]">" . " $row[titolo]" . " </a><br>"; }
    // includiamo uno dei files contenenti la paginazione
    include("paginazione.php");
    // in questa cella inseriamo la paginazione
    echo " <tr>\n <td height="50" valign="bottom" align="center">$paginazione</td>\n";

    echo " </tr>\n</table>\n</div>";
    }
    elseif($_POST['azione'] == "principale"){
    $chiave = $_POST['chiave'];
    $keys = explode (",", $chiave);
    $query = "";
    reset ($keys);
    while (list(,$parola) = each ($keys))
    { $parola = trim($parola);
    if ($parola != "")
    $query .= " ingredienteprincipale LIKE '%$parola%' OR ";
    }
    $query .= "0";
    $query = "SELECT id, titolo, ingredienteprincipale FROM DBRicette WHERE " . $query;
    $result = mysql_query($query, $db);
    //echo $query; dopo l'esecuzione di una query ne mostra il risultato a video
    while ($row = mysql_fetch_array($result))
    { echo "<a href="index.php?pag=15&id=$row[id]">" . " $row[titolo]" . " $row[ingredienteprincipale]</a><br>"; }
    }
    elseif($_POST['azione'] == "portata"){
    $chiave = $_POST['chiave'];
    $keys = explode (",", $chiave);
    $query = "";
    reset ($keys);
    while (list(,$parola) = each ($keys))
    { $parola = trim($parola);
    if ($parola != "")
    $query .= "tipopiatto LIKE '%$parola%' OR ";
    }
    $query .= "0";
    $query = "SELECT id, titolo, tipopiatto FROM DBRicette WHERE " . $query;
    $result = mysql_query($query, $db);
    //echo $query; dopo l'esecuzione di una query ne mostra il risultato a video
    while ($row = mysql_fetch_array($result))
    { echo "<a href="index.php?pag=15&id=$row[id]">" . " $row[titolo]" . " $row[tipopiatto]</a><br>"; }

    }
    };
    ?>[/php]
    questo è il file di paginazione
    [php]<?php

    $paginazione = "Pagine totali: " . $tot_pages . "
    [";
    for($i = 1; $i <= $tot_pages; $i++) {
    if($i == $current_page) {
    $paginazione .= $i . " ";
    } else {
    $paginazione .= "<a href="?page=$i" title="Vai alla pagina $i">$i</a> ";
    }
    }
    $paginazione .= "]";

    ?> [/php]


  • User

    Nessun suggrimento?


  • User

    Ho fatto un pò di prove ma ci deve essere per forza qualche errore, se eseguo la query sulla portata selezionando antipasto ottengo 2 come numero di pagine il che sta a significare che ci sono 2 pagine contenenti 15 ( $step=15) ricette ciascuna cosa non possibile perche' ho provato sul db attualmente in linea e ne risultano molte di piu'. Allora mi son detto proviamo ad aumentare il limite nella variabile step a 150000 e vediamo cosa succede; i record vengono estratti tutti e a fondo pagina compare correttamente il numero 1 che indica il numero delle pagine generate dalla query.
    Cosa c'e' di sbagliato??

    ecco lo script come è ora

    <h1>Risultati della ricerca</h1><br>
    <?php
    error_reporting(E_ALL);
    include ("config.inc.php");
    include ("connect.inc.php");
    // imposto il limit per la query
    If (!isset ($start) OR $start < 0)
       $start = 0;
       $step = 15;
    if ($_POST) {
       if ($_POST['azione'] == "cerca") {
          $chiave = $_POST['chiave'];
          $keys = explode(",", $chiave);
          $query = "";
          reset($keys);
          while (list(, $parola) = each($keys)) {
             $parola = trim($parola);
             if ($parola != "")
                $query .= "titolo   LIKE   '%$parola%'   OR   ingredienti   LIKE   '%$parola%' OR   tipopiatto   LIKE   '%$parola%' OR   ingredienteprincipale   LIKE   '%$parola%' OR   regione   LIKE   '%$parola%' OR   note   LIKE   '%$parola%' LIMIT $start, $step ";
          }
    //  $query .= "0";
          $query = "SELECT id, titolo, ingredienteprincipale, regione FROM DBRicette WHERE " . $query;
          $result = mysql_query($query, $db);
    //echo $query;  //dopo l'esecuzione di una query ne mostra il risultato a video
          while ($row = mysql_fetch_array($result)) {
             echo "<a   href=\"index.php?pag=15&id=$row[id]\">" . "      $row[titolo]" . "       </a><br>";
          }
    // ricavo il numero totale di record
          $query1 = "SELECT COUNT(*) FROM DBRicette WHERE " . $query;
          $result1 = mysql_query($query);
    // record complessivi
      $tot_righe = mysql_result($result1,0);
    // totale pagine
          $tot_pagine = ceil($tot_righe / $step);
          echo ($tot_pagine);
    
       }
       elseif ($_POST['azione'] == "principale") {
          $chiave = $_POST['chiave'];
          $keys = explode(",", $chiave);
          $query = "";
          reset($keys);
          while (list(, $parola) = each($keys)) {
             $parola = trim($parola);
             if ($parola != "")
                $query .= " ingredienteprincipale   LIKE   '%$parola%'  LIMIT $start, $step   ";
          }
    // $query .= "0";
          $query = "SELECT   id,   titolo, ingredienteprincipale   FROM   DBRicette   WHERE   " . $query;
          $result = mysql_query($query, $db);
    //echo $query;  dopo l'esecuzione di una query ne mostra il risultato a video
          while ($row = mysql_fetch_array($result)) {
             echo "<a   href=\"index.php?pag=15&id=$row[id]\">" . "      $row[titolo]" . "      $row[ingredienteprincipale]</a><br>";
          }
          // ricavo il numero totale di record
          $query1 = "SELECT COUNT(*) FROM DBRicette WHERE " . $query;
          $result1 = mysql_query($query);
    // record complessivi
          $tot_righe = mysql_result($result1, 0);
    // totale pagine
          $tot_pagine = ceil($tot_righe / $step);
          echo ($tot_pagine);
       }
       elseif ($_POST['azione'] == "portata") {
          $chiave = $_POST['chiave'];
          $keys = explode(",", $chiave);
          $query = "";
          reset($keys);
          while (list(, $parola) = each($keys)) {
             $parola = trim($parola);
             if ($parola != "")
                $query .= "tipopiatto   LIKE   '%$parola%'   LIMIT $start, $step   ";
          }
    // $query .= "0";
          $query = "SELECT   id,   titolo, tipopiatto   FROM   DBRicette   WHERE   " . $query;
          $result = mysql_query($query, $db);
    //echo $query;  dopo l'esecuzione di una query ne mostra il risultato a video
          while ($row = mysql_fetch_array($result)) {
             echo "<a   href=\"index.php?pag=15&id=$row[id]\">" . "      $row[titolo]" . "      $row[tipopiatto]</a><br>";
          }
       // ricavo il numero totale di record
          $query1 = "SELECT COUNT(*) FROM DBRicette WHERE " . $query;
          $result1 = mysql_query($query);
    // record complessivi
           $tot_righe = mysql_result($result1, 0);
    // totale pagine
          $tot_pagine = ceil($tot_righe / $step);
          echo ($tot_pagine);
       }
    }
    ;
    ?>
    

  • User Attivo

    Ciao
    ho letto il tuo codice è difficile trovare un errore, meglio farlo da capo, ti invio codice che feci per un sito di auto, funziona bene, adattalo al tuo
    ciao da danny
    [PHP]
    $query_2="SELECT COUNT(id_articolo) As num_righe FROM articoli WHERE id_categoria='1'";
    $risultato_query_2=mysql_query($query_2)or die("errore nella query;".mysql_error());
    $num=mysql_fetch_array($risultato_query_2);

    $pagine=isset($_GET['pagine']);
    if(!isset($_GET['pag']))
    {
    $pag=1;
    }
    else
    {
    $pag=$_GET['pag'];
    }
    $limit_inf=($pag - 1)*12;
    if($num[0]== false)
    {
    print"
    Non ci articoli per questa sezione";
    }
    else
    {
    $pagine=ceil($num[0]/12);
    }
    $query_3="SELECT * FROM articoli WHERE id_categoria='1' ORDER BY id_articolo LIMIT $limit_inf,12";
    $risultato_query_3=mysql_query($query_3)or die("errore nella query;".mysql_error());

    print"<table border='0' cellpadding='0' cellspacing='0'>";
    $num=0;
    for($a = 0; $a < 4; $a++)
    {
    print"
    <tr>";
    for($b = 0; $b < 3; $b++,$num++)
    {
    $articoli=mysql_fetch_object($risultato_query_3);
    if($articoli)
    {
    print"
    <td>
    <table border='0' cellpadding='0' cellspacing='0' width='158' height='107' background='immagini/corpo_foto.jpg'>
    <tr>
    <td height='18' align='center' valign='bottom'>$articoli->nome</td>
    </tr>
    <tr>
    <td align='center' height='80'><a href='index.php?id_articolo=$articoli->id_articolo'><img src='public/articoli/G/$articoli->id_articolo.jpg' border='0' width='110' height='75'></a></td>
    </tr>
    <tr>
    <td> </td>
    </tr>
    </table>
    </td>";
    }
    }
    print"
    </tr>";
    }
    print"</table>";

    print"
    <table border='0' cellpadding='0' cellspacing='0' align='center'>
    <tr>";
    for($c = 1; $c <= $pagine; $c++)
    {
    print"<td><a href='index.php?area=auto&pag=$c'>$c</a> </td>";
    }
    print"<tr>
    </table>";
    ?>

    [/PHP]


  • User

    Grazie ora ci provo


  • User

    [php]<h1>Risultati della ricerca</h1><br>
    <?php
    error_reporting(E_ALL);
    include ("config.inc.php");
    include ("connect.inc.php");
    // imposto il limit per la query
    If (!isset ($start) OR $start < 0)
    $start = 0;
    $step = 15;
    $pg = (isset($_REQUEST['pagina'])) ? $_REQUEST['pagina'] : 0;
    if ($_POST) {
    if ($_POST['azione'] == "cerca") {
    $chiave = $_POST['chiave'];
    $keys = explode(",", $chiave);
    $parola = $keys[0];

      $query = "SELECT id, titolo, ingredienteprincipale, regione FROM DBRicette WHERE titolo   LIKE   '%$parola%'   OR   ingredienti   LIKE   '%$parola%' OR   tipopiatto   LIKE   '%$parola%' OR   ingredienteprincipale   LIKE   '%$parola%' OR   regione   LIKE   '%$parola%' OR   note   LIKE   '%$parola%' LIMIT $start, $step ";
      $result = mysql_query($query, $db);
    

    //echo $query; //dopo l'esecuzione di una query ne mostra il risultato a video
    while ($row = mysql_fetch_array($result)) {
    echo "<a href="index.php?pag=15&id=$row[id]">" . " $row[titolo]" . " </a><br>";
    }
    // ricavo il numero totale di record
    $query1 = "SELECT COUNT(*) FROM DBRicette WHERE titolo LIKE '%$parola%' OR ingredienti LIKE '%$parola%' OR tipopiatto LIKE '%$parola%' OR ingredienteprincipale LIKE '%$parola%' OR regione LIKE '%$parola%' OR note LIKE '%$parola%' ";
    $result1 = mysql_query($query1);

      //echo mysql_result($result1, 0);
    // record complessivi
    

    $tot_righe = mysql_result($result1,0);
    // totale pagine
    $tot_pagine = ceil($tot_righe / $step);
    echo ($tot_pagine);

    //inizio la visualizzazione

             if($pg == 0)
             {
             $precedente = "";
             }
             else
             {
             $previous_page = ($pg - 1);
             $precedente = "<a href='index.php?pag=14&pagina=$previous_page' title='Vai alla pagina
             precedente' class='bottonelinc'>Precedente</a>";
             }
    
             if($pg == $tot_pagine-1)
             {
             $successiva = "";
             }
             else
             {
             $next_page = ($pg + 1);
             $successiva = "<a href='index.php?pag=14&pagina=$next_page' title='Vai alla pagina
             successiva' class='bottonelinc'>Sucessiva</a>";
             }
    
            $paginazione = "
                <table width='30%' border='0' align='center'>
                    <tr>
                        <td align='center'>
                            ".$precedente."
                        </td>
                        <td align='center'>
                            ".$successiva."
                        </td>
                    </tr>
                </table>";
    
    
              echo "<CENTER>" . $paginazione . "</CENTER>";
    

    }[/php]ora che lo script è funzionante e che ho tutti i dati che mi occorrono numero di record, numero di pagine ho provato a creare i link pagina successiva e precedente per visualizzare tutti i record.
    attualmente effettuando una ricerca vengono visualizzati i primi 15 record poi in basso a dx la scritta successiva, come clicco sul link invece dei successivi 15 record mi viene restituita una pagina bianca, senza errori dal php. Dove sbaglio?
    Il link di partenza della pagina delle ricette è Hp://test.mondoricette.com/index.php?pag=1 una volta inserito il termine da ricercare e avviata la ricerca i primi 15 risultati sono visualizzati qui hp://test.mondoricette.com/index.php?pag=14
    Quindi io ho creato il link di ricerca cosi

    $successiva = "<a href='index.php?pag=14&pagina=$next_page' title='Vai alla pagina
    successiva' class='bottonelinc'>Sucessiva</a>";