Guestbook in php e xml

« Older   Newer »
  Share  
sevenjeak
view post Posted on 6/11/2010, 18:14     +1   -1




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

Download attachment
guestbook_in_php_e_xml.zip ( Number of downloads: 91 )

 
Top
max_400
view post Posted on 7/11/2010, 01:23     +1   -1




- i files compressi non riesco ad estrarli.
- gli script li ho provati e l'ultimo segnala errore

ecco la situazione:

- il file index.php

image






- il file new_message.php

image



il file view_message.php ed è qui l'errore

image


di solito gli script con questo segno -> non mi hanno funzionato in passato
le versione e php 5


vedi un po tu
 
Top
sevenjeak
view post Posted on 7/11/2010, 11:53     +1   -1




strano... a me funziona tutto bene, ma stai provando il tuo script in locale?

Non so perché non ti faccia estrarre i file.

Cmq, per l'errore non saprei, hai copiato direttamente il codice scritto, sicuro di averlo copiato bene?
 
Top
Randi
view post Posted on 30/11/2010, 21:26     +1   -1




Ciao sevenjeak neache io riesco ad estrarre i file. Potresti rimettere lo zip o magari un rar, grazie.
 
Top
sevenjeak
view post Posted on 3/12/2010, 11:12     +1   -1




Scusate per il ritardo della risposta.

Ho aggiornato l'archivio e lo script non facendo creare dinamicamente l'archivio xml, ora dovrebbe andare max_400.

Mi dispiace.. Ma non posso archiviare in .rar visto che non uso winRAR ma 7zip, potresti provare a estrarlo con 7zip.
 
Top
Babbaano JD
view post Posted on 26/8/2011, 19:17     +1   -1




lo script a me funziona benissimo, l'unica pecca è che i post vanno in ordine inverso e se uno dovesse cercare il suo nuovo post deve andare in fondo alla pagina
 
Top
max_400
view post Posted on 28/8/2011, 09:05     +1   -1




ciao Babbaano JD e benvenuto sul forum...
in questo periodo sono tutti in ferie quindi pazienta un po per avere delle risposte
al tuo problema.

Inoltre sarebbe utile se ti presentassi hai un account su forumfree?
quindi sei un associato e non un iscritto giusto?
 
Top
Babbaano JD
view post Posted on 28/8/2011, 11:59     +1   -1




si giusto scusa se non mi sono presentato ma l'altro giorno non avevo molto tempo quindi mi sono dimenticato :D
Comunque ho 13 anni e ed è due anni che studio web design individualmente quindi non a scuola.
 
Top
maxmaxuell
view post Posted on 28/8/2011, 14:10     +1   -1




mi ricordi Francesco mio nipote che ha più o meno la tua stessa età...
il mio piccolo genio che ormai non si collega più
non va bene a scuola e i suoi genitori non gli fanno più usare internet
lui a soli 13 anni è bravissimo di php e proprio in questa sezione aveva creato qualkosa a proposito di guestbook in php...

A differenza di tanti testoni e mentecatti di questo forum (tranne pochissime eccezioni) che per impare qualkosa
ci vuole il dottor Frankenstein che gli apra il cervello e gli metta tutto dentro,
Francesco è bravissimo in PHP.

https://max400.forumfree.it/?t=47859586
nel suo esempio devi aggiornare la pagina per vedere il nuovo messaggio
ho appena fatto una prova al volo.
 
Top
Babbaano JD
view post Posted on 30/8/2011, 15:29     +1   -1




Si è bello ma anche lì il messaggio appare alla fine e secondo me è meglio usare un
CODICE
fwrite("","r+");
 
Top
sevenjeak
view post Posted on 31/8/2011, 17:35     +1   -1




Cosa intendi, scusa, ma sono rimasto un po indietro nella discussione, mica io scrivo su un file con fwrite(), cosa intendi di preciso?

P.S.: Per i post in ordine inverso, cioè, per far scrivere l'ultimo post al primo posto basta sostituire il foreach con un ciclo for, all'incontrario, che $i parte dal valore dell'ultimo elemento, e decrementa andando fino al primo, e a quel punto basta visualizzare l'elemento al valore di i, dato che i decrementa, li visualizzerà in ordini opposto, spero di essermi spiegato bene.
 
Top
Babbaano JD
view post Posted on 5/9/2011, 19:48     +1   -1




grazie per aver risposto ma il post di prima non era riferito a te ma a maxmanuell
 
Top
max_400
view post Posted on 29/5/2012, 15:42     +1   -1




up
aggiorno questa discussione che ha avuto 586 visite
 
Top
max_400
view post Posted on 27/6/2012, 15:25     +1   -1




up
793 visite
 
Top
max_400
view post Posted on 2/7/2012, 01:14     +1   -1




872
 
Top
18 replies since 6/11/2010, 18:14   3334 views
  Share