Repository 32bit  Forum
Repository 64bit  Wiki

PHP Tutorial - Un Semplice Sito

Da Slacky.eu.

Questo mini-tutorial nasce con l'intento di dare l'input a chi si voglia avventurare nel web-building dinamico con PHP. Per questo motivo, è strutturato in modo da essere il più semplice possibile e immediatamente comprensibile anche da chi non ha molta dimestichezza con lo scripting lato-server.

E' organizzato in forma modulare, per cui cominceremo con l'essenziale, per poi aggiungere, di volta in volta, nuove sezioni.

Si presuppone che abbiate a disposizione un web-server con il supporto a php perfettamente installato e configurato...

Si presuppone, inoltre, che abbiate almeno una generica infarinatura di programmazione. Se, ad esempio, ci troviamo di fronte ad un array, dovreste almeno sapere di cosa stiamo parlando...

E' richiesta, infine, una minima conoscenza di (X)HTML. Nel caso, può essere utile questo tutorial: XHTML_1.1 CSS e Accessibilità da zero.

Indice

Iniziamo

Costruiremo, per iniziare, un semplicissimo sito con una index e varie sezioni interne, richiamabili per mezzo dell'inclusione, organizzata in un menu.

Abbiamo, innanzitutto, bisogno di uno strumento adatto: io vi consiglio un editor testuale, preferibilmente semplicissimo. Successivamente, possiamo pensare di passare ad un ambiente di sviluppo meglio organizzato...

Primo passo obbligato è quello di creare una pagina html:

 
<html>
<head>
 <title>Tutorial php</title>
</head>
<body>
<h1>Tutorial PHP</h1>
<hr />
</body>
</html>

