Realizzare una piccola chat in php senza database

Похожие документы
Realizzare il layout di un sito web senza utilizzare frame e tabelle

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

Cookie e Webstorage. Vediamo ora i metodi dell oggetto localstorage. Per memorizzare un valore si utilizza il metodo setitem:

Introduzione ad AJAX

Corso di PHP. Prerequisiti. 6.1 PHP e il web 1. Conoscenza HTML Tecnica della programmazione Principi di programmazione web

Laboratorio Progettazione Web PHP e FORMs HTML. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2013/2014

Linguaggio HTML. Reti. Il Linguaggio HTML. Il Linguaggio HTML

I FORM. L'attributo action contiene l'url del file php a cui devono essere inviati i file per essere elaborati.

PHP E MYSQL CREAZIONE DI UN NUOVO DATABASE DAL PHPMYADMIN

Scaletta. Estensioni UML per il Web. Applicazioni web - 2. Applicazioni web. WAE: Web Application Extension for UML. «Client page»

Sito web parrocchiale: STRUMENTI E PROGRAMMI

Interazione con l utente : i moduli.

19. LA PROGRAMMAZIONE LATO SERVER

sito web sito Internet

Dott.ssa Adriana Pietramala

Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP

LABORATORIO PER IL DESIGN DELLE INTERFACCE PEGORARO ALESSANDRO CASSERO.IT MANUALE DI AGGIORNAMENTO, MANUTENZIONE E USO DEL SITO

Esercizi di JavaScript

PHP. A. Lorenzi, R. Giupponi, D. Iovino LINGUAGGI WEB. LATO SERVER E MOBILE COMPUTING Atlas. Copyright Istituto Italiano Edizioni Atlas

Lezione 6: Form 27/04/2012

HTML HTML. HyperText Markup Language. Struttura di un documento. Gli elementi essenziali di un documento HTML sono i seguenti TAG: <HTML>...

AJAX. Goy - a.a. 2006/2007 Servizi Web 1. Cos'è il Web 2.0

Laboratorio di Sistemi Programmare in Php con NetBeans Php. Programmare in Php con Xampp e NetBeans IDE

Client - Server. Client Web: il BROWSER

Siti interattivi e dinamici. in poche pagine

Scuola Digitale. Manuale utente. Copyright 2014, Axios Italia

04/05/2011. Lezione 6: Form

MANUALE UTENTE. In questo manuale verranno descritte tutte le sue funzioni. Il sistema OTRS è raggiungibile al seguente link:

Come brandizzare la tua Piattaforma E-Learning Docebo

GUIDA GENERALE ALL USO DEL NUOVO SITO WEB

POS VIRTUALE INTERNET. SETEFI S.p.A

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

Indice Configurazione di PHP Test dell ambiente di sviluppo 28

Vi ricordiamo che per qualsiasi problema tecnico o informazione potete contattare info@eduitalia.org oppure Francesco al

MANUALE PER L UTILIZZO DELLA FUNZIONE EVENTI Rel.1.2 del 29 gennaio 2004

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste

NAVIGAORA HOTSPOT. Manuale utente per la configurazione

Progettazione Web Applicazioni client-server

AJAX e altre applicazioni di Javascript. Luca Fabbri

PHP: Professional Hypertext Preprocessor

Java Server Pages (JSP) JSP o Servlet? Java Server Pages (JSP) Java Server Pages Costituiscono un estensione della tecnologia delle servlet

AGGIORNAMENTO DATI SU PORTALE DOCENTI

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client

CREATIVE-LINK realizzazione siti web E-COMMERCE? e-commerce completo. offerta realizzazione sito web professionale

DOCUMENTAZIONE POISSON

Entrare nel sistema. Clicca su Entra per entrare nel sistema. PAGINA 1

HTML 6. I frame. Sintassi di base. I frame e DOCTYPE FRAME. ...head... <FRAMESET lista_attributi> <FRAME SRC= URL lista_attributi>

Test in automatico di programmi Android

Il Web-Service SDMX dell ISTAT

CREATIVE-LINK realizzazione siti web E-COMMERCE? e-commerce base. offerta realizzazione sito web professionale

Come funziona internet

developed by Emanuele De Carlo

PHONEWEB PHONE: RUBRICA TELEFONICA AGENDA: AGENDA APPUNTAMENTI PHONEPRO: PHONE + AGENDA INTEGRATI PHONEWEB

Sistema Informativo Gestione Fidelizzazione Clienti MANUALE D USO

Manuale Utente Albo Pretorio GA

E-Invoice. Express Invoicing. TNT Swiss Post AG. Guida utente

Guida Rapida all uso del portale v.1.0 (beta)

Famiglie Nuove Sostegno a distanza

CREAZIONE E INVIO OFFERTA DI APPALTO DA FORNITORE

Manuale d istruzione SBS

PYTHON Inviare dati con i form A cura di Silvio Bonechi [sabandini_at_tiscali_dot_it] per

