Script per creare un Blog con PHP e Database
Inizieremo in questo capitolo a mostrarvi quali sono i passi se volete creare un blog che sia tutto vostro, insomma vi offriamo la possibilità di scrivere il codice sorgente di un blog dalla prima all’ultima riga. Ovviamente sappiamo benissimo che già oggi esistono dei CMS come WP che sono altamente configurabili e personalizzabili, ma talune rarissime volte questo non basta e ci vogliono degli script che siano totalmente configurabili e questo articolo va in questo senso , ossia vi offriamo e vi guidiamo alla creazione di un endoscheletro di un blog che poi voi possiate incrementare a vostra volta.
Ma prima facciamoci alcune domande. La Prima è ovviamente cos’e’ questo blog che vogliamo andare a realizzare?
Un blog è un particolare tipo di CMS , ossia un’applicazione che gira nel web , quindi con delle determinate regole ben stabilite, che implementa l’equivalente di un tradizionale diario.
Nel blog alcuni utenti sono abilitati a scrivere dei messaggi, questi messaggi si chiamano in gergo post, da postare appunto. Tali post hanno quindi un contenuto che viene fatto leggere ai visitatori che si recano a leggere in quel determinato sito.
Ed i problemi a cui andremo incontro per fare questa realizzazione quali sono?
- I post devono essere memorizzati in un file oppure direttamente in un database, vedremo entrambi gli esempi
- Gli eventuali commenti dei visitatori devono essere a loro volta memorizzati
- I post devono essere modificabili, quindi bisogna predisporre degli update.
In conclusione cosa ci server?
Beh diciamo alcune conoscenze specifiche di linguaggio PHP, di Mysql, di HTML e di CSS, ma soprattutto ci serve un hosting per potere fare girare il nostro blog. In giro ce ne sono molti gratuiti a cui possiamo tranquillamente chiedere , oppure ovviamente ci sono anche quelli a pagamento anche per pochi euro.
L’applicazione sarà costituita da una serie di file e cartelle, inclusi in un’unica directory che chiameremo Crea Blog , ma ovviamente ognuno puo’ mettere il nome che ritiene piu’ opportuno. Ci sarà poi la pagina principale o home page, ossia quella pagina a cui accederà un utente quando arriverà nel nostro blog, che chiameremo indice.php, ci sarà inoltre una pagina per l’inserimento dei post, che chiameremo inserisci.php, una pagina per l’accesso all’archivio complessivo dei post, archivio php e gli ultimi due file saranno uno per le configurazioni config.php e uno per le funzioni ossia funzioni.php
Analizziamo adesso quale sarà la pagina principale del nostro blog che andremo a realizzare, ossia l’indice.
Vi gettiamo a dritto il codice della pagina che è
1<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”
2″http://www.w3.org/TR/XHTML1/DTD/XHTML1-strict.dtd”>
3<?php
4require(“config.php”);
5require(“funzioni.php”);
6?>
7<html>
8<head>
9<title><?php echo $TITOLO; ?></title>
10<link rel=”stylesheet” type=”text/css” href=”stile.php” />
11</head>
12<body>
13<div id=”intestazione”>
14<h1><?php echo $TITOLO; ?></h1>
15<h2>di <?php echo $UTENTE; ?></h2>
16<div id=”menu”>
17<a href=”indice.php”>Home</a>
18<a href=”inserisci.php”>Inserisci</a>
19<a href=”archivio.php”>Archivio</a>
20</div>
21</div>
22<div id=”blog”>
23<?php
24$contenuto = leggi(1, 5); // (* \label{line:PHP_chiamata-leggi} *)
i26f (count($contenuto) > 0) {
27foreach ($contenuto as $post) {
28echo “<div class=\”post\”>\n<h3>”, $post[2], “</h3>\n”;
29echo “<p>”, $post[3], “</p>\n”;
30echo “<p class=\”info\”>Pubblicato il: “, $post[1],
31” da “, $UTENTE, “</p>\n</div>\n”;
32}
33}
34?>
35</div>
36<hr/>
37</body>
38</html>
analizziamola in dettaglia cominciando dalla riga 24 dove fa la sua comparsa la funzione leggi, questa funzione verrà definita in seguito in un apposito file , con il compito di restituire un array conentente il numero di post indicati nel suo secondo argomento, a partire da quello che nel blog occupa la posizione identificata dal primo argomento.
Nel caso l’array contenesse dei valori viene eseguita la funzione foreach che ha il compito di scorrere tutti gli elementi dell’array e visualizzarne il contenuto. Tali valori verranno cosi’ di volta in volta passati alla variabile post che è come contenuto un array avente i seguenti campi in rigoroso ordine
identificatore ossia un indice crescente
data la data in cui è stato scritto il post
il titolo ossia il titolo che abbiamo dato al post
il contenuto quello che il post contiene al suo interno
Per il momento ci fermiamo qui di passo in passo vi verrà tutto piu’ chiaro. Ma prima di terminare vi vogliamo mostrare l’organigramma di quello che stiamo realizzando.
alla base di tutto sta indice.php che legge i dati archiviati da un archivio che potrà essere un file memorizzato nel nostro server oppure una soluzione piu’ raffinata che potrebbe essere quella di utilizzare un database mysql
.L’Archivio.php richiama i file dal database e li visualizza in indice php, ma archivio.php diciamo che sarà il nostro cuore pulsante del sistema in quanto non si limiterà a fare questo, ma si occuperà anche di prendere i dati da inserisci.php, file che si occuperà della memorizzazione dei file nel database di riferimento. Insomma del resto l’organigramma creato è di per se’ abbastanza esplicativo
La Pagina di archiviazione dei Post
E adesso che abbiamo visto come inserirli i post vediamo anche come sia possibile archiviarli, nel modo piu’ semplice che abbiamo mai visto. Innanzi tutto dobbiamo precisare cosa in realtà sia un archivio. Diciamo che come dice la parola stessa l’archivio è un luogo , in questo caso del web , dove sia possibile trovare contenuti vecchi., in una parola passati.
Vediamo il listato di archivio.php e poi iniziamo a spiegarvelo con un’unica precisazione che è quella che per il momento stiamo considerando di memorizzare il tutto sun un file di testo e non su un database, dopo vi faremo vedere anche come espletare questa seconda funzione.
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”
“http://www.w3.org/TR/XHTML1/DTD/XHTML1-strict.dtd”>
<?php
require(“config.php”);
require(“funzioni.php”);
?>
<html>
<head>
<title><?php echo $TITOLO; ?></title>
<link rel=”stylesheet” type=”text/css” href=”stile.php” />
</head>
<body>
<div id=”intestazione”>
<h1><?php echo $TITOLO; ?></h1>
<h2>di <?php echo $UTENTE; ?></h2>
<div id=”menu”>
<a href=”indice.php”>Home</a>
<a href=”inserisci.php”>Inserisci</a>
<a href=”archivio.php”>Archivio</a>
</div>
</div>
1.
2. <div id=”blog”>
3.<h1>Archivio dei post</h1>
4.<?php
5.$numero = numeroPost();
6.$pagine = ceil($numero / $POSTPERPAGINA);
7.if (!isset($_GET[“pagina”]))
8.$pagina = 1;
9.else
10.$pagina = $_GET[“pagina”];
11.$contenuto = leggi(($pagina – 1) * $POSTPERPAGINA + 1, $POSTPERPAGINA); // (* \label{line:PHP_chiamata-leggi} *)
12.if (count($contenuto) > 0) {
13. foreach ($contenuto as $post) {
14.echo “<div class=\”post\”>\n<h3>”, $post[2], “</h3>\n”;
15.echo “<p>”, $post[3], “</p>\n”;
16.echo “<p class=\”info\”>Pubblicato il: “, $post[1],
17.” da “, $UTENTE, “</p>\n</div>\n”;
18.}
19.}
21.echo “<p>Pagine: “;
22.for ($i = 1; $i <= $pagine; $i++)
23.echo “<a href=\””, $_SERVER[“PHP_SELF”], “?pagina=”, $i, “\”>”,
24.$i, “</a> “;
25.echo “</p>\n”;
26.?>
</div>
<hr/>
</body>
</html>
Consideriamo il rigo if (!isset($_GET[“pagina”])) questo rigo in pratica ci fa capire quale pagina da visualizzare è stata richiesta dall’utente, se questo valore non è stato caricato gli verrà asseganto il valore 1 perche’ vorrà dire che l’utente ha semplicemente digitato il link archivio
Mentre la variabile $pagine si occuperà di calcolare il contenuto di pagine di cui è costituito l’archivio ( pari al numero totale di post pubblicati diviso per il numero d post visualizzabili su una singola pagina. Di Seguito , la variabile $contenuto viene riempita con i post di contenuto nella pagina specificata nella variabile $pagina e il loro testo viene emesso come nelle pagine d’indice
Veniamo a considerare un altro file abbastanza importante il file di configurazione del blog config .php Il File conterrà il nome dell’utente e la password da utilizzare per aggiungere nuovi post, il titolo del blog e informazioni sulla personalizzazione del sito : in qusto esempio , ci limitato a colori e font da usare.
<?php
// opzioni di configurazione del blog
// utente
$UTENTE = “lituo nome da Amministratorer”;
$PASSWORD = “segreta”;
// memorizzazione dei post
$BLOGFILE = “db/blog.txt”;
// titolo del blog
$TITOLO = “Blog di Prova”;
// URL del blog
$URL = “http://www.miosito.com”;
// post per pagina
$POSTPERPAGINA = 5;
// colori
$COLSFONDO = “white”;
$COLTESTO = “black”;
$COLINTESTAZIONE = “#99C1FF”;
$COLMENU = “#99C1FF”;
// font
$FONT = “Arial”;
?>
Come potete il file di configurazione da alcune informazioni essenziali ossia qual’e’ il nome utente e la relativa password, dove sono memorizzati i post, il titolo del blog, il numero di post da visualizzare per ogni pagina e li eventuali colori dello sfondo, del testo, e dell’intestazione, il font utilizzato è l’arial ovviamente tutti questi parametri sono modificabili a piacimento di colui che scrive il codice.
Per la memorizzazione dei post per il momento abbiamo scelto un file di testo con i record a lunghezza variabile, cioè in questo modo ogni post contiene una riga di testo che va a terminare con il carattere a capo automatico che corrisponde al /n, a sua volta all’interno di ogni riga abbiamo introdotto uni carattere di separazione che è il #. In modo tale da separare i campi che costituiscono un post che saranno nell’ordine
- identificatore id
- data e ora di creazione
- titolo
- contenuto
Effettivamente piu’ che un blog qui siamo andati a creare una sorta di twitter.. Insomma potremmo andare nel nostro file di testo php e trovarci scritto qualcosa del genere
1#2009-09-12, 12:23# Questo blog funziona che è una meraviglia# è una cosa fantastica, venite a trovarci, vi aspettiamo numerosi
2#2009-09-13, 15:44# Ciao mondo,# Questo è il mio primo articolo su questo blog.
Ovviamente poi nel testo convertiremo i /n con gli xhtml <br>.
La gestione dei post
Questa lezione si articolerà su tre punti o su tre funzione
- registra
- leggi
- numeroPost
con queste tre funzioni sarà possibile gestire tutto il post e andiamo brevemente a mostrarvele per una maggiore comprensione di quello che di fatto siamo andati a fare.
Ma iniziamo proprio da utente Valido() questa funzione si limita a verificare che i dati passati come parametri alla funzione ($utente e $password)
function utenteValido($utente, $password) {
global $UTENTE, $PASSWORD;
return ($utente == $UTENTE && $password == $PASSWORD);
}
Insomma questa è, vediamo ora la funzione registra, questa funzione dovrà avere principalmente la funzione di leggere il file, scrivere in testa il nuovo post, e poi scrivere il contenuto precedente di seguito.
Questo è il suo codice
function registra($titolo, $testo) {
global $BLOGFILE;
$contenuto = file($BLOGFILE); // leggo il contenuto
// creo il nuovo id
$penultimo = explode(“#”, $contenuto[0]);
$ultimo = $penultimo[0] + 1;
$fp = fopen($BLOGFILE, “w”); // apro il file in scrittura
// elimino eventuali caratteri di a capo e entità
// non conformi con HTML
$titolo = rendiConforme($titolo);
$testo = rendiConforme($testo);
// compongo la riga da registrare contenente il nuovo post
$post = $ultimo . “#” . date(“Y-m-d, G:i”)
. “#” . $titolo . “#” . $testo . “\n”;
fwrite($fp, $post); // scrivo il post
if (count($contenuto) > 0) { // se il blog contiene già qualcosa
foreach ($contenuto as $post) {
// riscrivo, di seguito, tutti i post precedenti
fwrite($fp, $post);
}
}
fclose($fp); // chiudo il file
}
Come potete vedere ci siamo procurati di suddividere la funzione in tre parti distinte , la prima parte diciamo che grosso modo rappresenta la parte preparatoria della funzione, nella quale vengono preparati i dati necessari per la composizione del post,: si legge il contenuto del file, si calcola l’identificare dell’ultimo post, si riapre il file per la scrittura ( in questo modo viene cancellato e andrà riscritto) e si utilizza la funzione rendiConforme() per eliminare caratteri non voluti nel titolo e nel testo del post.
Ci vogliamo solamente soffermare un attimo sulla funzione explode ma solamente giusto per fare un richiamo.
Supponiamo che in ingresso la funzione explode riceva una stringa del tipo
“1#2009-08-01, 12:22#Ciao Mondo# Ciao come stai io tutto bene e tu
A questo punto la funzione explode separerà la stringa ricevuta in ingresso e produrrà in uscita la seguente stringa
[0] => 1
[1] => “2009-08-01”
[2] => Ciao mondo
Insomma ogni volta che trova il separatore che abbiamo introdotto al primo capito questa prende e crea di conseguenza un array. Vi vogliamo mostrare anche la funzione rendiConforme ma solamente perche’ è intrisa di codice php
function rendiConforme($testo) {
$testo = nl2br(htmlentities(stripslashes($testo)));
$testo = str_replace(“\r\n”, “”, $testo); // sistemi windows
$testo = str_replace(“\n”, “”, $testo); // sistemi unix
$testo = str_replace(“\r”, “”, $testo); // sistemi MacOS
return $testo;
}
Lo riconoscete? No? allora è meglio che diate una buona ripassata al buon vecchio codice PHP.E veniamo dunque alla funzione piu’ importante e sicuramente la piu’ semplice dell’intero panorama del nostro blog, beh diciamo almeno una delle piu’ semplici. Stiamo parlando della funzione leggi.
function leggi($da, $quanti = NULL) {
global $BLOGFILE;
$risultato = array();
$contenuto = file($BLOGFILE); // leggo il contenuto
if (is_null($quanti))
$quanti = count($contenuto);
for ($i = $da; ($i – $da < $quanti) && ($i <= count($contenuto)); $i++) {
// estraggo un post dal file e lo aggiungo all’array $risultato
$post = explode(“#”, $contenuto[$i – 1]); //(* \label{line:PHP_leggi-explode} *)
$risultato[] = $post;
}
return $risultato;
}
è abbastanza auto esplicativa, l’unica nota che vi vogliamo fare tenere presente è la condizione sul ciclo for , che estrae i post specificati dal file. Si osservi che , oltre a verificare che l’indice $i non vada oltre gli $n post a partire dal valore della variabile $da, è necessario anche verificare che esso non vada oltre al numero totale di post contenuti nell’array (istruizione $i <= count($contenuto)
ci sarebbe anche da spiegare la funzione numeroPost ma insomma vi abbiamo detto funzione ma è una funzione per modo di dire dato che è
function numeroPost() {
global $BLOGFILE;
$blog = file($BLOGFILE);
// restituisco il numero di righe del file
return count($blog);
}
Lo Stile
E veniamo adesso ad occuparci dello stile ossia una mera opera di abbellimento del nostro blog. Insomma qualcosa di molto evitabile ossia se non lo facciamo funziona tutto perfettamente, ma se non lo facciamo dopo una prima visita nessuno ritornerà piu’ a visitarci, quindi nel dubbio, lo facciamo assolutamente.. Il Foglio di stile in genere sono in formato css, infatti sono appunto fogli di stile css, lo sono anche a questo giro che invece abbiamo utilizzato un file php, insomma abbiamo un po’ mascherato il tutto ma il risultato è sempre il solito e il gioco che abbiamo fatto è abbastanza evidente, nel dubbio cmq riconsultare nuovamente la nostra guida sui CSS.
<?php
header(“Content-type: text/css”);
include(“config.php”);
?>
body {
background-color: <?php echo $COLSFONDO; ?>;
color: <?php echo $COLTESTO; ?>;
}
#intestazione {
color: <?php echo $COLSFONDO; ?>;
background-color: <?php echo $COLINTESTAZIONE; ?>;
}
#menu {
color: <?php echo $SFONDO; ?>;
background-color: <?php echo $COLMENU; ?>;
float: left;
display: block;
width: 100%;
}
#menu a {
margin: 5px;
color: <?php echo $COLSFONDO; ?>;
font-weight: bold;
}
.post {
border: thin dashed <?php echo $COLMENU; ?>;
padding: 5px;
}
#blog {
width: 600px;
}
il Database
Quello che abbiamo visto fino ad adesso andava bene, anzi benissimo nel senso che funzionava alla perfezione senza pero’ l’ausilio di altri interventi, ma non era assolutamente la soluzione migliore.La soluzione migliore gioco di parole a parte è sicuramente quella che prevede l’utilizzo dei database e siccome stiamo utilizzando il php , il database da utilizzare in questione è sicuramente il mysql. Quindi creiamo nel nostro phpadmin il seguente codice sql
DROP TABLE IF EXISTS posts;
CREATE TABLE posts (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
data DATETIME NOT NULL,
titolo VARCHAR(255),
testo TEXT
);
DROP TABLE IF EXISTS utenti;
CREATE TABLE utenti (
utente VARCHAR(20),
password VARCHAR(32)
);
INSERT INTO utenti VALUES (‘CapitanBlogger’, md5(‘segreta’));
nella tabella post memorizzeremo i post che andranno ad essere pubblicati nel blog
nella tabella utenti tabella di supporto , utilizzata per contenere i dati di autenticazione dell’utente o di piu’ utenti.
a questo punto pero’ dobbiamo anche modificare alcune funzioni in pratica quella registra e leggi.. Iniziamo con la registra che cosi’ diventa
function registra($titolo, $testo) {
$conn = dbConnect();
$titolo = nl2br(htmlentities($titolo));
$testo = nl2br(htmlentities($testo));
$data = date(“Y-m-d H:i:s”);
$sql = “INSERT INTO posts(data, titolo, testo) VALUES(‘”
. $data . “‘, ‘” . $titolo . “‘, ‘” . $testo . “‘)”;
mysql_query($sql) or die(“Errore nella query: ”
. $sql . “\n” . mysql_error());
mysql_close($conn);
}
come potete vedere grazie al mysql è addirittura diventata piu’ semplice della funzione registra antecedente.
la funzione leggi invece diventa
function leggi($da, $quanti = NULL) {
$conn = dbConnect();
$risultato = array();
$sql = “SELECT * FROM posts WHERE id >= ” . $da;
if (!is_null($quanti))
$sql .= ” AND id <= ” . ($da + $quanti);
$sql .= ” ORDER BY data DESC”;
$risposta = mysql_query($sql) or die(“Errore nella query: ”
. $sql . “\n” . mysql_error());
while ($riga = mysql_fetch_row($risposta)) {
$risultato[] = $riga;
}
mysql_close($conn);
return $risultato;
}
e questa è la funzione leggi. mentre la funzione numero post deve essere sostituita con la seguente.
function numeroPost() {
$conn = dbConnect();
$sql = “SELECT MAX(id) as numero FROM posts”;
$risposta = mysql_query($sql) or die(“Errore nella query: ”
. $sql . “\n” . mysql_error());
$numero = mysql_fetch_row($risposta);
mysql_close($conn);
return $numero[0];
}
mentre la funzione di connessione diventa
function dbConnect() {
$conn = mysql_connect(“localhost”, “CapitanBlogger”, “mysql_segreta”)
or die(“Errore nella connessione al db: ” . mysql_error());
mysql_selectdb(“test”)
or die(“Errore nella selezione del db: ” . mysql_error());
return $conn;
}
alla quale ovviamente voi dovrete sostituire i vostri dati, questi sono solo di esempio
non commentiamo piu’ di tanto gli script che ci sembrano veramente molto auto esplicativi, in ogni caso per dubbi o incertezze potete rivolgervi al forum cliccando sull’apposita voce sulla destra, saremo lieti di venire incontro alle vostre esigenze.
La Conclusione
A questo punto non ci rimane che tirare un po’ le somme del nostro progetto, quindi abbiamo visto come attraverso un po’ di programmazione php e un file di testo oppure un database sia possibile costruire un blog che ovviamente non sarà quello dello wordpress ma sarà cmq un database funzionante e anche con una sua propria grafica. Il tutto insomma funzionale al progetto che avevamo prospettato. La logica o meglio il prospetto seguito è il seguente
Quindi una pagina indice che si scambia i dati con inserisci.php che cicla su stessa quando riceve un metodo post e aggiunge l’articolo ad un sistema di archiviazione che possa essere un file di testo oppure piu’ semplicemente un database. Abbiamo visto come sia inoltre possibile passare con delle semplici istruzioni da un file di testo ad un database mysql e ovviamente abbiamo mostrato qualche funzione mysql piu’ ricercata che ci ha permesso di semplificare le nostre operazione.
Per ogni buon conto potrete trovare il codice shareware qui. Il capitolo è il terzo e la cartella plwblog
E con questo concludiamo per chi avesse dubbi o chiarimenti si puo’ recare nel nostro forum e ampliare la discussione con noi, nel caso saremmo lieti di rispondere ai vostri eventuali dubbi o perplessità
Mi piace:
Mi piace Caricamento...
Correlati
Fabrizio S.
Share post:
Script per creare un Blog con PHP e Database
Inizieremo in questo capitolo a mostrarvi quali sono i passi se volete creare un blog che sia tutto vostro, insomma vi offriamo la possibilità di scrivere il codice sorgente di un blog dalla prima all’ultima riga. Ovviamente sappiamo benissimo che già oggi esistono dei CMS come WP che sono altamente configurabili e personalizzabili, ma talune rarissime volte questo non basta e ci vogliono degli script che siano totalmente configurabili e questo articolo va in questo senso , ossia vi offriamo e vi guidiamo alla creazione di un endoscheletro di un blog che poi voi possiate incrementare a vostra volta.
Ma prima facciamoci alcune domande. La Prima è ovviamente cos’e’ questo blog che vogliamo andare a realizzare?
Un blog è un particolare tipo di CMS , ossia un’applicazione che gira nel web , quindi con delle determinate regole ben stabilite, che implementa l’equivalente di un tradizionale diario.
Nel blog alcuni utenti sono abilitati a scrivere dei messaggi, questi messaggi si chiamano in gergo post, da postare appunto. Tali post hanno quindi un contenuto che viene fatto leggere ai visitatori che si recano a leggere in quel determinato sito.
Ed i problemi a cui andremo incontro per fare questa realizzazione quali sono?
In conclusione cosa ci server?
Beh diciamo alcune conoscenze specifiche di linguaggio PHP, di Mysql, di HTML e di CSS, ma soprattutto ci serve un hosting per potere fare girare il nostro blog. In giro ce ne sono molti gratuiti a cui possiamo tranquillamente chiedere , oppure ovviamente ci sono anche quelli a pagamento anche per pochi euro.
L’applicazione sarà costituita da una serie di file e cartelle, inclusi in un’unica directory che chiameremo Crea Blog , ma ovviamente ognuno puo’ mettere il nome che ritiene piu’ opportuno. Ci sarà poi la pagina principale o home page, ossia quella pagina a cui accederà un utente quando arriverà nel nostro blog, che chiameremo indice.php, ci sarà inoltre una pagina per l’inserimento dei post, che chiameremo inserisci.php, una pagina per l’accesso all’archivio complessivo dei post, archivio php e gli ultimi due file saranno uno per le configurazioni config.php e uno per le funzioni ossia funzioni.php
Analizziamo adesso quale sarà la pagina principale del nostro blog che andremo a realizzare, ossia l’indice.
Vi gettiamo a dritto il codice della pagina che è
1<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”
2″http://www.w3.org/TR/XHTML1/DTD/XHTML1-strict.dtd”>
3<?php
4require(“config.php”);
5require(“funzioni.php”);
6?>
7<html>
8<head>
9<title><?php echo $TITOLO; ?></title>
10<link rel=”stylesheet” type=”text/css” href=”stile.php” />
11</head>
12<body>
13<div id=”intestazione”>
14<h1><?php echo $TITOLO; ?></h1>
15<h2>di <?php echo $UTENTE; ?></h2>
16<div id=”menu”>
17<a href=”indice.php”>Home</a>
18<a href=”inserisci.php”>Inserisci</a>
19<a href=”archivio.php”>Archivio</a>
20</div>
21</div>
22<div id=”blog”>
23<?php
24$contenuto = leggi(1, 5); // (* \label{line:PHP_chiamata-leggi} *)
i26f (count($contenuto) > 0) {
27foreach ($contenuto as $post) {
28echo “<div class=\”post\”>\n<h3>”, $post[2], “</h3>\n”;
29echo “<p>”, $post[3], “</p>\n”;
30echo “<p class=\”info\”>Pubblicato il: “, $post[1],
31” da “, $UTENTE, “</p>\n</div>\n”;
32}
33}
34?>
35</div>
36<hr/>
37</body>
38</html>
analizziamola in dettaglia cominciando dalla riga 24 dove fa la sua comparsa la funzione leggi, questa funzione verrà definita in seguito in un apposito file , con il compito di restituire un array conentente il numero di post indicati nel suo secondo argomento, a partire da quello che nel blog occupa la posizione identificata dal primo argomento.
Nel caso l’array contenesse dei valori viene eseguita la funzione foreach che ha il compito di scorrere tutti gli elementi dell’array e visualizzarne il contenuto. Tali valori verranno cosi’ di volta in volta passati alla variabile post che è come contenuto un array avente i seguenti campi in rigoroso ordine
identificatore ossia un indice crescente
data la data in cui è stato scritto il post
il titolo ossia il titolo che abbiamo dato al post
il contenuto quello che il post contiene al suo interno
Per il momento ci fermiamo qui di passo in passo vi verrà tutto piu’ chiaro. Ma prima di terminare vi vogliamo mostrare l’organigramma di quello che stiamo realizzando.
alla base di tutto sta indice.php che legge i dati archiviati da un archivio che potrà essere un file memorizzato nel nostro server oppure una soluzione piu’ raffinata che potrebbe essere quella di utilizzare un database mysql
.L’Archivio.php richiama i file dal database e li visualizza in indice php, ma archivio.php diciamo che sarà il nostro cuore pulsante del sistema in quanto non si limiterà a fare questo, ma si occuperà anche di prendere i dati da inserisci.php, file che si occuperà della memorizzazione dei file nel database di riferimento. Insomma del resto l’organigramma creato è di per se’ abbastanza esplicativo
La Pagina di archiviazione dei Post
E adesso che abbiamo visto come inserirli i post vediamo anche come sia possibile archiviarli, nel modo piu’ semplice che abbiamo mai visto. Innanzi tutto dobbiamo precisare cosa in realtà sia un archivio. Diciamo che come dice la parola stessa l’archivio è un luogo , in questo caso del web , dove sia possibile trovare contenuti vecchi., in una parola passati.
Vediamo il listato di archivio.php e poi iniziamo a spiegarvelo con un’unica precisazione che è quella che per il momento stiamo considerando di memorizzare il tutto sun un file di testo e non su un database, dopo vi faremo vedere anche come espletare questa seconda funzione.
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”
“http://www.w3.org/TR/XHTML1/DTD/XHTML1-strict.dtd”>
<?php
require(“config.php”);
require(“funzioni.php”);
?>
<html>
<head>
<title><?php echo $TITOLO; ?></title>
<link rel=”stylesheet” type=”text/css” href=”stile.php” />
</head>
<body>
<div id=”intestazione”>
<h1><?php echo $TITOLO; ?></h1>
<h2>di <?php echo $UTENTE; ?></h2>
<div id=”menu”>
<a href=”indice.php”>Home</a>
<a href=”inserisci.php”>Inserisci</a>
<a href=”archivio.php”>Archivio</a>
</div>
</div>
1.
2. <div id=”blog”>
3.<h1>Archivio dei post</h1>
4.<?php
5.$numero = numeroPost();
6.$pagine = ceil($numero / $POSTPERPAGINA);
7.if (!isset($_GET[“pagina”]))
8.$pagina = 1;
9.else
10.$pagina = $_GET[“pagina”];
11.$contenuto = leggi(($pagina – 1) * $POSTPERPAGINA + 1, $POSTPERPAGINA); // (* \label{line:PHP_chiamata-leggi} *)
12.if (count($contenuto) > 0) {
13. foreach ($contenuto as $post) {
14.echo “<div class=\”post\”>\n<h3>”, $post[2], “</h3>\n”;
15.echo “<p>”, $post[3], “</p>\n”;
16.echo “<p class=\”info\”>Pubblicato il: “, $post[1],
17.” da “, $UTENTE, “</p>\n</div>\n”;
18.}
19.}
21.echo “<p>Pagine: “;
22.for ($i = 1; $i <= $pagine; $i++)
23.echo “<a href=\””, $_SERVER[“PHP_SELF”], “?pagina=”, $i, “\”>”,
24.$i, “</a> “;
25.echo “</p>\n”;
26.?>
</div>
<hr/>
</body>
</html>
Consideriamo il rigo if (!isset($_GET[“pagina”])) questo rigo in pratica ci fa capire quale pagina da visualizzare è stata richiesta dall’utente, se questo valore non è stato caricato gli verrà asseganto il valore 1 perche’ vorrà dire che l’utente ha semplicemente digitato il link archivio
Mentre la variabile $pagine si occuperà di calcolare il contenuto di pagine di cui è costituito l’archivio ( pari al numero totale di post pubblicati diviso per il numero d post visualizzabili su una singola pagina. Di Seguito , la variabile $contenuto viene riempita con i post di contenuto nella pagina specificata nella variabile $pagina e il loro testo viene emesso come nelle pagine d’indice
Veniamo a considerare un altro file abbastanza importante il file di configurazione del blog config .php Il File conterrà il nome dell’utente e la password da utilizzare per aggiungere nuovi post, il titolo del blog e informazioni sulla personalizzazione del sito : in qusto esempio , ci limitato a colori e font da usare.
<?php
// opzioni di configurazione del blog
// utente
$UTENTE = “lituo nome da Amministratorer”;
$PASSWORD = “segreta”;
// memorizzazione dei post
$BLOGFILE = “db/blog.txt”;
// titolo del blog
$TITOLO = “Blog di Prova”;
// URL del blog
$URL = “http://www.miosito.com”;
// post per pagina
$POSTPERPAGINA = 5;
// colori
$COLSFONDO = “white”;
$COLTESTO = “black”;
$COLINTESTAZIONE = “#99C1FF”;
$COLMENU = “#99C1FF”;
// font
$FONT = “Arial”;
?>
Come potete il file di configurazione da alcune informazioni essenziali ossia qual’e’ il nome utente e la relativa password, dove sono memorizzati i post, il titolo del blog, il numero di post da visualizzare per ogni pagina e li eventuali colori dello sfondo, del testo, e dell’intestazione, il font utilizzato è l’arial ovviamente tutti questi parametri sono modificabili a piacimento di colui che scrive il codice.
Per la memorizzazione dei post per il momento abbiamo scelto un file di testo con i record a lunghezza variabile, cioè in questo modo ogni post contiene una riga di testo che va a terminare con il carattere a capo automatico che corrisponde al /n, a sua volta all’interno di ogni riga abbiamo introdotto uni carattere di separazione che è il #. In modo tale da separare i campi che costituiscono un post che saranno nell’ordine
Effettivamente piu’ che un blog qui siamo andati a creare una sorta di twitter.. Insomma potremmo andare nel nostro file di testo php e trovarci scritto qualcosa del genere
1#2009-09-12, 12:23# Questo blog funziona che è una meraviglia# è una cosa fantastica, venite a trovarci, vi aspettiamo numerosi
2#2009-09-13, 15:44# Ciao mondo,# Questo è il mio primo articolo su questo blog.
Ovviamente poi nel testo convertiremo i /n con gli xhtml <br>.
La gestione dei post
Questa lezione si articolerà su tre punti o su tre funzione
con queste tre funzioni sarà possibile gestire tutto il post e andiamo brevemente a mostrarvele per una maggiore comprensione di quello che di fatto siamo andati a fare.
Ma iniziamo proprio da utente Valido() questa funzione si limita a verificare che i dati passati come parametri alla funzione ($utente e $password)
function utenteValido($utente, $password) {
global $UTENTE, $PASSWORD;
return ($utente == $UTENTE && $password == $PASSWORD);
}
Insomma questa è, vediamo ora la funzione registra, questa funzione dovrà avere principalmente la funzione di leggere il file, scrivere in testa il nuovo post, e poi scrivere il contenuto precedente di seguito.
Questo è il suo codice
function registra($titolo, $testo) {
global $BLOGFILE;
$contenuto = file($BLOGFILE); // leggo il contenuto
// creo il nuovo id
$penultimo = explode(“#”, $contenuto[0]);
$ultimo = $penultimo[0] + 1;
$fp = fopen($BLOGFILE, “w”); // apro il file in scrittura
// elimino eventuali caratteri di a capo e entità
// non conformi con HTML
$titolo = rendiConforme($titolo);
$testo = rendiConforme($testo);
// compongo la riga da registrare contenente il nuovo post
$post = $ultimo . “#” . date(“Y-m-d, G:i”)
. “#” . $titolo . “#” . $testo . “\n”;
fwrite($fp, $post); // scrivo il post
if (count($contenuto) > 0) { // se il blog contiene già qualcosa
foreach ($contenuto as $post) {
// riscrivo, di seguito, tutti i post precedenti
fwrite($fp, $post);
}
}
fclose($fp); // chiudo il file
}
Come potete vedere ci siamo procurati di suddividere la funzione in tre parti distinte , la prima parte diciamo che grosso modo rappresenta la parte preparatoria della funzione, nella quale vengono preparati i dati necessari per la composizione del post,: si legge il contenuto del file, si calcola l’identificare dell’ultimo post, si riapre il file per la scrittura ( in questo modo viene cancellato e andrà riscritto) e si utilizza la funzione rendiConforme() per eliminare caratteri non voluti nel titolo e nel testo del post.
Ci vogliamo solamente soffermare un attimo sulla funzione explode ma solamente giusto per fare un richiamo.
Supponiamo che in ingresso la funzione explode riceva una stringa del tipo
“1#2009-08-01, 12:22#Ciao Mondo# Ciao come stai io tutto bene e tu
A questo punto la funzione explode separerà la stringa ricevuta in ingresso e produrrà in uscita la seguente stringa
[0] => 1
[1] => “2009-08-01”
[2] => Ciao mondo
Insomma ogni volta che trova il separatore che abbiamo introdotto al primo capito questa prende e crea di conseguenza un array. Vi vogliamo mostrare anche la funzione rendiConforme ma solamente perche’ è intrisa di codice php
function rendiConforme($testo) {
$testo = nl2br(htmlentities(stripslashes($testo)));
$testo = str_replace(“\r\n”, “”, $testo); // sistemi windows
$testo = str_replace(“\n”, “”, $testo); // sistemi unix
$testo = str_replace(“\r”, “”, $testo); // sistemi MacOS
return $testo;
}
Lo riconoscete? No? allora è meglio che diate una buona ripassata al buon vecchio codice PHP.E veniamo dunque alla funzione piu’ importante e sicuramente la piu’ semplice dell’intero panorama del nostro blog, beh diciamo almeno una delle piu’ semplici. Stiamo parlando della funzione leggi.
function leggi($da, $quanti = NULL) {
global $BLOGFILE;
$risultato = array();
$contenuto = file($BLOGFILE); // leggo il contenuto
if (is_null($quanti))
$quanti = count($contenuto);
for ($i = $da; ($i – $da < $quanti) && ($i <= count($contenuto)); $i++) {
// estraggo un post dal file e lo aggiungo all’array $risultato
$post = explode(“#”, $contenuto[$i – 1]); //(* \label{line:PHP_leggi-explode} *)
$risultato[] = $post;
}
return $risultato;
}
è abbastanza auto esplicativa, l’unica nota che vi vogliamo fare tenere presente è la condizione sul ciclo for , che estrae i post specificati dal file. Si osservi che , oltre a verificare che l’indice $i non vada oltre gli $n post a partire dal valore della variabile $da, è necessario anche verificare che esso non vada oltre al numero totale di post contenuti nell’array (istruizione $i <= count($contenuto)
ci sarebbe anche da spiegare la funzione numeroPost ma insomma vi abbiamo detto funzione ma è una funzione per modo di dire dato che è
function numeroPost() {
global $BLOGFILE;
$blog = file($BLOGFILE);
// restituisco il numero di righe del file
return count($blog);
}
Lo Stile
E veniamo adesso ad occuparci dello stile ossia una mera opera di abbellimento del nostro blog. Insomma qualcosa di molto evitabile ossia se non lo facciamo funziona tutto perfettamente, ma se non lo facciamo dopo una prima visita nessuno ritornerà piu’ a visitarci, quindi nel dubbio, lo facciamo assolutamente.. Il Foglio di stile in genere sono in formato css, infatti sono appunto fogli di stile css, lo sono anche a questo giro che invece abbiamo utilizzato un file php, insomma abbiamo un po’ mascherato il tutto ma il risultato è sempre il solito e il gioco che abbiamo fatto è abbastanza evidente, nel dubbio cmq riconsultare nuovamente la nostra guida sui CSS.
<?php
header(“Content-type: text/css”);
include(“config.php”);
?>
body {
background-color: <?php echo $COLSFONDO; ?>;
color: <?php echo $COLTESTO; ?>;
}
#intestazione {
color: <?php echo $COLSFONDO; ?>;
background-color: <?php echo $COLINTESTAZIONE; ?>;
}
#menu {
color: <?php echo $SFONDO; ?>;
background-color: <?php echo $COLMENU; ?>;
float: left;
display: block;
width: 100%;
}
#menu a {
margin: 5px;
color: <?php echo $COLSFONDO; ?>;
font-weight: bold;
}
.post {
border: thin dashed <?php echo $COLMENU; ?>;
padding: 5px;
}
#blog {
width: 600px;
}
il Database
Quello che abbiamo visto fino ad adesso andava bene, anzi benissimo nel senso che funzionava alla perfezione senza pero’ l’ausilio di altri interventi, ma non era assolutamente la soluzione migliore.La soluzione migliore gioco di parole a parte è sicuramente quella che prevede l’utilizzo dei database e siccome stiamo utilizzando il php , il database da utilizzare in questione è sicuramente il mysql. Quindi creiamo nel nostro phpadmin il seguente codice sql
DROP TABLE IF EXISTS posts;
CREATE TABLE posts (
id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
data DATETIME NOT NULL,
titolo VARCHAR(255),
testo TEXT
);
DROP TABLE IF EXISTS utenti;
CREATE TABLE utenti (
utente VARCHAR(20),
password VARCHAR(32)
);
INSERT INTO utenti VALUES (‘CapitanBlogger’, md5(‘segreta’));
nella tabella post memorizzeremo i post che andranno ad essere pubblicati nel blog
nella tabella utenti tabella di supporto , utilizzata per contenere i dati di autenticazione dell’utente o di piu’ utenti.
a questo punto pero’ dobbiamo anche modificare alcune funzioni in pratica quella registra e leggi.. Iniziamo con la registra che cosi’ diventa
function registra($titolo, $testo) {
$conn = dbConnect();
$titolo = nl2br(htmlentities($titolo));
$testo = nl2br(htmlentities($testo));
$data = date(“Y-m-d H:i:s”);
$sql = “INSERT INTO posts(data, titolo, testo) VALUES(‘”
. $data . “‘, ‘” . $titolo . “‘, ‘” . $testo . “‘)”;
mysql_query($sql) or die(“Errore nella query: ”
. $sql . “\n” . mysql_error());
mysql_close($conn);
}
come potete vedere grazie al mysql è addirittura diventata piu’ semplice della funzione registra antecedente.
la funzione leggi invece diventa
function leggi($da, $quanti = NULL) {
$conn = dbConnect();
$risultato = array();
$sql = “SELECT * FROM posts WHERE id >= ” . $da;
if (!is_null($quanti))
$sql .= ” AND id <= ” . ($da + $quanti);
$sql .= ” ORDER BY data DESC”;
$risposta = mysql_query($sql) or die(“Errore nella query: ”
. $sql . “\n” . mysql_error());
while ($riga = mysql_fetch_row($risposta)) {
$risultato[] = $riga;
}
mysql_close($conn);
return $risultato;
}
e questa è la funzione leggi. mentre la funzione numero post deve essere sostituita con la seguente.
function numeroPost() {
$conn = dbConnect();
$sql = “SELECT MAX(id) as numero FROM posts”;
$risposta = mysql_query($sql) or die(“Errore nella query: ”
. $sql . “\n” . mysql_error());
$numero = mysql_fetch_row($risposta);
mysql_close($conn);
return $numero[0];
}
mentre la funzione di connessione diventa
function dbConnect() {
$conn = mysql_connect(“localhost”, “CapitanBlogger”, “mysql_segreta”)
or die(“Errore nella connessione al db: ” . mysql_error());
mysql_selectdb(“test”)
or die(“Errore nella selezione del db: ” . mysql_error());
return $conn;
}
alla quale ovviamente voi dovrete sostituire i vostri dati, questi sono solo di esempio
non commentiamo piu’ di tanto gli script che ci sembrano veramente molto auto esplicativi, in ogni caso per dubbi o incertezze potete rivolgervi al forum cliccando sull’apposita voce sulla destra, saremo lieti di venire incontro alle vostre esigenze.
La Conclusione
A questo punto non ci rimane che tirare un po’ le somme del nostro progetto, quindi abbiamo visto come attraverso un po’ di programmazione php e un file di testo oppure un database sia possibile costruire un blog che ovviamente non sarà quello dello wordpress ma sarà cmq un database funzionante e anche con una sua propria grafica. Il tutto insomma funzionale al progetto che avevamo prospettato. La logica o meglio il prospetto seguito è il seguente
Quindi una pagina indice che si scambia i dati con inserisci.php che cicla su stessa quando riceve un metodo post e aggiunge l’articolo ad un sistema di archiviazione che possa essere un file di testo oppure piu’ semplicemente un database. Abbiamo visto come sia inoltre possibile passare con delle semplici istruzioni da un file di testo ad un database mysql e ovviamente abbiamo mostrato qualche funzione mysql piu’ ricercata che ci ha permesso di semplificare le nostre operazione.
Per ogni buon conto potrete trovare il codice shareware qui. Il capitolo è il terzo e la cartella plwblog
E con questo concludiamo per chi avesse dubbi o chiarimenti si puo’ recare nel nostro forum e ampliare la discussione con noi, nel caso saremmo lieti di rispondere ai vostri eventuali dubbi o perplessità
Condividi:
Mi piace:
Correlati
Aggiornamento di WordPress in caso di error 500
Vi spieghiamo adesso una procedura che può sembrare banale , ma vi possiamo assicurare che non lo è , si tratta di come aggiornare il blog del CMS WordPress. Dalla. Leggi ancora…
Condividi:
Mi piace:
Continue Reading
Come incrementare i fans su Facebook e su Twitter
Vi parliamo adesso un po’ dei metodi per incrementare la vostra popolarità sui vari social come facebook e twitter, ossia come aumentare i fans o i followers che vi seguono.. Leggi ancora…
Condividi:
Mi piace:
Continue Reading
Mod gzip e dflate per velocizzare le prestazione del tuo sito o blog
La compressione è un modo semplice ed efficace per risparmiare larghezza di banda e la velocità del sito. Ho esitato nel raccomandare la compressione gzip quando accelerare il javascript a. Leggi ancora…
Condividi:
Mi piace:
Continue Reading
Web Cron soluzione per mysql e blogger
Il Web Cron è una delle ultimissime funzioni del Web che al momento sta andando per la maggiore, ossia con questa operazione è possibile effettuare a determinati intervalli di tempo. Leggi ancora…
Condividi:
Mi piace:
Continue Reading