ITBazar, informatica 100%

l’informatica alla portata di tutti!

Imparare le Espressioni regolari in 10 minuti!

Inviato da Domenico Dibello il 17 Aprile 2008

Ci sono dei “piccoli particolari” che fanno la differenza tra un programmatore degno di questo nome e uno smanettone, un informatico scrive codice organizzato in oggetti, pulito, leggibile, riusabile al contrario di ciò che farebbe uno smanettone che butterebbe giù una serie di righe di codice ingrovigliato in stile “spaghetti”. Una caratteristica ci fa comprendere la bravura di chi ha scritto il codice: l’eleganza. L’eleganza è non usare 20 righe di codice quando ne basterebbe soltanto una! Gli smanettoni non usano le “regular expressions” i programmatori “seri” SI!

Esistono due tipi di Regex o Espressioni regolari, quelle POSIX e quelle PCRE. Anche se Posix dovrebbe rappresentare lo standard, di fatto le Espressioni PCRE sono quelle utilizzate da tutti i linguaggi più diffusi e tra l’altro sono più veloci da eseguire.

Vediamo alcuni esempi in linguaggio PHP, ma l’espressione regolare utilizzata è la stessa per tutti i linguaggi. Le cose da tener presente sono che:

Un’espressione regolare inizia e termina con un separatore (di solito il carattere / )
Un metacarattere va fatto seguire di solito da un iteratore
I caratteri ( ) [ ] < > . * ? sono caratteri speciali, diventano comuni caratteri solo se seguiti dal simbolo \
Tra parentesi quadre è possibile creare dei pattern più complessi, per esempio [0-5] indica un carattere tra 0 e 5. Il pattern [0-3a-z] indica un numero da 1 a 3 seguito da una lettera

 

 

\d Numeri da 0 a 9, abbreviazione di [0-9]
\D Tutto tranne numeri, abbreviazione di [^0-9]
\w Qualsiasi carattere alfanumerico o underscore (_)
\W Qualsiasi carattere che non sia alfanumerico o underscore
\s Qualsiasi whitespace (spazio, tab, newline ecc.)
\S Qualsiasi NON whitespace
. Qualsiasi carattere tranne il newline

Ognuno di questi caratteri può ripetersi più volte, perciò va seguito da un iteratore:

? Occorre 0 o 1 volta
* Occorre 0 o più volte
+ Occorre 1 o più volte
{n} Occorre n volte
{,n} Occorre al più n volte
{m,} Occorre al meno m volte
{m,n} Occorre tra m ed n volte

Alcuni esempi elementari di Regex:

/…./ Parola di 4 caratteri
/[a-z]+/ Parola formata solo da lettere alfanumeriche lunga 1 o più caratteri
/\d{1,5}/ Un numero formato da 1 a 5 cifre
/\(.*\)/ Una parentesi aperta, 0 o più caratteri e una parentesi chiusa
/(bianco|nero)/ La parola bianco o la parola nero
/[a-z0-9]+/i Riconosce solo parole di almeno 1 carattere formate da lettere e numeri, la i posto dopo l’ultimo separatore indica che non c’è distinzione tra maiuscole e minuscole


Esempio 1: Riconoscere un indirizzo email in PHP

1
2
3
4
5
6
7
8
9
$soggetto = "webmaster@itbazar.org";
if(preg_match("/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}/i",$soggetto))
{
	echo "Email valida";
}
else
{
	echo "Email NON valida";
}

Esempio 2: Riconoscere un numero di cellulare (contiene solo i prefissi più diffusi)

1
2
3
4
5
6
7
8
9
$soggetto = "3291234567";
if(preg_match("/(328|329|333|339|347|340)\d{7}/",$soggetto))
{
	echo "Numero di cellulare valido";
}
else
{
	echo "Numero di cellulare NON VALIDO";
}


Esempio 3: Estrarre il Body di una pagina HTML

1
2
3
4
5
6
7
8
9
$soggetto = "<html><head>Header della pagina</head><body>Questo e' il Body della pagina..</body></html>";
if(preg_match("/\<body\>.*?\<\/body\>/i",$soggetto,$riconosciuti))
{
	echo "Body: $riconosciuti[0]";
}
else
{
	echo "Nessun body trovato";
}

