Lezioni di PHP - Lezione 1 - Lavorare con i moduli (form).
Nella vita reale riceviamo informazioni tramite televisione, radio, Internet o conversazioni dirette. Anche i siti web ricevono informazioni dagli utenti, ma lo fanno in un formato speciale: attraverso i moduli (form). I moduli possono essere paragonati ai questionari o ai moduli di richiesta che si compilano in un ufficio pubblico. Anche se il set di elementi disponibili nei form HTML è limitato, essi permettono comunque di ottenere dagli utenti tutte le informazioni necessarie per il funzionamento del sito.
Per comprendere meglio questa lezione, è consigliabile leggere prima le lezioni HTML sulla creazione dei form.
Prima di iniziare la prima lezione, creiamo la struttura base della nostra applicazione: una classe che gestirà il funzionamento del sito.
Creiamo una cartella class e al suo interno un file simpleCMS.php che conterrà la classe di gestione del sito. Creiamo poi un file index.php che sarà il punto di ingresso dell’applicazione, una cartella vuota messages per i nostri messaggi e infine un file di stile style.css. La struttura sarà quindi la seguente:
class/simpleCMS.php
messages/
index.php
style.css
Contenuto del file simpleCMS.php:
<?php class simpleCMS { // classe di gestione public function display_public() { // metodo per visualizzare i messaggi } public function display_admin() { // metodo per inserire un messaggio } public function write($p) { // metodo per salvare un messaggio } } ?>
Per ora lasciamo i metodi vuoti, li completeremo più tardi.
Contenuto del file style.css:
*{ margin: 0; padding: 0; } body{ font: 12px "Lucida Grande", Sans-Serif; background: #ccc; } #page-wrap{ width: 500px; margin: 50px auto; padding: 20px; background: white; } h1, h2, h3{ font: 28px Georgia, Serif; border-bottom: 1px dotted #ccc; margin: 0 0 10px 0; } .clear{ clear: both; } input[type="text"], textarea{ padding: 3px; border: 1px solid #666; width: 350px; margin: 0 0 15px 0; } input[type="text"]{ font: 28px Georgia, Serif; } textarea { height: 100px; font: 12px "Lucida Grande", Sans-Serif; } label { background: #666; color: white; padding: 2px 6px; } .post{ margin: 0 0 20px 0; }
Contenuto del file index.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Impariamo PHP</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <div id="page-wrap"> <?php include_once('class/simpleCMS.php'); // includiamo il file con la classe $obj = new simpleCMS(); // creiamo un oggetto della classe di gestione ?> </div> </body> </html>
Vediamo come funziona. Quando il sito viene caricato, si apre il file index.php. Attualmente appare vuoto, ma abbiamo già collegato la classe e creato il suo oggetto. Quest’oggetto contiene metodi che richiameremo nei momenti opportuni, determinati tramite l’uso di condizioni if.
Ora mettiamo da parte i file creati e analizziamo le variabili globali $_GET e $_POST.
Variabile globale $_GET
I form HTML hanno un attributo method (method="get"
o method="post"
). In base a questo, i dati vengono salvati nella variabile globale $_GET o $_POST. Ecco un esempio:
<form action="welcome.php" method="get"> Nome: <input type="text" name="fname" /> Età: <input type="text" name="age" /> <input type="submit" /> </form>
Quando si preme il pulsante submit, il browser ci porta alla pagina:
http://sitename/welcome.php?fname=Peter&age=37
Così viene formata la variabile $_GET: dopo il punto interrogativo compaiono i valori della variabile.
<?php print $_GET['fname']; print $_GET['age']; ?>
$_GET è quindi un array che contiene i valori passati tramite l’URL. In questo modo possiamo passare dati da una pagina all’altra anche senza usare moduli, ad esempio se apriamo:
http://sitename/example.php?number=45
ed eseguiamo questo script:
<?php print $_GET['number']; ?>
verrà stampato il numero presente nell’URL.
Variabile globale $_POST
La variabile $_POST funziona in modo simile a $_GET. Vediamo un esempio:
<form action="welcome.php" method="post"> Nome: <input type="text" name="fname" /> Età: <input type="text" name="age" /> <input type="submit" /> </form>
Premendo il pulsante submit, si va alla pagina:
http://sitename/welcome.php
E possiamo accedere ai valori tramite:
<?php print $_POST['fname']; print $_POST['age']; ?>
La differenza principale è che le variabili $_POST non appaiono nell’URL, quindi non sono visibili e possono essere lette solo tramite PHP.
Ora creiamo un modulo per aggiungere messaggi. Useremo POST per inviare i dati, ma controlleremo il sito tramite GET:
public function display_admin() { // metodo per inserire un messaggio $content = ''; $content .= '<form action="' . $_SERVER['PHP_SELF'] . '" method="post">'; // $_SERVER['PHP_SELF'] restituisce il nome del file corrente $content .= '<label for="title">Nome:</label><br />'; $content .= '<input name="title" id="title" type="text" maxlength="150" />'; $content .= '<div class="clear"></div>'; $content .= '<label for="bodytext">Messaggio:</label><br />'; $content .= '<textarea name="bodytext" id="bodytext"></textarea>'; $content .= '<div class="clear"></div>'; $content .= '<input type="submit" value="Aggiungi messaggio" />'; $content .= '</form>'; $content .= '<p><a href="/index.php">Torna alla home</a></p>'; return $content; }
Sostituisci il metodo display_admin() con questo codice. Questo modulo verrà mostrato quando vogliamo aggiungere un nuovo messaggio. Per impostazione predefinita, invece, verranno mostrati i messaggi esistenti. Decidiamo che il modulo verrà visualizzato quando nell’URL sarà presente la variabile admin=1, ad esempio:
http://test/index.php?admin=1
Modifichiamo quindi il file index.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Impariamo PHP</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <div id="page-wrap"> <?php include_once('class/simpleCMS.php'); // includiamo il file con la classe $obj = new simpleCMS(); // creiamo un oggetto della classe di gestione if( $_GET['admin'] == 1 ){ // se nell'URL c'è la variabile admin print $obj->display_admin(); // mostra il modulo }else{ print $obj->display_public(); // altrimenti mostra i messaggi } ?> </div> </body> </html>
Ora modifichiamo il metodo per la visualizzazione dei messaggi nella pagina senza parametri:
public function display_public() { // metodo per visualizzare i messaggi $content = ''; $content .= '<p><a href="/index.php?admin=1">Aggiungi messaggio</a></p>'; return $content; }
Aggiungiamo un link con parametro per poter aprire la pagina del modulo.
Se la tua pagina mostra caratteri strani (simboli illeggibili), crea un file .htaccess e aggiungi questa riga:
AddDefaultCharset utf-8
Questo forzerà il server a lavorare con UTF-8.
Ora abbiamo un modulo funzionante che invia i dati a un’altra pagina. Puoi testarne il funzionamento cambiando il metodo del form in get:
$content .= '<form action="' . $_SERVER['PHP_SELF'] . '" method="get">';
Ora i parametri verranno passati alla pagina index.php tramite l’URL. L’elaborazione di questi dati la vedremo nella prossima lezione, quando impareremo a lavorare con i file e a salvare i dati al loro interno.