Impariamo a programmare con php

di G. Falco (2011)
Ciao Mondo Parametri Form di invio Programma php Controllo dell'input con Javascript Connessione a database in SQLite

Ciao Mondo

Uno script php è un programma che viene incorporato in una pagina html.
A differenza però di uno script "LATO CLIENT" come quelli realizzati con 'javascript' l' esecuzione del programma avviene sul server dove la pagina è stata pubblicata.
Ciò significa che il server prima di consegnare la pagina, sostituirà la parte di codice contenente lo script con il risultato della sua esecuzione.

Vediamo come funziona mediante un semplice esempio: partiamo da una pagina web, contenente il seguente codice html

            <html>
            <body>
            
Ciao Mondo
</body> </html>
Niente di speciale. Trasformiamo ora la pagina da statica in dinamica, sostituendo la scritta con una istruzione che produce lo stesso risultato.
Premi qui per inserire uno script php nell'esempio precedente.

Non molto utile come cambiamento, il risultato sarà esattamente lo stesso, la funzione echo scrive sullo schermo il contenuto della stringa di caratteri che le forniremo.

La portata di questo cambiamento è nonostante l'apparenza tutt'altro che banale, come ogni linguaggio di programmazione che si rispetti php può utilizzare un insieme molto vasto di funzioni, strutture di controllo e variabili. Possiamo anche ricevere dei dati dall'esterno sotto forma di parametri.

Parametri

Un parametro è un nome simbolico a cui associamo un valore, e può essere fornito al programma php in due modi: scrivendolo direttamente nell'URL che richiama la pagina web (metodo GET) oppure inviandolo mediante una form in modo più nascosto (metodo POST)

Vediamo un esempio: modifichiamo in questo modo il codice precedente: clicca qui
Dopo aver caricato il nostro file su un server web (supponiamo nella directory predefinita) che avremo salvato ad esempio con il nome ciao.php, richiameremo la pagina con un url del tipo:

http://www.miodominio.it/ciao.php?nome= che rappresenta un indirizzo di una risorsa web da inserire nella casellina del browser.
Il nome del parametro compare separato del resto dell'indirizzo web dal carattere ?. Dopo il carattere = sceglieremo un valore da attribuire al parametro. Prova a completare inserendo un valore per vedere cosa succede.

Naturalmente il programma potrebbe essere piu' complesso dell'esempio banale mostrato e coinvolgere diverse elaborazioni dei dati di ingresso. I parametri possono essere infatti piu' di uno
Dovranno essere in quel caso separati dal carattere & come ad esempio: http://www.miodominio.it/ciao.php?nome=mario&cognome=rossi

Quando i parametri sono numerosi, questo metodo puà diventare scomodo, e pericoloso per la sicurezza informatica. Si ricorre in questo caso al metodo POST usato generalmente con le FORM, in cui ogni controllo diventa automaticamente un parametro che sarà reso disponibile al programma nel momento in cui l'utente premerà il pulsante SUBMIT

Utilizzo delle FORM per l'invio di dati

da completare
Supponiamo di voler raccogliere tramite una pagina web le adesioni ad una cena scolastica e allo scopo chiediamo agli interessati di compilare una FORM, indicando il loro nome e cognome, l'indirizzo di email e di indicare il giorno preferito della settimana.

Predisporremo quindi una pagina scritta in HTML e pubblicata sul server web simile a questa:
(
clicca per veder il sorgente)

Adesione Cena Studentesca

Nome: Cognome:

Email: giorno preferito:

        
<FORM>
Nome: <input type=text name=nome> Cognome: <input type=text name=cognome>

Email: <input type=text name=email> giorno preferito: <select name=giorno> <option>lunedi <option>martedi <option>mercoledi <option>giovedi <option>venerdi <option>sabato <option>domenica </select><p> <center> <input type=submit value="Invia"> <input type=reset value="Cancella"></center> </FORM>

Clicca per vedere la FORM
Per ricevere le informazioni nserite nelal form occorre predisporre un programma php
e aggiungere gli attributi che lo identificano oltre a specificare il metodo di passaggio
dei parametri (POST) mostra

Il contenuto del file di testo


Programma 'cena.php' che riceve ed elabora i dati della FORM