Potete trovare maggiori informazioni sulle Regex Perl Compatibili (PCRE) e sulle funzioni PHP che ne fanno uso sulla guida ufficiale PHP
Funzioni che utilizzano PCRE
Guida completa alle sintassi e alle funzioni PHP con PCRE

Pubblicato in Guide, ITbazar, Linux, Php, Tutorial, Webmaster | Nessun Commento »

Php Mysql e i database con Adodb

Inviato da Domenico Dibello il 16 Marzo 2008

Un qualsiasi programma che si rispetti ha bisogno di immagazzinare, memorizzare e utilizzare dei dati. Il modo migliore per ricercare velocemente le informazioni che ci servono e poterle indicizzare per utilizzi futuri è utilizzare una “base di dati” o Database. I database in circolazione sono davvero tanti, il più utilizzato in ambito Linux/Unix e quindi con il linguaggio PHP è Mysql. Mysql è un database gratuito ed opensource che si distingue per la sua notevole velocità di esecuzione e per la sua ormai comprovata stabilità.

In questo articolo vedremo come sfruttare la potenza di Mysql con PHP attraverso ADODB.

Cos’è ADODB?

ADODB è una “abstraction library” per PHP e Phyton.

Sito ufficiale ADOdb

A cosa serve un’abstraction library?

Con Adodb noi possiamo scrivere un’applicazione PHP e far si che essa funzioni con tutti i database supportati senza modificare neanche una virgola di codice, i database supportati sono:

MySQL, PostgreSQL, Interbase, Firebird, Informix, Oracle, MS SQL, Foxpro, Access, ADO, Sybase, FrontBase, DB2, SAP DB, SQLite, Netezza, LDAP, and generic ODBC, ODBTP

Esempio pratico con Adodb e Mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php 
//Includiamo la libreria ADODB
require("adodb.inc.php");
 
//Creiamo una nuova connessione specificando mysql come database
 $db = NewADOConnection('mysql');
 
//Inseriamo i dati della connessione, indirizzo server, utente, passqord e database
 $db->Connect("indirizzo", "nomeutente", "password", "nomedatabase");
 
//Inviamo la query al database salvando il risultato in $result
 $result = $db->Execute("SELECT nome,cognome FROM tabellaimpiegati");
 
//Se la connessione al database non riesce interrompi lo script con un mess. di errore 
if ($result === false) die("Connessione al database fallita!");  
 
//Estraiamo il NUMERO dei campi esempio. Nome Cognome Indirizzo....
$numero_campi = $result->FieldCount();
 
//Eseguiamo un While per stampare le righe con i risultati
 while (!$result->EOF) {
    for ($i=0; $i < $numero_campi; $i++)
	{
           print $result->fields[$i].' ';
	}
    $result->MoveNext();
    print "<br>";
 }
?>

Pubblicato in Guide, ITbazar, Mysql, Php, Tutorial | Nessun Commento »

Un semplice scambio di dati tra Php e Flex/Flash

Inviato da Domenico Dibello il 12 Marzo 2008

Flex è la miglior tecnologia client side oggi disponibile, esteticamente di grande effetto, e ricca di componenti già pronti da popolare con sorgenti XML. Php è uno tra i linguaggio di scripting server side più utilizzati, con una vastissima documentazione una estrema facilità di utilizzo ed una affidabilità ormai collaudata.
Questo esempio è una dimostrazione di quanto sia facile creare una pagina in Flex con un back-end PHP, può essere una valida alternativo ai classici Form HTML.

Quello che vi propongo è semplicissima messaggeria, l’utente può lasciare un messaggio e firmarlo.
Ecco qui l’esempio realizzato e funzionante.


 

Vediamo prima come è strutturato il codice della pagina PHP che permette il salvataggio dei messaggi nel file e il listing dello stesso ma in formato XML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
 
$nome = $_POST['nome'];
$messaggio = $_POST['messaggio'];
 
