Questa mattina ho realizzato un piccolo guestbook ( libro ospiti ) semplicissimo, infatti non permette l'inserimento dei bb-code, che ovviamente potrete aggiungere voi, e con poco stile, insomma, il minimo che serve per farlo funzionare.
Iniziamo con creare la index, con estensione php (
index.php ):
CODICE
<html>
<head>
<title>Guestboox | Developed by Sevenjeak</title>
</head>
<body style="margin:0; background:#d3d3d3;">
<div style="padding:6px; background:#6494ed; border-bottom:solid #808080 2px;">
<h1 style="margin:0; padding:0">Guestbook</h1><font style="padding-left:50px; color:#696969">Developed by Sevenjeak</font>
</div>
<div style="padding:10px">
echo "<a href=\"new_message.php\">Lascia un messaggio</a>";
include("view_message.php");
?>
</div>
</body>
</html>
Come di certo avrete visto la nostra index, sotto al div, che utilizzo come intestazione, troverete un link che porterà alla pagina contenente il form per inserire il messaggio nella guestbook, mentre sotto, ho incluso, lo script che visualizza tutti i messaggi presenti nella nostra guestbook.
Questo primo codice credo che non necessità di alcun altro commento.
Bene ora passiamo alla pagina contenente il form per inviare un nuovo commento, ovvero la pagina
new_message.php, contenente questo codice:
CODICE
<html>
<head>
<title>Guestboox | Developed by Sevenjeak</title>
</head>
<body style="margin:0; background:#d3d3d3;">
<div style="padding:6px; background:#6494ed; border-bottom:solid #808080 2px;">
<h1 style="margin:0; padding:0">Guestbook</h1><font style="padding-left:50px; color:#696969">Developed by Sevenjeak</font>
</div>
<?php
if (isset($_GET["send"])) {
$nome = htmlentities($_POST["nome"]);
$messaggio = htmlentities($_POST["message"]);
if ($nome == "" or $messaggio == "") {
echo "<script type=\"text/javascript\">alert('Alcuni campi risultano vuoti')</script>";
}else {
$dom = new DOMDocument("1.0", "ISO-8859-1");
$dom->load("message.xml");
$root = $dom->documentElement;
$elements = $root->getElementsByTagName("msg");
// Creazione nodo msg
$msg = $dom->createElement("msg");
$msg->setAttribute("id", time());
$root->appendChild($msg);
// Creazione nodo autore
$autore = $dom->createElement("autore");
$msg->appendChild($autore);
// Aggiunta testo nodo autore
$text_autore = $dom->createTextNode($nome);
$autore->appendChild($text_autore);
// Creazione nodo testo
$testo = $dom->createElement("testo");
$msg->appendChild($testo);
// Creazione testo nodo testo
$text_testo = $dom->createTextNode($messaggio);
$testo->appendChild($text_testo);
// Controllo se il file viene salvato correttamente
if ($dom->save("message.xml")) {
header("Location: index.php");
echo "<script type=\"text/javascript\">alert('Messaggio inviato correttamente')</script>";
}else {
header("Location: new_message.php");
echo "<script type=\"text/javascript\">alert('Impossibile inviare il messaggio')</script>";
}
}
}
?>
<form action="?send" method="post" style="padding:20px;">
<div><strong>Nome</strong><br /><input type="text" name="nome" style="padding:6px; color:gray;" /></div>
<div><strong>Messaggio</strong><br /><textarea name="message" style="padding:6px; color:gray;" cols="30" rows="10"></textarea></div>
<div><input type="submit" value="conferma" style="padding:6px 20px 6px 20px" /></div>
</form>
<body>
</html>
Bhe.. In questo codice mi sono limitato ha commentare la parte in php, quindi credo che si capisca, l'unica cosi che non ho commentato è il fatto che richiamo i campi del modulo con la funzione
htmlentities(), per evitare appunto che l'utente inserisca del codice html nel messaggio o nel proprio nome, ovvero sostituendo i caratteri speciali, elaborati dal browser, con i loro rispettivi codice ascii, tradotto e stampato come testo.
Passiamo in fine alla creazione del file
view_message.php che si occuperà di visualizzare i messaggi della nostra guestbook, contenente questo codice:
CODICE
<?php
$dom = new DOMDocument("1.0", "ISO-8859-1");
$dom->load("message.xml");
$root = $dom->documentElement;
$elements = $root->getElementsByTagName("msg");
foreach ($elements as $out)
{
// Estraggo il nodo autore
$autore = $out->getElementsByTagName("autore")->item(0)->nodeValue;
// Estraggo il nodo testo
$testo = $out->getElementsByTagName("testo")->item(0)->nodeValue;
// Estraggo l'id dell'elemento contenente il timestamp
$timestamp = $out->getAttribute("id");
// Genero la data di invio del messaggio tramite il timestamp
$data = date("d/m/y, H:i", $timestamp);
// Output dei risultati
echo "<div style=\"padding-top:10px; margin:7px; border:outset #ffffff 1px; background:#ffffff; width:600px\">Da: <strong>$autore</strong> il $data<hr />$testo</div>";
}
?>
In fine creiamo l'archivio xml che conterrà tutti i nostri messaggi:
CODICE
<?xml version="1.0" encoding="ISO-8859-1"?>
<message></message>
Come vedete in effetti, fra i tag message non c'è nulla, ecco, li verranno aggiunti i messaggi presente nella vostra guestbook.
Bene.. Questo codice, cosi come, dovrebbe essere chiaro, anche perché mi sono limitato a commentarlo.
Ah.. Quasi dimenticavo, non vi preoccupate di non aver creato l'archivio xml, ve lo crea automaticamente se non esiste già, come potrete vedere nella prima if della pagina
index.php.
Vi inserisco in allegato, alla discussione, il risultato, naturalmente testato e funzionante.Edited by sevenjeak - 3/12/2010, 11:16