L'attributo ACTION inserito nella Form appena mostrata specifica il percorso web (URL) del programma che riceverà i dati e procederà alla loro elaborazione.
Utilizzeremo come linguaggio per realizzare il programma cena, il php ossia predisporremo all'interno della pagina che mostrerà il risultato dell'elaborazione le istruzioni opportune per salvare i dati inviati.
Il documento potrà essere salvato nella stessa cartella contente la form oppure altrove. La cosa fondamentale però è che risieda su un server web poichè dovrà essere elaborata sul server prima dell'invio.

<html> <body>
<?php
$name = "$_POST[nome];
$surname = $_POST[cognome];
$email = $_POST[email];
$day = $POST_[giorno]"
$linea = "$name;$surname;$email;$day\n";
$file=fopen("dati.txt","a") or exit("Unable to open file!");
fwrite($file,$linea);
fclose($file);
echo "<p>REGISTRAZIONE EFFETTUATA. Grazie. ";
?>
</body></html>

Iniziamo con scrivere il messaggio finale che si dovrà visuializzare al termine dell'elaborazione. Predisponiamo lo spazio dove inserire lo script e salviamo il tutto con il nome cena.php. Mostra sorgente

Vogliamo salvare i dati inviati in un file di testo, nel quale ciascuna linea rappresenta i diversi valori separati dal carattere ';'
Vediamo come accedere ai parametri inviati dalla form (di cui conosciamo il nome: sono i valori associati all'atttributo name dei controlli) in modo da poterne disporre nel seguito: Abbiamo scelto il metodo POST per inviare i dati, usiamo quindi l'espressione $_POST[nome_parametro]:
  1. Assegnamo a dalle variabili i valori dei parametri click
  2. Assegnamo ad una variabile una linea di testo con i valori inviati dalla form separati dal carattere ';' Notate il carattere di a capo alla fine della linea (\n) click
  3. Apriamo il file in modalità accodamento click
  4. Scriviamo la linea di testo nel file click
  5. Chiudiamo il file click

Leggere il contenuto di un file e visualizzarlo come pagina Web

Una volta memorizzati le singole operazioni di registrazione nel file di testo, avremo su ogni riga separati dal carattere ';' i valori di ciascuna operazione.
Possiamo creare una pagina php in grado di leggere queste informazioni e visualizzarle in una forma leggibile come pagina html
Lo scheletro del programma php sarà per molti versi simile al precedente ma con importanti differenze. vediamo la parte comune:

<html>
<body>
<h2>Lezioni PHP - Elenco Iscritti</h2>
<table border=1>
<th>Nome<th>Cognome<th>email<th>giorno
<?php
    $file=fopen("dati.txt","r") or exit("Unable to open file!");
while(!feof($file)) { $riga = explode(";",fgets($file)); echo "<tr><td>$riga[0]<td>$riga[1]<td>$riga[2]<td>$riga[3]"; }
fclose($file); ?> </table> </body> </html>
Abbiamo aperto il file in modalità lettura e inserito lo script all'interno di una tag table in modo da incolonnare i dati che desideriamo visualizzare all'interno delle celle della tabella.
Poichè le righe contenute nel file sono in numero imprecisato, corrispondente al numero di invii effettuati attraverso la form, dovremo ricorrere ad un ciclo di ripetizione while per leggere ciascuna riga del file. click

La funzione explode ci consente di separare di diversi componenti della stringa letta dal file, utilizzando il carattere speratore ";"r per distinguere i diversi elementi. La funzione fgets legge la riga successiva del file, per testare se il file è vuoto o abbiamo letto tutte le righe si può richiamare la funzione feof (file end of file). Una volta memorizzato il risultato in una variabile possiamo accedere ai diversi elementi dell'array specificando la posizione a partire da 0.

Controllo dell'input con Javascript

L'appplicazione appena descritta, consente dunque all'utente che accede al formulario, di compilare i campi a sua disposizione: caselle di testo o menu a tendina, e inviare mediante il pulsante sumbit i dati così introdotti al programma su server, incaricato del salvataggio nel file dati.
Nulla però ci assicura che le caselle di testo che riteniamo importanti, come ad esempio il Nome e Cognome, vengano effettivamente compilati dall'utente.
Nel caso le lasciasse vuote, il programma riceverebbe semplicmente una stringa nulla, e in assenza di ulteriori controlli, questi dati sarebbero utilizzati per la scrittura su file. Ci ritroveremmo così nel file possibili righe poco significative, mancando i dati che riteniamo essenziali.
Potremmo modificare il programma php di salvataggio in modo da segnalare all'utente, la mancanza di dati per noi essenziali, invitandolo a ricompilare la scheda correttamente e reinviare il tutto.

Questa operazione comporta però trasmissioni di dati e impegno del programma ricevente, magari da parte di più utenti contemporaneamente. Sarebbe più efficiente quindi effettuare questo controllo a monte, ossia direttamente del file con la FORM, e non inviare alcun dato al server fino a che la scheda non risulti compilata correttamente.

Utilizzeremo quindi questo approccio, inserendo nel file HTML uno script (ossia un programma incorporato) adibito a questo scopo. Il linguaggio ormai diventato uno standard di fatto per la programamzione su web lato client è il Javascript.
Programma 'lato client' significa che il codice incorporato nell'HTML a differenza dell'esempio php visto in questa lezione, non verrà eseguito sul server che ospita la pagina, ma trasmesso così come è scritto insieme al codice HTML al browser. Sarà quest'ultimo che esseguirà il codice al momento opportuno, direttamente sul computer dell'utente, senza quindi impegnare la rete.
Ormai tutti i browser moderni sono in grado di eseguire codice javascript incorporato nell'HTML per eseguire svariate operazioni, di calcolo o di modifica di quanto mostrato su schermo.
L'unico limite invalicabile, è che i programmi javascript non possono alterare in modo permanente nessun dato sul disco del computer locale o remoto.
I cambiamenti possono operare solo su quanto mostrato a schermo, se si ricarica la pagina, tutto ritornerà come prima. Il codice HTMl sorgente della pagina e qualunque dato su disco sono immodificabili da javascript.
Permetterlo sarebbe una grave compromissione della sicurezza dei dati sul web.

Rivediamo il codice della Form e vediamo come poterlo modificare

        
<FORM METHOD=POST ACTION=mapelli.selfip.org/web/lezioni-php/cena.php>
Nome: <input type=text name=nome> Cognome: <input type=text name=cognome>

Email: <input type=text name=email> giorno preferito: <select name=giorno> <option>lunedi <option>martedi <option>mercoledi <option>giovedi <option>venerdi <option>sabato r <option>domenica </select><p> <center> <input type=submit value="Invia"> <input type=reset value="Cancella"></center> </FORM>

Modifichiamo questo codice, sostituendo il pulsante submit che causa l'invio immediato al programma di ricezione, con qualcosa che intercetti questa operazione, allo scopo di effettuare il controllo dell'input.

Connessione a database SQLite

Connettersi e gestire un database, richiede istruzioni simili a quelle utilizzate per i file di testo, a differenza di queste però, non si tratta di istruzioni standard del php, ma l'esatta sintassi dipende dal particolare DBMS utilizzato.

In ogni caso, occorre effettuare le seguenti operazioni logiche:

  • Connettersi al database, fornendo eventuali credenziali per l'accesso
  • Formulare una richiesta in SQL il linguaggio standard per la manipolazione di database relazionali
  • Inviare la richiesta al DBMS
  • Gestire una eventuale risposta
  • Chiudere la connessione
Esempio: connettiamoci al database rubrica.db, che contiene una tabella Studenti, con i campi: id,Nome,Email.
Connessione

SORGENTE:

Database utilizzato: Rubrica.db

  <html>
   <head>

   <body>
     <h2>Connessione a un database SQLite
     <?php
          $conn = new PDO("sqlite:rubrica.db") or die("accesso al database negato");

          $query = "SELECT * from Studenti";

          $res   = $conn->query($query);

          while($row = $res->fetch(PDO::FETCH_ASSOC)) { 

             echo "$row[id] $row[Nome] $row[Email] <p>";

          }
          $conn = NULL;
     ?>

   </body>
</html>
Nella prima istruzione del codice php, si crea una connessione (SQlite non richiede autenticazioni) basta fornire il percorso del file.

Assegnamo poi ad una variabile, il testo dell'interrogazione SQL

Usando l'oggetto restituito dalla precedente conenssione, inviamo la richiesta al DBMS

In un ciclo di ripetizione, accediamo alle singole righe della tabella restituita, dall'essecuzione della query, tramite la funzione fetch()

Il parametro che può essere la costante FETCH_ASSOC oppure FETCH_NUM indica se vogliamo poi accedere ai singoli campi per nome o per posizione (a partire dalla posizione 0)

Nella variabile $row (array associativo, abbiamo scelto di accedere per nome) possiamo estrarre i valori dei singoli campi.