//Se l'utente ha passato delle variabili tramite POST...
if($nome && $messaggio)	 
{	
	$f=fopen("messaggi.txt","a");	
	//Apro il file messaggi.txt in scrittura (a=append)
	fwrite($f,"$nome#$messaggio\n"); 
	//Scrivo nome e messaggio inserendo il separatore "#"
	fclose($f); 	//Chiudo il file
}
 
//Leggo l'intero contenuto del file nella variabile $testo
$testo=file_get_contents("messaggi.txt");
 
 
//Adesso stampo il contenuto del file in formato XML
echo "<main>";
$tnome = strtok($testo,"#");  
//Leggo fino al separatore (token) "#"
 
while($tnome !== false)	
{	echo "<item>";	
	echo "<nome>$tnome</nome>"; 	
	$tmessaggio=strtok("\n"); //Leggo fino al carattere "a capo"
	echo "<messaggio>$tmessaggio</messaggio>";		
	echo "</item>";
	$tnome=strtok("#");	//Leggo fino al carattere "#"
}
echo "</main>";
 
?>

Questa pagina che chiameremo messaggeria.php, si occupa di scrivere i messaggi inseriti dagli utenti nel file messaggi.txt che verrà salvato sul server. Se l’utente (nel nostro caso tramite Flex) passa tramite POST le variabili nome e messaggi, lo script messaggeria.php salva nome e messaggio nel file di testo e poi stampa il contenuto del file in formato XML.

La pagina visitata con un browser da in output qualcosa del tipo…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<main>
	<item>
		<nome>
			Bill Gates
		</nome>
		<messaggio>
			Windows Vista va una favola
		</messaggio>
	</item>
	<item>
		<nome>
			Linus Torvals
		</nome>
		<messaggio>
			Anche Linux non se la cava male
		</messaggio>
	</item>
</main>

Spero che la parte PHP sia abbastanza chiara, in caso contrario vi esorto a lasciare un commento con le vostre domande!

Adesso vediamo come costruire la parte Flex:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
<mx:HTTPService fault="crea_fallito()" 
	        result="crea_feedback()" 
                id="creaRequest"
                url="http://www.itbazar.org/wfkjbn/messaggeria.php" 
                useProxy="false" 
                method="POST">
 
        <mx:request xmlns="">
            <nome>{nome.text}</nome>
            <messaggio>{messaggio.text}</messaggio>
        </mx:request>
</mx:HTTPService>
 
 
<mx:DataGrid x="18.5" y="10" width="343.5" height="143" 
	     id="datagrid1" 
             dataProvider="{creaRequest.lastResult.main.item}" >
	<mx:columns>
		<mx:DataGridColumn headerText="Nome" dataField="nome"/>
		<mx:DataGridColumn headerText="Messaggio" dataField="messaggio"/>			
	</mx:columns>
</mx:DataGrid>

Il blocco HTTPService permette al client Flex di inviare una richiesta (creaRequest) alla pagina “url” con il metodo POST (cioè esattamente come un form HTML) le due variabili nome e messaggio, prendendo i valori dal testo inserito dall’utente in due textbox.

Il DataGrid invece, cioè la tabella dell’esempio, ha come fonte il file XML ricavato dall’HTTPService, questa “fonte” tecnicamente si chiama dataProvider. Ogni riga della tabella quindi sara popolata con il contenuto del tag del nostro file XML.
HeaderText è il titolo della colonna che può essere scelto liberamente, dataField invece deve coincidere con un tag XML contenuto nel tag superiore .

A questo punto ogni volta che vogliamo aggiornare i dati dobbiamo solo inviare un creaRequest.send();

Pubblicato in Flash, Flex, Guide, ITbazar, Internet, Linux, Php, Tutorial | Nessun Commento »

Una Semplice autenticazione in PHP

Inviato da Domenico Dibello il 28 Febbraio 2008

login php autenticazione utenti

Il web 2.0 ci porta ad una navigazione sempre più completa e ad una interattività sempre maggiore, ogni sito internet che si rispetti (il mio ancora no! :-) ) gestisce degli utenti che possono interagire con il sito stesso. Per far tutto ciò è necessario avere un database contenente le generalità di ogni iscritto e soprattuto è necessario un meccanismo di autenticazione. Vedremo in questo articolo come realizzare una semplice autenticazione in PHP.

 