Salviamo la pagina in una cartella posta nella root del web-server (denominata, ad esempio, tutorial) con nome index.php (anche se, per ora, di php non c'è nulla...).

Posizioniamoci ora nel body della pagina, al di sotto della riga dell'intestazione e inseriamo:

 ...
<h1>Tutorial PHP</h1>
<hr />
<?php

?>
 ...

Abbiamo inserito i tag che dichiarano che stiamo usando lo scripting lato server in PHP. Si potrebbe marcare diversamente, ma la cosa è ininfluente ai nostri fini. Inoltre, è consigliabile usare sempre questo tipo di marcatura.

Costruiamo un menu

Posizioniamoci all'interno dei tag php e scriviamo:

<?php
if(isset($_GET["pagina"]) $pagina=$_GET["pagina"];
else $pagina="home";
?>

Che tradotto significa: se è indicata una $_GET["pagina"] assegniamo alla variabile $pagina il valore di $_GET["pagina"]; altrimenti le assegniamo il valore "home". $_GET["pagina"] è una variabile passata attraverso una query-string alla pagina. Per fare un esempio, prendiamo questa url:

http://www.slacky.eu/index.php?option=com_content...

In questo caso, alla variabile option è stato passato il valore com_content. Quindi per conoscerne il valore, noi dobbiamo riferirci a $_GET["option"].

La condizione if-else scritta sopra si può rendere in forma più breve:

<?php
isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
?>

Il significato è identico ma è esposta in modo più elegante.

Continuiamo..

<?php
isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
$vocimenu=array("home","bazzecole","quisquilie","pinzillacchere");
foreach($vocimenu as $voce) {
// fermiamoci un attimo
}
?>

Le definzioni di array si sprecano in rete. Noi, semplicemente, consideriamole un insieme di variabili che stanno nello stesso contenitore. Con la funzione foreach, sfogliamo queste variabili come se fossero pagine di un libro e per ognuna di esse facciamo una determinata operazione...

Prima di continuare con il php, inseriamo, subito prima dello script, il tag ul (unordered list) e chiudiamolo subito dopo lo script.

Poi continuiamo con il php, inserendo ciò che deve succedere per ogni voce dell'array...

<ul>
<?php
isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
$vocimenu=array("home","bazzecole","quisquilie","pinzillacchere");
foreach($vocimenu as $voce) {
  echo "
  <li>";
  if($pagina!=$voce) echo '<a href="index.php?pagina='.$voce.'">';
  echo $voce;
  if($pagina!=$voce) echo "</a>";
  echo "</li>";
}
echo "\n";
?>
</ul>

Praticamente, abbiamo:

  • definito una serie di pagine in un array (per aggiungere nuove pagine, basterà, quindi, aggiungere nuovi voci nell'array);
  • per ogni voce dell'array (per ogni pagina, quindi) abbiamo stabilito che si deve visualizzare un punto della lista e, se la pagina corrente nell'array è diversa da quella richiamata dalla query-string ($_GET["pagina"]) o impostata di default (nel caso home), viene visualizzato il tag <a> che ha l'effetto di linkare la voce del menu, secondo l'url che abbiamo fornito con href; altrimenti, se c'è corrispondenza tra le pagine, viene semplicemente visualizzata la voce del menu (non linkata). Sembra complicato, ma nella pratica è molto più semplice che non spiegarlo a parole.

Quando con echo bisogna far visualizzare una stringa contenente degli apici ("), bisogna racchiuderla in apici semplici ('); in questi casi, le variabili devono essere poste al di fuori della stringa, usando il carattere di concatenamento .. Altrimenti, avremmo potuto usare la forma

echo "<a href=\"index.php?pagina=$voce\">";

oppure ancora

echo <<<EOT
<a href="index.php?pagina=$voce">
EOT;

Ma quest'ultima forma è preferibile per porzioni di testo più estese.

Abbiamo finito il nostro semplice menu; salviamo la pagina, che ora è così complessivamente formata:

<html>
<head>
  <title>Tutorial php</title>
</head>
<body>
<h1>Tutorial PHP</h1>
<hr />
<ul><?php
isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
$vocimenu=array("home","bazzecole","quisquilie","pinzillacchere");
foreach($vocimenu as $voce) {
  echo "
  <li>";
  if($pagina!=$voce) echo '<a href="index.php?pagina='.$voce.'">';
  echo $voce;
  if($pagina!=$voce) echo "</a>";
  echo "</li>";
}
echo "\n";
?>
</ul>
</body>
</html>

Quell'echo "\n" serve per andare a capo e visualizzare correttamente il sorgente della pagina. Per lo scopo inverso, ma con identità finalità, abbiamo spostato il tag di apertura <?php sulla stessa linea di ul.

Inclusione di file

Ora passiamo alla stesura delle nostre pagine interne.

Sfrutteremo una delle potenti feature di PHP (e dei linguaggi lato-server in genere): l'inclusione.

Al di sotto del menu della nostra index (quindi dopo </ul>) inseriamo queste righe:

<hr />
<h2><?php echo $pagina ?></h2>

Se non ci sta bene che il nome della pagina compaia in minuscolo sostituiamo con:

<h2><?php print(ucfirst($pagina)) ?></h2>

Poi, creiamo una nuova pagina con questo contenuto:

<p style="background:#eee">
  Lorem ipsum dolor sit amet, consectetaur adipisicing elit, sed do eiusmod tempor
  incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud 
  exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute 
  irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla 
  pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui 
  officia deserunt mollit anim id est laborum.
</p>

Salviamola con il nome home.php.

Ricordiamoci sempre di terminare le pagine incluse con un'andata a capo: è un accorgimento opportuno per una buona visualizzazione del sorgente delle pagine.

Modifichiamo solo lo sfondo del paragrafo (prima con #ffa, poi con #aff e infine con #aaf, per esempio) e salviamo, rispettivamente con bazzecole.php, quisquilie.php e pinzillacchere.php. Abbiamo differenziato lo sfondo per notare subito la differenza tra le pagine.

L'estensione .php non è obbligatoria. Avremmo potuto usare .html, o .inc... L'importante è poi richiamare le pagine con l'estensione giusta...

Nella nostra cartella tutorial, dobbiamo, a questo punto, avere cinque file: index.php, home.php, bazzecole.php, quisquilie.php e pinzillacchere.php.

Ora, tornando alla index, al di sotto del titolo della pagina che abbiamo appena creato inseriamo:

<?php include("$pagina.php") ?>

Il codice complessivo della index, ora è questo:

<html>
<head>
  <title>Tutorial php</title>
</head>
<body>
<h1>Tutorial PHP</h1>
<hr />
<ul><?php
isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
$vocimenu=array("home","bazzecole","quisquilie","pinzillacchere");
foreach($vocimenu as $voce) {
  echo "
  <li>";
  if($pagina!=$voce) echo '<a href="index.php?pagina='.$voce.'">';
  echo $voce;
  if($pagina!=$voce) echo "</a>";
  echo "</li>";
}
echo "\n";
?>
</ul>
<hr />
<h2><?php echo ucfirst($pagina) ?></h2>
<?php include("$pagina.php") ?>
</body>
</html>

Possiamo procedere alle nostre prime prove...

Se il nostro web-server gira in locale, apriamo il nostro browser preferito all'indirizzo localhost/tutorial; se, invece, la cartella sta di un server remoto, sostituiamo localhost con l'indirizzo del server.

Proviamo a navigare tra le diverse voci del menu. Forte, no?

Ulteriore inclusione

E se noi volessimo richiamare un'ulteriore inclusione da una delle pagine (per esempio)?

Poniamo che la home abbia due sezioni: principale e secondaria.

Creiamo una nuova pagina interna con nome principale.php, con questo contenuto:

<p style="background:#008;color:#fff;">
  Lorem ipsum dolor sit amet, consectetaur adipisicing elit, sed do eiusmod tempor
  incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud 
  exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</p>
<p><a href="index.php?page=home&amp;sezione=secondaria">Vai alla sezione secondaria</a></p>

E ora creiamone un'altra con nome secondaria.php e questo contenuto:

<p style="background:#800;color:#fff;">
  Lorem ipsum dolor sit amet, consectetaur adipisicing elit, sed do eiusmod tempor
  incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud 
  exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</p>
<p><a href="index.php?page=home&amp;sezione=principale">Vai alla sezione principale</a></p>

Ora apriamo home.php e, alla fine, inseriamo questo codice:

<?php
isset($_GET["sezione"]) ? $sezione=$_GET["sezione"] : $sezione="principale";
echo "
<h3>Sezione $sezione </h3>\n";
include("$sezione.php");
?>

Da notare come nella query-string index.php?page=home&amp;sezione=principale, la prima variabile viene assegnata dopo il ?, le altre dopo &amp;. Sarebbe bastato scrivere &, ma vremmo potuto avere qualche problema di validazione della pagina...

Proviamo di nuovo il tutto...

Bene.

Data e ora

Aggiungiamo data e ora alla nostra index. Subito dopo l'intestazione h1, inseriamo questo codice:

<?php
$giorni=array("Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato");
$giorno=$giorni[date("w")];
$data=date("d/m/Y");
$ora=date("H:i");
echo "<p><em>$giorno $data - ore $ora</em></p>\n";
?>

Il codice è abbastanza chiaro. Si rimanda alla funzione date del manuale PHP per le molteplici potenzialità della stessa.

Se l'orologio del nostro server è settato correttamente, ad ogni collegamento visualizzeremo data e ora precise.


ToDo

Finora abbiamo visto solo una minima parte degli immensi orizzonti che il php ci apre. Cionostante, abbiamo realizzato un piccolo sito dinamico abbastanza funzionale.

Sono molti i campi che ancora dobbiamo toccare.

Una delle interazioni più efficaci ed affascinanti del PHP è quella con i database, in particolare con il DBMS opensource MySQL. Vedremo come sfruttare le capacità dinamiche di questa meravigliosa accoppiata...

Vedremo, poi, come gli stessi risultati possano esere ottenuti con modalità alternative e come sia produttivo realizzare le nostre funzioni o, meglio, le nostre classi. Ci addentreremo, pertanto, nella OOP (object-oriented programming).

Tutto con estrema semplicità...

Collegamenti esterni

Strumenti personali
Namespace

Varianti