COMUNICAZIONE UTENTI SISTEMI-PROFIS INSTALLAZIONE GE.RI.CO e PARAMETRI2015

istruzioni per l uso

Presentazione MyMailing 3.0

GCEWEB Denunce mensili in WEB

Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008

Come distribuire in una pagina Web il video ripreso con la telecamera

3. Installare Wamp Server

CAPITOLO 10 - TECNOLOGIA ASP.NET - WEB FORM

I Tag dell html. Parte quarta

@ITCSPRIMOLEVIBOLLATE.IT il manuale!

1) Il client(browser utilizzato) invia al server i dati inseriti dall utente. Server

XML e PHP. Gestire XML con PHP. Appendice

Guida all utilizzo del web tool di gestione accesso ai Datacenter

Guida al CRM INGENIA Group

File, Modifica, Visualizza, Strumenti, Messaggio

Registratori di Cassa

- DocFinance Manuale utente

Corso di Informatica Modulo T3 B1 Programmazione web

Programma. Corso di Php e MySql. Struttura dettagliata per il partecipante. (a cura di Paolo Bruno)

Транскрипт:

Realizzare una piccola chat in php senza database L obiettivo di questa guida è implementare una semplice chat in linguaggio php, facilmente inseribile in qualsiasi sito. La chat che realizzeremo avrà il vantaggio di non dover gestire un database, bensì ogni singolo messaggio verrà immagazzinato in un semplice file di testo. Di conseguenza è giusto premettere che la realizzazione di una chat sottoposta a un grande traffico richiede assolutamente la gestione di un database. La chat che realizzeremo sarà essenziale. Permetterà di inviare un messaggio, dopo aver inserito il proprio nick e visualizzarlo di conseguenza a video. Sarà utilizzata la tecnologia Ajax per aggiornare dinamicamente il box dei messaggi a intervalli regolari. I file che andremo a realizzare sono essenzialmente 3: 1. index.php 2. messaggio.php 3. msg.html Il terzo file in elenco (msg.html) sarà lasciato volutamente vuoto perché il suo scopo è mantenere i messaggi di chat inviati. Il primo passo da compiere è realizzare una semplice form in html che possa permettere di inserire il nick e il messaggio e quindi fornire il bottone di invio: <div id="sender" align="center" onkeyup="keypressed(event);"> <label>il tuo nickname</label><input type="text" name="nic" size="30" id="nic" /> <label>il tuo messaggio</label><textarea name="msg" id="msg" cols="30" rows="3"></textarea> <button onclick="dowork();">invia</button> </div> Nelle linee di codice precedenti sono state inserite le chiamate ad alcune funzioni, keypressed e dowork, che verranno analizzate in avanti. Per ora l importante è aver realizzato il modulo che permetterà all utente di inviare i propri messaggi. Il secondo passo è realizzare un box dove far comparire i messaggi di chat: <div id="result"> <?php $data = file("msg.html"); 1