Innanzitutto creiamo una pagina per l’iscrizione degli utenti. Questa operazione è piuttosto semplice, basta creare un semplice form html come questo…

 

form iscrizione html php

 

Come vedete dall’immagine, quando l’utente ha inserito i suoi dati premendo il tasto “Iscriviti” viene redirezionato alla pagina “inserisci_utente.php”, questa pagina si occuperà di verificare la correttezza dei dati e di inserirli in un database. Se non sapete come usare database in PHP, cercate tra gli articolo di questo sito, e in ogni caso vi consiglio di utilizzare un “abstraction layer” che semplficherà tutto il lavoro, qui potete trovare documentazione in italiano di ADODB .ADODB permette di scrivere codice funzionante con tutti i database senza doverlo riscrivere per esempio se si passa da Mysql ad SqLite a Oracle a Postgres, etc…

Quandi l’utente sarà ora in grado di effettuare il login inserendo il suo indirizzo email ed una password, attraverso una pagina del genere…

controlla dati php login

Come potete notare sia nel form precedente che in questo, i dati vengono inviati ad una pagina PHP tramite un POST, ciò significa che le variabili Email e Password inserite dall’utente saranno disponibili nella pagina di arrivo ( in questo caso “controlla_dati.php”) utilizzando le variabili $_POST[’Email’] e $_POST[’Password’].

Quindi la pagina “controlla_dati.php” deve controllare che le variabili Email e Password siano contenute nel database degli utenti. La funzione get_user_id(email,password) restituisce l’id dell’utente con quell’email e password, e restituisce false se l’utente non esiste, dunque anche se la password è sbagliata. In teoria si potrebbero anche controllare se l’user esiste e la password è sbagliata ma questo è un esempio di autenticazione molto semplice. Se l’utente esiste attraverso un Javascript avviene un redirect verso la pagina principale del nostro sito, altrimenti si ritorna alla pagina di login precedente aggiungendo il messaggio “Email e password errati”.

controlla email password

E’ importante ovviamente che la pagina principale del nostro sito controlli che la variabile $_GET[uid] sia settata ed esista nel database, altrimenti un utente malintenzionato potrebbe saltare il login digitando direttamente l’Url della pagina principale.

autenticazione php pagina principale

Come possiamo vedere dal codice se la variabile $_GET[’uid’] non è settata avviene un redirect verso la pagina di login, e nel caso un malintenzionato disabilitasse i Javascript per evitare questo l’esecuzione della pagina, terminerebbe con un “die”. Se l’uid è settato ma non esiste nel database è probabile che qualcuno ha cercato di falsificarlo oppure si tratta di un utente non più esistente, dunque l’esecuzione termina. In caso contrario si da il benvenuto all’utente! :-)

Pubblicato in Guide, ITbazar, Linux, Mysql, Php, Tutorial | 1 Commento »

Come creare un gioco online multiutente (1)

Inviato da Domenico Dibello il 25 Febbraio 2008

gioco carte online 2

Bene, per la serie complichiamoci la vita ecco una nuova serie di guide molto interessanti, l’argomento sarà la creazione in un gioco di carte online multiutente. Quando si da il via ad un progetto di tale portata la cosa principale è buttare giù su carta ogni minimo particolare, la struttura, le classi, i meccanismi, l’interfaccia…

Una volta fatto ciò si può passare alla parte più divertente, programmare!

Alla fine di queste guida che durerà 1 o 2 mesi al massimo chiunque abbia dimestichezza con la programmazione sarà in grado di creare un proprio gioco multiutente!

1. Quali linguaggi utilizzare?

La mia politica sarà quella di non far scaricare al giocatore nessun programma, il gioco avverrà direttamente online. Ecco dunque l’esigenza di un linguaggio client side…Ajax? Java? Flash? Flex?

La risposta è quasi scontata: Flash! Il flash presente una serie di vantaggi rispetto ai concorrenti. Questo linguaggio è stato creato apposta per animazioni interattive, giochi, e quant’altro sia legato alla grafica e all’animazione. Un gioco è qualcosa che deve far divertire l’utente, ragion per cui l’interfaccia grafica deve essere molto curata e accattivante, possibilmente tridimensionale, ma quest’ultimo aspetto non è fondamentale, ci accontenteremo di un 3d finto! ;-) Qualche effetto qui e li…e il gioco è fatto!

