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.