foreach ($data as $line) { echo $line;?> </div> Nel div result verranno stampati i messaggi tramite la funzione echo di php i quali, come detto prima, proverranno dal file msg.html. Infatti file msg.html viene aperto in lettura e viene effettuato un ciclo fino all ultima linea presente nel file, cioè l ultimo messaggio. Per completare il file index.php è necessario inserire le funzioni in javascript che permettano di gestire le varie funzionalità della chat lato client: <script language="javascript" type="text/javascript"> var httpobject = null; var link = ""; var timerid = 0; function gethttpobject(){ if(window.activexobject) return new ActiveXObject("Microsoft.XMLHTTP"); else if (window.xmlhttprequest) return new XMLHttpRequest(); else { alert("il tuo browser non supporta AJAX."); return null; function setoutput(){ if(httpobject.readystate == 4){ var response = httpobject.responsetext; var objdiv = document.getelementbyid("result"); objdiv.innerhtml += response; objdiv.scrolltop = objdiv.scrollheight; var inpobj = document.getelementbyid("msg"); inpobj.value = ""; inpobj.focus(); function setall(){ if(httpobject.readystate == 4){ var response = httpobject.responsetext; 2

var objdiv = document.getelementbyid("result"); objdiv.innerhtml = response; objdiv.scrolltop = objdiv.scrollheight; function dowork(){ if(document.getelementbyid('nic').value.length<1 document.getelementbyid(' msg').value<1){ alert("campi vuoti"); else{ httpobject = gethttpobject(); if (httpobject!= null) { link="messaggio.php?nick="+document.getelementbyid('nic').value+ "&msg="+document.getelementbyid('msg').value; httpobject.onreadystatechange = setoutput; function doreload(){ httpobject = gethttpobject(); var randomnumber=math.floor(math.random()*10000); if (httpobject!= null) { link = "messaggio.php?all=1&rnd="+randomnumber; httpobject.onreadystatechange = setall; function UpdateTimer() { doreload(); timerid = settimeout("updatetimer()", 5000); function keypressed(e){ if(e.keycode=='13'){ dowork(); 3

</script> La funzione cuore della chat lato client è dowork. Viene prelevato l oggetto http, realizzata la stringa link che incapsula il nick dell utente e il messaggio, nonché il nome del file che riceverà tramite Get la stringa in questione: link="messaggio.php?nick="+document.getelementbyid('nic').value+"&msg="+ document.getelementbyid('msg').value; Viene quindi inviato il messaggio, non prima di aver ripulito la form di invio: httpobject.onreadystatechange = setoutput; I metodi UpdateTimer e doreload permettono di ricarica a intervalli regolari la chat o più precisamente il box result e quindi aggiornare i messaggi. A tale scopo è importante sottolineare l importanza ricoperta dall oggetto HttpObject e quindi dallo strumento di sviluppo Ajax che permette appunto di ricaricare dinamicamente una sezione di una pagina web. La funzione keypressed controlla invece il tasto invio, tramutando tale azione nell invio del messaggio. Il file index.php è così concluso: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1- transitional.dtd"> <html> <head> <title>chat php</title> <script language="javascript" type="text/javascript"> <!-- var httpobject = null; var link = ""; var timerid = 0; function gethttpobject(){ if (window.activexobject) return new ActiveXObject("Microsoft.XMLHTTP"); else if (window.xmlhttprequest) return new XMLHttpRequest(); else { alert("your browser does not support AJAX."); return null; 4

function setoutput(){ if(httpobject.readystate == 4){ var response = httpobject.responsetext; var objdiv = document.getelementbyid("result"); objdiv.innerhtml += response; objdiv.scrolltop = objdiv.scrollheight; var inpobj = document.getelementbyid("msg"); inpobj.value = ""; inpobj.focus(); function setall(){ if(httpobject.readystate == 4){ var response = httpobject.responsetext; var objdiv = document.getelementbyid("result"); objdiv.innerhtml = response; objdiv.scrolltop = objdiv.scrollheight; function dowork(){ if(document.getelementbyid('nic').value.length<1 document.getelementbyid('msg').value<1) { alert("campi vuoti"); else{ httpobject = gethttpobject(); if (httpobject!= null) { link="messaggio.php?nick="+document.getelementbyid('nic').value+ "&msg="+document.getelementbyid('msg').value; httpobject.onreadystatechange = setoutput; function doreload(){ httpobject = gethttpobject(); var randomnumber=math.floor(math.random()*10000); if (httpobject!= null) { link = "messaggio.php?all=1&rnd="+randomnumber; httpobject.onreadystatechange = setall; 5

function UpdateTimer() { doreload(); timerid = settimeout("updatetimer()", 5000); function keypressed(e){ if(e.keycode=='13'){ dowork(); </script> </head> <body onload="updatetimer();"> <div id="result"> <?php $data = file("msg.html"); foreach ($data as $line) { echo $line;?> </div> <div id="sender" align="center" onkeyup="keypressed(event);"> <label>il tuo nickname</label><input type="text" name="nic" size="30" id="nic" /> <label>il tuo messaggio</label><textarea name="msg" id="msg" cols="30" rows="3"></textarea> <button onclick="dowork();">invia</button> </div> </body> </html> Il secondo file che implementeremo sarà messaggio.php che a tutti gli effetti descrive la logica lato server della nostra applicazione. Essenzialmente lo scopo di questo file sarà quello di prelevare il messaggio dal Get e scompattarlo per ricavare nick e messaggio. Successivamente sarà calcolato un timestamp (la data attuale) che verrà accodato al messaggio, non prima di aver realizzato la stringa html da scrivere nel file msg.html. 6

Ecco il codice di messaggio.php : <?php if (isset($_get['msg'])){ if (file_exists('msg.html')) { $f = fopen('msg.html',"a+"); else { $f = fopen('msg.html',"w+"); $nick = isset($_get['nick'])? $_GET['nick'] : "Hidden"; $msg=stripslashes(htmlentities($_get['msg'], ENT_QUOTES)); $data=date("d-m-y"); $ora=date("g:i:s"); $line = "<p><span>$nick: </span><span>$msg ($data $ora)</span></p>"; fwrite($f,$line."\r\n"); fclose($f); echo $line; else if (isset($_get['all'])) { $flag = file('msg.html'); $content = ""; foreach ($flag as $value) { $content.= $value; echo $content;?> Come detto il messaggio viene scritto nel file incapsulato in un paragrafo <p>. Il messaggio viene quindi stampato a video tramite echo. Importante analizzare la seconda parte del file messaggio.php, nel quale viene stampato un messaggio vuoto quando risulta necessario ricaricare i messaggi di chat. Infatti questa procedura viene messa in moto nel momento in cui nel messaggio ricevuto viene identificato il parametro all, inviato appunto dal metodo doreload. 7

Ecco il risultato finale della nostra piccola chat: Per migliorare l aspetto grafico della nostra chat si consiglia di realizzare un foglio di stile da associare al file index.php nel quale impostare una grandezza fissa del box result onde evitare lo scorrimento in basso del modulo di inserimento messaggi. 8