Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    4

    Paginazione risultati di una query

    Buonasera,
    sono un autodidatta e nei ritagli di tempo stò provando a programmare un piccolo blog utilizzando PHP e MYSQL. Per il momento, anche se con qualche difficoltà ho creato la base quindi visualizzazione delle news, catalogazione in categorie e anche in anni. Tutto sembra funzionare.

    Ora, passiamo alla parte problematica:
    come potrei ottenere la paginazione delle news stesse? In sostanza vorrei che le pagine conteneti i risultati delle query (news, categorienews e annonews) restituiscano un numero fisso di risultati per poi andare a mettere le rimanenti su altre pagine.

    Potreste mettermi sulla strada giusta?

    Di seguito il codice (spero non ci siano troppi errori)...

    pagina news.php
    Codice PHP:
    <?php
    include_once("php/connection.php");
    $posts get_posts();

    $query mysql_query("SELECT page_title,meta_key,meta_desc FROM `page_att` WHERE page_name = 'news'");
    $row mysql_fetch_array($query);
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title><?php echo $row['page_title']; ?></title>
    <meta name="keywords" content="<?php echo $row['meta_key']; ?>" />
    <meta name="description" content="<?php echo $row['meta_desc']; ?>" />
    <link href="css/style.css" rel="stylesheet" type="text/css" />
    <link rel="icon" href="favicon.ico" />
    </head>

    <body>
    <?php include("php/header.php");?>
    <h1> Tullio News </h1>

    <?php
    foreach ( $posts as $post )
    {
        
    ?>
        <h2><a href="news/<?php echo $post['url']; ?>"><?php echo $post['title']; ?></a></h2>
        <p> Articolo del <?php echo date('d-m-y'strtotime($post['date_posted'])) ?>
        in <a href="catnews/<?php echo $post['name']; ?>"><?php echo $post['name']; ?></a> </p>
        <p> <?php echo nl2br($post['contents']); ?> </p>
        <?php
    }
    ?>
    <p> <a href="yearnews/2013">2013</a> </p>
    <p> <a href="yearnews/2012">2012</a> </p>

    <?php include("php/footer.php");?>

    </body>
    </html>

    File function.php (contente get_posts)
    Codice PHP:
    <?php
    function get_posts($url null$cat_id null$year 2014)
    {
        
    $posts = array();
        
    $query "SELECT `posts`.`id` AS `post_id`, `categories`.`id` AS `category_id`,
                        `url`, `year`, `title`, `contents`, `date_posted`, `categories`.`name`
                FROM `posts`
                INNER JOIN `categories` ON `categories`.`id` = `posts`.`cat_id`"
    ;
        
        if ( isset(
    $url) )
        {
            
    $query .= " WHERE `url` = '{$url}'";
        }
        
        if ( isset(
    $cat_id) )
        {
            
    $query .= " WHERE `name` = '{$cat_id}'";
        }
        
        if ( isset(
    $year) )
        {
            
    $query .= " WHERE `year` = '{$year}'";
        }
        
        
    $query .= " ORDER BY `posts`.`id` DESC";
        
        
    $query mysql_query($query);
        
        while ( 
    $row mysql_fetch_assoc($query) )
        {
            
    $posts[] = $row;
        }
        
        return 
    $posts;
    }

    file .htaccess

    RewriteEngine On
    RewriteBase /
    RewriteRule ^news/([^/]+) articolo.php?url=$1 [L]
    RewriteRule ^catnews/([^/]+) catnews.php?cat_id=$1 [L]
    RewriteRule ^yearnews/([^/]+) yearnews.php?year=$1 [L]
    RewriteRule ^()$ index.php [NC,L]
    Rewritecond %{REQUEST_URI} !(^/?.*\..*$) [NC]
    RewriteRule (.*)$ $1.php [NC]

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Sperando ti possa aiutare.

    File :sms_management_del.php
    Codice PHP:
    <?php
    //----- pg è il numero di pagina da 1 a n
    if (isset($_GET["pg"]) or isset($_POST["pg"])) {
    //----------- il n° di pagina è settato
    if (isset($_POST["pg"])) {
      
    $pg $_POST["pg"];
    } else {
      
    $pg $_GET["pg"];
    // if (isset($_POST["pg"]))
    } else {
    $pg  "";
    }  
    // if (isset($_GET["pg"]) or isset($_POST["pg"]))
    if (empty($pg)) {
    $pg 1;
    // if (empty($pg))
     
    //----------- Query per ricavare il numero di SMS a partire dai criteri di selezione
    $table   SMS_DELETED_TABLE_NAME;
    //----- Il numero delle righe per pagina è 15
    $lines   15;
    $query   "select smsid from $table ";
    $res     mysql_query($query) or die(mysql_error());
    //----- $max contiene il numero dei record nella tabella
    $max     mysql_num_rows($res);
    //----- $nbPages = numero dei record / record per pagina
    $nbPages = (int) ($max $lines);
    //----- Arrotondamento n° di pagine : aggiungo una pagina nel
    //      caso in cui avessi per esempio : $max / $lines = 10,6 pagine
    if ($max <> ($nbPages*$lines)) {
     
    $nbPages++;
    // if ($max <> ($nbPages*$lines)
    //----- il primo record della pagina da stampare a video
    //      il codice di stampa a video non è presente in questo esempio
    $first = ($pg 1) * $lines;
    //----- Query per ricavare gli SMS a partire dai criteri di selezione
    $table SMS_DELETED_TABLE_NAME;
    //----- $first contiene il numero del primo record da selezionare
    //      $lines contiene il numero di record per pagina. Quindi
    //      anche il numero di record da ricavare
    $query "select smsid, sender, message, smsdatetime from $table "
           
    " order by smsdatetime desc limit $first,$lines";
    $res   mysql_query($query) or die(mysql_error());
    $num   mysql_num_rows($res);
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     
    <html>
    <head>
    <title><?php print SMS_DESC_PAGE_TITLE_HOST ?></title>
    </head>
    <body>
     
    <?php 
    if ($nbPages 0) { ?>
     <span class="SMS_Text"><?php  print SMS_DESC_PAGE ?>&nbsp;:</span><?php 
     
    //----- Qui stampo a video i link verso le varie pagine
     //      Il link contiene la variabile pg che indica il numero di pagina.
     //      Cliccando sul link si passa la variabile alla pagina web
     //      Vedere il primo commento di questo esempio
     
    for ($i=1;$i<=$nbPages;$i++) {
      print 
    "<a href=\"sms_management_del.php?pg=$i\">$i</a>&nbsp;&nbsp;\n";
     } 
    // for ($i=1;$i<=$nbPages) ?>
     <br />
     <br /><?php
    // if ($nbPages > 0)?>
    Qui ci sarebbe il codice per visualizzare le 15 righe della tabella.
    </body>
    </html>
    Ultima modifica di badaze; 18-07-2014 a 23:45
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    4
    Wow Badaze mi aiuterà di sicuro! Domani mi rimetto a studiarlo!
    Quello che mi hai postato è tutto scritto nella pagina .php.
    Mi è subito venuto un dubbio, se posso vorrei approfittare della tua esperienza...
    Nel mio caso dove sarebbe meglio inserirlo?

    direttamente nella pagina come da tuo esempio
    nella mia funzione "get_post"
    oppure creare un'altra funzione?

    Ti ringrazio ancora

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Il codice che ho postato non è completo. Ad esempio non controlla che pg sia numerico o che non sia maggiore del numero massimo di pagine possibili.

    Secondo me dovresti prendere spunto dall'esempio per fare una pagina tua che stamperebbe a video solo i link delle pagine. Cosi capirai il funzionamento. Poi quando avrai capito potrai facilmente rispondere alla tua domanda.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    4
    Rieccomi, piano piano ma mi avvicino sempre più al mio obiettivo!
    Ti ringrazio Badaze il tuo codice mi è servito a capire qualcosa in più!
    Allora ho fatto dei progressi adesso nella mia pagina news vedo solamente i primi 4 risultati per poi vedere gli altri nelle pagine successive.

    Mi sono un po arenato sulla creazione del menu per navigare tra le varie pagine, mi sono un po arrangiato ma sicuramente la mia non è una soluzione definitiva. Vorrei riuscire a utilizzare il tuo suggerimento per creare i link a tutte le pagine in automatico!

    Cerco di spiegarti il mio problema:
    Se calcolo la variabile $nbPages all'interno della mia funzione nel file function.php poi non riesco a richiamarla nel file news.php.
    e purtroppo senza quella variabile non posso impostare il menu di navigazione...

    ho anche pensato di farlo al contrario, calcolare la variabile $nbPages direttamente all'interno di news.php ma mi ritrovo con lo stesso problema non riesco a reperire $max (il numero totale di record)

    di seguito i due file aggiornati:

    pagina news.php
    Codice PHP:
    <?php
    include_once("php/connection.php");
    $posts = ( isset($_GET['page']) ) ? get_posts(nullnull2014$_GET['page']) : get_posts(nullnull2014$_GET 1);

    $np = ($_GET['page']) + 1;
    if (
    $np 3)
    {
        
    $np 2;
    }

    $query mysql_query("SELECT page_title,meta_key,meta_desc FROM `page_att` WHERE page_name = 'news'");
    $row mysql_fetch_array($query);
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title><?php echo $row['page_title']; ?></title>
    <meta name="keywords" content="<?php echo $row['meta_key']; ?>" />
    <meta name="description" content="<?php echo $row['meta_desc']; ?>" />
    <link href="css/style.css" rel="stylesheet" type="text/css" />
    <link rel="icon" href="favicon.ico" />
    </head>

    <body>
    <?php include("php/header.php");?>
    <h1> Tullio News </h1>
    <?php
    foreach ( $posts as $post )
    {
        
    ?>
        <h2><a href="articolo/<?php echo $post['url']; ?>"><?php echo $post['title']; ?></a></h2>
        <p> Articolo del <?php echo date('d-m-y'strtotime($post['date_posted'])) ?>
        in <a href="catnews/<?php echo $post['name']; ?>"><?php echo $post['name']; ?></a> </p>
        <p> <?php echo nl2br($post['contents']); ?> </p>
        <?php
    }
    ?>
    <p> <a href="news/<?php echo $np ?>">PAGINA SUCCESSIVA</a> </p>

    <p> <a href="yearnews/2013">2013</a> </p>
    <p> <a href="yearnews/2012">2012</a> </p>

    <?php include("php/footer.php");?>

    </body>
    </html>
    function.php
    Codice PHP:
    <?php
    function get_posts($url null$cat_id null$year 2014$page 1)
    {
        
    $posts = array();
        
    $query "SELECT `posts`.`id` AS `post_id`, `categories`.`id` AS `category_id`,
                        `url`, `year`, `title`, `contents`, `date_posted`, `categories`.`name`
                FROM `posts`
                INNER JOIN `categories` ON `categories`.`id` = `posts`.`cat_id`"
    ;
        
        if ( isset(
    $url) )
        {
            
    $query .= " WHERE `url` = '{$url}'";
        }
        
        if ( isset(
    $cat_id) )
        {
            
    $query .= " WHERE `name` = '{$cat_id}'";
        }
        
        if ( isset(
    $year) )
        {
            
    $query .= " WHERE `year` = '{$year}'";
        }
        
        
    $query .= " ORDER BY `posts`.`id` DESC";
        
        if ( isset(
    $page) )
        {
            
    $lines 4;
            
    $first = ($page 1) * $lines;
            
    $query .= " LIMIT $first,$lines";
        }    
        
        
    $query mysql_query($query);
        
        while ( 
    $row mysql_fetch_assoc($query) )
        {
            
    $posts[] = $row;
        }
        
        return 
    $posts;
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    4
    Penso di aver risolto!
    Ditemi se c'è un metodo migliore...
    per portare fuori la variabile dalla funzione:
    ho dichiarato una variabile esterna alla funzione con valore null
    e l'ho passata alla funzione usando &$var, in questo modo la funzione agisce direttamente sulla variabile esterna consentendomi così di avere a disposizione il risultato.

    Grazie dell'aiuto

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 © 2024 vBulletin Solutions, Inc. All rights reserved.