Programmare in PHP: Lezione 4
Lezione PHP, Programmazione — il aprile 15, 2008 alle 14:29 | Scarica l'articolo in formato PDFTweet
Rieccoci qui, dopo qualche settimana saltata, con le lezioni sulla programmazione PHP.
In questa lezioni vi voglio mostrare come sia semplice poter realizzare un Guestbook senza database.
In questo script utilizzaremmo come archivio per i commenti un file testuale, che verrà scritto da un form compilato dall’utente.
Vi mostrerò quindi la funzione include(“file”); e ripasseremo la lettura e scrittura dei file attraverso gli script.
Come prima cosa dobbiamo realizzare una pagina dove verranno mostrati i commenti del guestbook e dove sarà possibile inserirne di nuovi, quindi semplicemente realizziamo:
<form method="post" action="guestbook.php">
<div align="center">Tuo nome<br>
<input type="text" name="nome">
<br>
Messaggio<br>
<textarea name="messaggio" rows="5" cols="30"></textarea>
<br>
<br>
<input type="submit" value="Firma il guestbook">
</div>
</form>
<?php
include("guestbook.txt");
?>
Un semplice form per l’inserimento del nome e uno per il messaggio, dopodichè richiamiamo il file guestbook.txt, il quale stamperà a video il contenuto di tale file.
Premendo sul tasto “Firma Guestbook” richiameremo la pagina guestbook.php, contenente il seguente codice, il quale permetterà di salvare nel file tutti i dati necessari:
<?
$nome = $_POST["nome"];
$messaggio = $_POST["messaggio"];
$data = date("d/m/Y H:i:s");
$file = "guestbook.txt";
if ($nome == "")
{
echo "Inserisci il tuo nome";
}
elseif ($messaggio == "")
{
echo "Inserisci il messaggio";
}
else
{
$guestbook = fopen($file, "a");
$scrivi = "<b>" . $nome . "</b><br>\r";
$scrivi .= $messaggio . "<br>\r";
$scrivi .= "<i>Scritto in data " . $data . "</i><hr>\r";
fwrite($guestbook, $scrivi);
fclose($guestbook);
Header("Location: http://www.tuosito.it");
}
?>
Il codice è abbastanza semplice, ma andiamo ad analizzare:
Riceve i dati dal campo compilato dall’utente e controlla se ha inserito sia il nome che il messaggio, in caso contrario mosterà un messaggio d’allerta.
A questo punto se i campi sono compilati scrive sul file guestbook.txt i dati inseriti, formattandoli con il linguaggio HTML.
Una volta fatto tutto ciò rimanda l’utente ad una pagina scelta
Semplice, no?

Chi sono











Newsletter
10 commenti
Ciao luca,
stavo pensando e se volessi includere invece che guestbook.txt un .txt che un utente mi vuole specificare con una input box si puo’ fare?
Io farei così:
include($_GET['spec_file']);
tu che dici?
@Funny:
Bè se vuoi si, puoi far specificare all’utente in file nel quale salvare i dati, ma non capisco a quale scopo nei guestbook
Non per fare un guestbook ma.. magari qualcosa di diverso..
Ma posso fare come ho detto io o e’ errato?
@Funny:
Con quel comando riprendi il file
ottimo luca!!!!! come sempre XD !!!!!
Ah.. ok!
Quindi posso farlo tranquillamente senza problemi..
Funziona e non da problemi.
Peerfetto! Grazie.
@Funny:
Guarda ti do un consiglio: quando non sei sicuro di qualcosa testala, provala e riprovala, scoprirai tante cose
Ciao Luga…
ma il corso non continua?
in merito a questa lezione
<?
$nome = $_POST["nome"];
$messaggio = $_POST["messaggio"];
$data = date(“d/m/Y H:i:s”);
$file = “guestbook.txt”;
if ($nome == “”){echo “Inserisci il tuo nome”;}
elseif ($messaggio == “”)
{echo “Inserisci il messaggio”;}
else
{$guestbook = fopen($file, “a”);
$scrivi = “” . $nome . “\r”;
$scrivi .= $messaggio . “\r”;
$scrivi .= “Scritto in data ” . $data . “\r”;
fwrite($guestbook, $scrivi);
fclose($guestbook);
ECHO “MESSAGGIO RICEVUTO CORRETTAMENTE”;
header(“Location: http://www.miosito.altervista.org“);
in coda al form ho inserito
Attenzione che il guestbook pubblicato in questo articolo è vulnerabile ad attacchi XSS molto ma molto pericolosi. E’ consigliabile usare sempre la funzione htmlentities o strip_tags per rimuovere il possibile “codice malevolo” quando si parla di mostrare su schermo dati forniti in input dagli utenti.
Inoltre sconsiglio assolutamente di utilizzare un comando del tipo
include($_GET['file']);
Che comporta cose ancora più gravi, come LFI e probabilmente anche RFI (local e remote file inclusion)