Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: News Board v0.01

  1. #1
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220

    News Board v0.01

    Ho notato in questi giorni che sono stato qui su HTML.it che moltissimi utenti alle prime armi con PHP desiderano creare un sistema di news da inserire nel proprio sito, con l'ormai famoso indice di pagine in fondo alla "Google-like" (passatemi il termine anche probabilmente google è stato l'ultimo ad usarlo ma è quello più conosciuto ).

    Questo codice è un semplicISSIMO script per il recupero e la visualizzazione di news in PHP. In futuro se mi viene richiesto posso creare mooooolte piu' cose personalizzabili via variabili (come gli style o impaginazioni diverse), ma per ora, usando un linguaggio abbastanza facile e basilare, volevo dare una risorsa facilmente consultabile e 'copiabile' per i più niubberelli (ricordo l'impresa titanica per la creazione delle mie prime news^^' ).

    Prima di tutto serve MySQL e PHP (le versioni non credo siano rilevanti vista la semplicità del codice di entrambi i linguaggi) e ovviamente l'amatissimo PHPMyAdmin.

    Ora passiamo alla creazione della tabella nel database:

    CODICE PER LA CREAZIONE DELLA TABELLA:
    Codice PHP:
    CREATE TABLE `news` (
      `
    idint(32NOT NULL auto_increment,
      `
    datavarchar(32NOT NULL,
      `
    titolovarchar(64NOT NULL,
      `
    contenutotext NOT NULL,
      
    PRIMARY KEY  (`id`)
    ); 
    Creata la tabella creiamo il file per definire la connessione al database:

    DB.PHP
    Codice PHP:
            //indirizzo su cui gira il server MySQL
        
    $host "localhost";
        
    //user per l'accesso al DB
        
    $user "root";
        
    //la password per l'accesso al DB
        
    $pass "";
        
    //database in cui si trova la tabella delle news
        
    $database "sito";
        
        
    $connection mysql_connect($host$user$pass);
        
    mysql_select_db($database$connection);
        
        
    $news_table "news"
    e ora la porzione di codice per la creazione vera e propria della nostra pagina news:

    Codice PHP:
    //includo il file per la connessione al DB 
    include 'db.php';

    //numero di news per pagina
    $nxpag 10;        

    //prendo tutte le news dal database
    $result mysql_query("SELECT * FROM ".$news_table." ORDER BY id DESC");

    //numero di news presenti
    $num mysql_num_rows($result);

    //se non ho definito il numero della pagina visualizzo la prima
    if(!isset($_GET['page'])) { $np 1; }
    //altrimenti prendo il numero pagina dalla querystring (GET)
    else { $np $_GET['page']; }

    ////////////////
    // lista news //
    ////////////////

    //se non ci sono news avverto col seguente messaggio
    if($num == 0)
    {
        print(
    "<p align='center' class='news_titolo'>Al momento non ci sono news segnalate</p>");
    }
    //altrimenti creo la lista delle news
    else
    {
        
    $j=0;
        while(
    $row[$j] = mysql_fetch_array($result)) { $j++; }
        
        for(
    $i=0;$i<$num;$i++)
        {
            
    $min = ($np-1) * $nxpag;
            
    $max = ($min $nxpag) - 1;
            
            if(
    $i>=$min && $i<=$max)
            {
                print(
    "<table border='1' width='500' cellspacing='0' cellpadding='0' align='center'>");
                    print(
    "<tr>");
                        print(
    "<td class='news_titolo'>");
                            print(
    $row[$i]['titolo']);
                        print(
    "</td>");
                        print(
    "<td class='news_titolo' width='80'>");
                            print(
    $row[$i]['data']);
                        print(
    "</td>");
                    print(
    "</tr>");
                    print(
    "<tr>");
                        print(
    "<td class='news_titolo' colspan='2'>");
                            print(
    $row[$i]['contenuto']);
                        print(
    "</td>");
                    print(
    "</tr>");
                print(
    "</table>");
                print(
    "
    "
    );
            }
        }
        
    }

    ////////////////////////////////////
    // indice delle pagine delle news //
    ////////////////////////////////////

    //calcolo il numero di pagine arrotondando per eccesso (ovviamente)
    $npagine ceil($num/$nxpag);

    //calcolo il valore della pagina precedente...
    if($np 1) { $prev $np-1; }
    else { 
    $prev 1; }

    //...e di quella sucessiva
    if($np $npagine) { $next $np+1; }
    else { 
    $next $npagine; }

    //se il numero di news supera il valore consentito per pagina allora faccio comparire l'indice delle pagine
    if($num $nxpag)
    {
        print(
    "<table align='center'><tr><td valign='middle'>");
        
        
    //link per andare alla pagina precedente (se la pagina è la 1 riporta alla 1)
        
    print("[url='news.php?page=".$prev."']<[/url]");
        
        
    //creo l'indice delle pagine
        
    for($i=1;$i<=$npagine;$i++)
        {
            
    //la pagina corrente la faccio non cliccabile
            
    if($i == $np)
            {
                print(
    " <font class='page_current'>".$i."</font> ");
            }
            
    //mentre le altre le rendo dei link al corrispiettivo numero di pagina
            
    else
            {
                print(
    "[url='news.php?page=".$i."']".$i."[/url] ");
            }
        }
        
    //link per andare alla pagina sucessiva (se la pagina è la $npagine riporta alla $npagine)
        
    print("[url='news.php?page=".$next."']>[/url]");
        print(
    "</td></tr></table>");

    Inserendo questo codice nel body di una pagina otterrete un decente, basilare e personalizzabile sistema news.
    Potete anche creare un file con solo questo codice e poi includerlo...il principio è lo stesso.

    La limitazione del numero di news visualizzate non l'ho effettuato con un LIMIT nella query per il semplice fatto che è inutile fare 2 query (una per il numero di news e una per ricavare le news col LIMIT).

    Ripeto: il codice è spartano, ma efficace per chi è alle prime armi.
    Se ci sono altri 2000 post del genere (non li ho trovati) mi scuso...vedetelo come un ripasso.
    Altrimenti fatemi sapere se vi torna utile che in caso aggiungo porzioni di codice per immagini e soprattutto per un mini "back-office" per l'inserimento e la gestione delle news.

    bye^^

  2. #2
    Mi è tornato utile si'! Soprattutto perchè non ne so niente di php e per me che ho bisogno dell'essenziale e non della "pappa pronta", completa e complessa, che non saprei affatto come utilizzare il tuo post è stato fondamentale!

    Piuttosto, ora che ho copiato le news nel database e implementato il codice ecc, ho bisogno di formattare titoli e testo secondo i parametri del mio sito tramite css? Su quali parti di codice devo intervenire? Ho provato a definire i parametri della classe 'news_titolo', ma senza successo... Inoltre vorrei evitare i tag non standard...

    Se puoi... grazie mille!

    Ciao

  3. #3
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Beh agendo sulle classi del CSS dovresti modificare a piacere tutto. Prova a postarmi il codice CSS che usi...magari il problema è li.

    Cmq son contento che ti sia tornato utile. Lo scopo era proprio quello di "iniziare" i neofiti alla paginazione di contenuti tramite l'estrazione da database.


  4. #4
    Beh allora devo aver sbagliato qualcosa da qualche parte... Non credo sia un problema del codice già esistente del sito, in quanto funziona benissimo senza lo script delle news.

    Magari - ipotizzo - il problema sta nel fatto che il sito è in pratica un template composto dai files php delle varie parti di cui si compone (header, menu, main, footer) "incollate" con include dall'index.php.

    In ogni caso, questa è la pagina del sito "nuda e cruda" e senza css e questo è il risultato che non esce come dovrebbe usicre: mancano proprio le news!
    Però risulta formattata la tabella del'indice delle pagine...

  5. #5
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Molto strano....non puo' essere colpa dei CSS (a meno che non hai messo display:none; alla tabella della news).

    L'indice viene creato bene, quindi anche il numero delle news viene riconosciuto...il problema è probabilmente nella parte di codice che stampa le tabelle delle news. Prova a postarmi tutto il codice che cosi vedo cosa potrebbe essere esattamente.

  6. #6
    Voilà:

    Codice PHP:
      <body>
    <table
     style="background-color: rgb(239, 239, 239); width: 95%; text-align: left; margin-left: auto; margin-right: auto;"
     border="0" cellpadding="2" cellspacing="2">
      <tbody>
        <tr>
          <td
     style="vertical-align: middle; text-align: left; width: 70%; background-color: rgb(239, 239, 239);">
          <script type="text/javascript"><!--
    d = new Date();
    day = d.getDay();
    mon = d.getMonth();
    date = d.getDate();
    year = d.getYear();
    if(year<1000){year=(""+(year+11900)).substring(1,5);}
    else{year=(""+(year+10000)).substring(1,5);}
    zday=new Array();
    zday=["domenica","lunedì","martedì","mercoledì","giovedì","venerdì","sabato"];
    zmon=new Array();
    zmon=["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"];
    document.write(""+zday[day]+" "+date+" "+zmon[mon]+" "+year+"");
    //-->
          </script></td>
          <td
     style="vertical-align: middle; text-align: center; width: 8%;"
     class="bordi">[url="index.php"]HOME[/url]</td>
          <td
     style="vertical-align: middle; text-align: center; width: 10%;"
     class="bordi">[url="index.php?page=links"]LINKS[/url]</td>
          <td
     style="vertical-align: middle; width: 12%; text-align: center;"
     class="bordi">
    [url="#"]CONTATTI[/url]</td>
        </tr>
      </tbody>
    </table>
    <h1>News</h1>
    <?php //includo il file per la connessione al DB
    include 'db.php';

    //numero di news per pagina
    $nxpag 5;        

    //prendo tutte le news dal database
    $result mysql_query("SELECT * FROM ".$news_table." ORDER BY id DESC");

    //numero di news presenti
    $num mysql_num_rows($result);

    //se non ho definito il numero della pagina visualizzo la prima
    if(!isset($_GET['page'])) { $np 1; }
    //altrimenti prendo il numero pagina dalla querystring (GET)
    else { $np $_GET['page']; }

    ////////////////
    // lista news //
    ////////////////

    //se non ci sono news avverto col seguente messaggio
    if($num == 0)
    {
        print(
    "<p align='center' class='news_titolo'>Al momento non ci sono news segnalate</p>");
    }
    //altrimenti creo la lista delle news
    else
    {
        
    $j=0;
        while(
    $row[$j] = mysql_fetch_array($result)) { $j++; }
        
        for(
    $i=0;$i<$num;$i++)
        {
            
    $min = ($np-1) * $nxpag;
            
    $max = ($min $nxpag) - 1;
            
            if(
    $i>=$min && $i<=$max)
            {
                print(
    "<table border='1' width='700' cellspacing='0' cellpadding='3' align='center'>");
                    print(
    "<tr>");
                        print(
    "<td class='news_titolo'>");
                            print(
    $row[$i]['titolo']);
                        print(
    "</td>");
                        print(
    "<td class='news_titolo' width='130'>");
                            print(
    $row[$i]['data']);
                        print(
    "</td>");
                    print(
    "</tr>");
                    print(
    "<tr>");
                        print(
    "<td class='news_titolo' colspan='2'>");
                            print(
    $row[$i]['contenuto']);
                        print(
    "</td>");
                    print(
    "</tr>");
                print(
    "</table>");
                print(
    "
    "
    );
            }
        }
        
    }

    ////////////////////////////////////
    // indice delle pagine delle news //
    ////////////////////////////////////

    //calcolo il numero di pagine arrotondando per eccesso (ovviamente)
    $npagine ceil($num/$nxpag);

    //calcolo il valore della pagina precedente...
    if($np 1) { $prev $np-1; }
    else { 
    $prev 1; }

    //...e di quella sucessiva
    if($np $npagine) { $next $np+1; }
    else { 
    $next $npagine; }

    //se il numero di news supera il valore consentito per pagina allora faccio comparire l'indice delle pagine
    if($num $nxpag)
    {
        print(
    "<table align='center'><tr><td valign='middle'>");
        
        
    //link per andare alla pagina precedente (se la pagina è la 1 riporta alla 1)
        
    print("[url='news.php?page=".$prev."']<[/url]");
        
        
    //creo l'indice delle pagine
        
    for($i=1;$i<=$npagine;$i++)
        {
            
    //la pagina corrente la faccio non cliccabile
            
    if($i == $np)
            {
                print(
    " <font class='page_current'>".$i."</font> ");
            }
            
    //mentre le altre le rendo dei link al corrispiettivo numero di pagina
            
    else
            {
                print(
    "[url='news.php?page=".$i."']".$i."[/url] ");
            }
        }
        
    //link per andare alla pagina sucessiva (se la pagina è la $npagine riporta alla $npagine)
        
    print("[url='news.php?page=".$next."']>[/url]");
        print(
    "</td></tr></table>");
    ?>
    </body>
    </html>
    Ovviamente questo è il codice del file che va "incollato" con index.php

  7. #7
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    uhm...mi sembra tutto corretto..non capisco :master:

  8. #8
    Sigh..

    Proverò a rifletterci su un po' di più...

    Ti ringrazio lo stesso infinitamente!

  9. #9
    Non so se hai notato: se provi a visualizzare il sorgente della pagina noterai che dopo l'<h1> appare solo questo:

    codice:
    <table align='center'><tr><td valign='middle'><1 2 3 ></td></tr></table></body>
    In pratica viene ignorato tutto il codice php che precede la stampa dei numeri delle pagine di news! VVoVe:

  10. #10
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    appunto...è quello l'assurdo.

    Da come è strutturato il codice, se stampa i numeri di pagina significa che le news ci sono e le ha contate bene. Inoltre o stampa "Non ci sono news disponibili" oppure stampa le tabelle...invece non stampa nulla.

    Credimi...non vedo l'inghippo.

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.