2. Linguaggio lato server?

Dunque 100% Flash? Ovviamente questo non è possibile. Il gioco che andiamo a creare è multiutente! Questo vuol dire che ogni giocatore deve “vedere” le mosse effettuate dagli altri utenti, è naturale quindi pensare ad un meccanismo che colleghi i giocatori, nel nostro caso 2 o più giocatori. I clients programmati in Flash dovranno comunicare con un server di gioco, che gestirà l’andamento dello stesso. Il server si occuperà di vedere se i giocatori sono ancora online o se hanno abbandonato il gioco, quali sono le loro mosse o le loro azioni in generale. Quale linguaggio allora per la parte server side? Bhe direi che questo punto non è fondamentale. Clients e server si scambieranno piccole informazioni della serie….

“Il giocatore 1 ha scartato un 3 di picche”

“Il giocatore 2 ha abbandonato la partita”

“Il giocatore 3 scrive: ‘Mi sto divertendo come un pazzo…’”

Tutti gli esempi di questa guida per quanto riguarda il lato server saranno in linguaggio PHP. Ho scelto PHP per 2 ragioni:

  1. In questo modo potrò utilizzare un server Linux
  2. Esistono ottimi framework gratuiti e opensource per far comunicare Flash e PHP…io userò AMFPHP

Se PHP non è tra i vostri linguaggi preferiti potete anche scegliere di usarne uno differente, ASP, Coldfusion (sarebbe l’ideale), ASP.NET, Ruby, Java, e chi più ne ha…..

Ripeto che il server non dovrà fare grandi cose. Il requisito essenziale è quello di potersi connettere ad un database, nel mio esempio userò Mysql ma anche questo è un particolare secondario.

…continua…

Pubblicato in Flash, Guide, Internet, Mysql, Php, Tutorial | Nessun Commento »

Tutorial PHP - Lezione 2, Stampare un messaggio sulla pagina web

Inviato da Domenico Dibello il 12 Febbraio 2008

hello world phpBene, procediamo nell’affascinante mondo della programmazione Server Side, adesso vedremo come ottenere il classico “Hello World” cioè un’applicazione che stampa un messaggio a video. Muniamoci di un qualsiasi editor di testo, meglio ancora se è un editor PHP. Io personalmente utilizzo Kate, l’editor di KDE, dopo aver ritoccato un po sfondo e colori della sintassi.
Come potete notare nell’illustrazione dobbiamo innanzitutto creare una pagina HTML. Dobbiamo indicare al parser che stiamo inserendo uno script php racchiudendolo nei tag <?php e ?>. Come tag di apertura possiamo usare anche semplicemente <?. Ogni istruzione termina con un punto e virgola. Il comando echo stampa una stringa nella pagina. Per vedere in funzione questo script basta salvare il file con nome helloworld.php e metterlo nella dir /var/www che è in genere la root directory di Apache, dopodiche potremo visualizzarla all’indirizzo http://localhost/helloworld.php

 

Attenzione a non fare confusione col concetto di server side, per esempio il comando: echo “Mi chiamo” . $nome; stamperà “Mi chiamo Mario”, se il contenuto della variabile nome è Mario, però il comando echo “<br><br>” non stampa la stringa “<br><br>” ma due righe vuote, questo perchè tramite PHP vengono generate pagine HTML dinamicamente, quindi il php scrive codice HTML che viene poi intergapretato dal browser. Se volessimo invece stampare la stringa “<br>” dovremmo usare il comando echo htmlentities(“<br>”). La funzione htmlentities converte ogni carattere in un’entità HTML. Il codice PHP è interpretato dal server, quindi a differenza di Javascript non troveremo nessuna traccia di PHP nel sorgente della pagina web. Se eseguiamo questo script nel browser e andiamo a visualizzare il sorgente non troveremo nessun tag php ma al suo posto il risultato che esso ha generato, cioè “Hello World”.

Pubblicato in Guide, Internet, Linux, Php, Tutorial, Ubuntu, Webmaster | Nessun Commento »