Fondamenti PHP5 – dipense del corso 2 Novembre 2008
Posted by gianfrasoft in PHP.Tags: corso, corso di PHP5, fondamenti, PHP, PHP5, programmazione, sicurezza
add a comment
Pubblico, a beneficio dei partecipanti, le dispense del corso di 24 ore su PHP5 tenuto a Roma presso Lottomatica S.p.A.
Nell’ambito del corso vengono trattati il paradigma di programmazione web, le strutture principali del linguaggio PHP5, la programmazione ad oggetti. Inoltre, si fa riferimento costante ai problemi legati alla sicurezza ed allo stile di programmazione che previene le principali modalità di attacco ai siti realizzati in PHP: SQL injection, session fixation, ecc.
Personalizzare l’ordinamento di una query in SQL Server 2005 portando, in cima al risultato, il record col campo di ricerca uguale alla chiave. 16 Maggio 2008
Posted by gianfrasoft in Transact SQL.Tags: alla, campo di ricerca, chiave., cima, ordinamento, Personalizzare, query, risultato, SQL Server 2005, uguale
add a comment
Nell’ambito di una query di ricerca che, ad esempio, utilizza l’operatore LIKE vogliamo ottenere un risultato ordinato: per far ciò facciamo uso dell’operatore ORDER BY in questo modo:
SELECT * FROM Tabella WHERE Tabella.Campo1 LIKE '%CHIAVE%' ORDER BY Tabella.Campo1
Se talora la chiave coincide esattamente col campo sul quale stiamo effettuando la ricerca, ovvero si verifica che in almeno un record Tabella.Campo1 = ‘CHIAVE’, possiamo ottenere che il record che la contiene venga posizionato in testa alla query di ricerca sfruttando la clausaola ORDER BY CASE di SQL Server 2005 in questo modo:
Una stored procedure per la duplicazione delle righe di una tabella generica 25 Aprile 2008
Posted by gianfrasoft in Transact SQL.Tags: COLUMNS, duplicazione, generica, INFORMATION_SCHEMA, righe, tabella, Una stored procedure per la duplicazione delle righe di
add a comment
Duplicare la riga di una tabella è una operazione sempre possibile ma spesso non immediata: la tabella in questione può essere caratterizzata dalla presenza di una chiave univoca che coinvolga uno o più campi, da campi NOT NULL che vanno valorizzati talora con i propri valori di default, ecc…
Lo script INSERT che effettua l’inserimento di una riga duplicata deve, nella maggior parte dei casi, specificare la lista dei campi da caricare nel nuovo record e questo perché lo script non deve definire valori duplicati per i campi chiave, se richiesto non deve sovrascrivere i valori di default, non deve definire valori per i campi auto-incrementali e quant’altro.
Consideriamo il caso, piuttosto diffuso, di tabelle caratterizzate da una chiave primaria composta da un campo auto-incrementale, e realizziamo una procedura che:
- sia in grado di semplificare l’operazione di duplicazione della riga di una tabella, agendo indipendentemente dalla struttura della stessa;
- restituisca l’indice univoco del campo chiave del nuovo record;
- non valorizzi i campi che hanno valori di default;
- agisca su una qualsiasi tabella dove sia presente una chiave primaria composta da un campo auto-incrementale.
Generare un recordset contenente tutti gli elementi di un intervallo in SQL Server 2005 13 Aprile 2008
Posted by gianfrasoft in Transact SQL.Tags: Common Table Expression, CTE, date, elementi, Generare un recordset contenente, interval, intervallo, SQL Server 2005
add a comment
Talvolta ci si trova a dover incrociare i dati di una query con le date di uno specifico intervallo.
Ad esempio, consideriamo una tabella che contiene le vendite effettuate da un’azienda nell’arco di un anno: vogliamo rappresentare in un recordset gli importi totali delle vendite di ogni mese. La questione si risolve con un semplice raggruppamento dati, ammenocché non si voglia riportare un importo nullo anche in corrispondenza dei mesi in cui non sono state effettuate vendite.
La soluzione ideale è quella di effettuare il raggruppamento dopo avere incrociato i dati delle vendite con un recordset contenente una riga per ciascuna data di inizio o di fine mese. Questo è possibile generando una tabella temporanea e popolandola, prima di effettuare la query sulle vendite.
Un’alternativa che agisca on the fly è quella basata sulle CTE ovvero Common Table Expression: le CTE consentono di effettuare query SQL di tipo ricorsivo, che è proprio quanto a noi serve.
Realizzazione di un servizio di prenotazione risorse on line in SQL 24 Febbraio 2008
Posted by gianfrasoft in Transact SQL.Tags: prenotazione, risorse, servizio, sql, sql server, transact
add a comment
Introduzione
Questo documento e tutto il lavoro che ne è scaturito, hanno come obiettivo la progettazione e l’implementazione di un sistema informatico che risponda alle richieste contenute nelle linee guida riportate di seguito: si è proceduto alla progettazione di una base dati per il supporto di un sistema informatico che realizzi un servizio web per la gestione di un insieme condiviso di risorse hardware per un dipartimento. Questo sistema informativo consente la prenotazione delle risorse da parte di utenti registrati, oltre a fornire come servizio la possibilità di verificare la disponibilità di una risorsa in uno specifico giorno ed in uno specifico orario.
Sono state così implementate tutte le funzionalità di:
- inserimento di una risorsa
- registrazione degli utenti
- consultazione delle risorse disponibili
- prenotazione delle risorse
- cancellazione di una prenotazione
- memorizzazione di dati relativi a utenti, risorse e prenotazioni
Strategia di progetto
Già nell’ambito delle linee guida si possono identificare le entità principali attorno alle quali il sistema informativo deve svilupparsi, e cioè: l’utente, la risorsa e la prenotazione.
Al fine di rendere il sistema quanto più possibile aperto e funzionale, si è ritenuto opportuno introdurre alcune ulteriori specifiche riguardanti le suddette entità:
- gli utenti del sistema si dividono in due categorie: amministratori e utenti semplici; ai primi è dato potere di accedere ad ogni parte del sistema mentre ai secondi alcune aree di lavoro sono interdette;
- ad ogni risorsa sono associati orari di disponibilità, cioè intervalli temporali all’esterno dei quali la risorsa non può mai essere prenotata;
- alla prenotazione delle risorse da parte di utenti generici o di amministratori viene fornito un sistema di visualizzazione grafica degli intervalli temporali di disponibilità della risorsa che rende superfluo qualsiasi ulteriore accorgimento;
- viene implementato a scopo didattico un semplice metodo di storicizzazione delle informazioni relativamente all’entità prenotazione che consente di aggirare alcuni problemi relativi all’aggiornamento delle risorse.
Mini Master Mind 17 Febbraio 2008
Posted by gianfrasoft in My Software.add a comment

Classico gioco del Master Mind in cui è consentito all’utente sia di giocare che di osservare il programma che individua una combinazione elaborata dall’utente stesso. Ralizzato in maniera da riprodurrela grafica del classico Mini Master Mind in commercio in Italia negli anni ‘80.
One Million Sudoku 16 Febbraio 2008
Posted by gianfrasoft in My Software.Tags: One Million Sudoku generate solve genera risolvi free
add a comment

One Million Sudoku è un programma completamente free orientato a quanti scrivono sudoku per mestiere. Esso consente di risolvere e quindi di verificare la risolvibilità di sudoku introdotti dall’utente, individuando quelli che non risolvibili e quelli che possiedono più di una soluzione; su richiesta dell’utente ne genera di propri.
Sorry… 13 Febbraio 2008
Posted by gianfrasoft in Varie.add a comment
A quanti accedono al mio blog per la prima volta già oggi, mi scuso per la scarsità di informazioni: è il blog è un work i progress e non ha raggiunto ancora la forma che io intendo dargli.
Gli articoli verranno presto aggiornati e migliorati, nuovi verranno aggiunti. Vi aticipo, inoltre, l’arrivo un programma assolutamente originale (freeware) per la gestione dello spam, ed i sorgenti di ogni articolo da me pubblicato.
Sono graditi commenti aquanto ho pubblicato finora, tutte le vostre segnalazioni verranno prese da me in seria considerazione.
Grazie…
Gianfranco Fedele.
PHP – Ispezione delle strutture complesse (array e oggetti) 9 Febbraio 2008
Posted by gianfrasoft in PHP.Tags: array, ispezione, PHP, PHP array ispezione di strutture complesse XML, strutture complesse, XML
add a comment
Consideriamo di dover accedere ad un array associativo di cui non si conosce la reale struttura. L’array può contenere, in ciascuna locazione, informazioni di qualsiasi tipo: esso può contenere contemporaneamente stringhe, interi o anche altri array associativi.
In PHP è facile accedere al contenuto di un array associativo anche se non se ne conosce la struttura interna. Per far ciò basta effettuare un semplice ciclo “foreach” come descritto di seguito:
foreach($array as $name => $value)
dove la variabile $array contiene l’array che vogliamo esaminare e le variabili $name e $value conterranno, ad ogni ciclo, il nome ed il valore di ciascun elemento dell’array.
Ad ogni ciclo, per stabilire se l’elemento dell’array associativo che stiamo esaminando è a sua volta un array, basta far riferimento alla funzione is_array del PHP: in caso positivo si può richiamare la stessa funzione ricorsivamente perché esamini il contenuto del nuovo array.
Generiamo, quindi, una struttura XML che in corrispondenza di ogni array produce un nodo XML che indicheremo con <bag> ed in corrispondenza di ciascun elemento semplice produca un nodo XML <item> contenente tra gli attributi il nome ed il tipo dello stesso:
(continua...)
PHP – Passaggio di parametri organizzati gerarchicamente 9 Febbraio 2008
Posted by gianfrasoft in PHP.Tags: dinamici, input, parametri, PHP, PHP input parametri dinamici array_map_deep
add a comment
Consideriamo un form che chiede all’utente di introdurre i propri dati anagrafici allo scopo di organizzarli in una struttura del tipo:
- dati_personali
- nominativo
- età
- indirizzo
- via
- civico
- città
E’ facile individuare in questa struttura dati l’albero delle informazioni che pone le proprie radici nel nodo dati_personali e che realizza tre livelli di profondità. Questo albero contiene in totale 7 nodi organizzati in 3 livelli.
In questo articolo esamineremo come sia possibile costruire una pagina dinamica in PHP che sia in grado di raccogliere le informazioni introdotte dall’utente nell’ambito di un form, e di elaborarle nel pieno rispetto della loro struttura gerarchica, qualunque sia in form. Nella fattispecie, la pagina dinamica recupererà le informazioni introdotte dall’utente riorganizzandole nell’ambito una struttura ricorsiva composta da array associativi: ad ogni livello dell’albero verrà associato un array ottenendo, nel caso descritto sopra, tre array:
il primo array conterrà tre informazioni: nominativo di tipo stringa, età di tipo intero ed un array associativo relativo all’indirizzo; l’array dell’indirizzo conterrà a sua volta tre informazioni: via di tipo stringa, civico di tipo intero e città anch’esso di tipo stringa.
Per prima cosa va fissata una rappresentazione delle informazioni nell’ambito del form HTML che dia modi di stabilire il tipo e la gerarchia dei dati introdotti dall’utente, ciò perché possano essere correttamente processati dalla pagina PHP. Un modo per effettuare questa rappresentazione è quello di strutturare i nomi delle etichette di input in modo che contengano sia il nome del parametro di input che il tipo dello stesso separati da un carattere speciale, ad esempio:
string%nominativo
inoltre, per rendere possibile la gerarchia delle informazioni, verranno introdotti nei nomi delle etichette <input> una coppia di parentesi quadre per ogni livello di annidamento dell’informazione associando al livello il particolare tipo array. Nel caso delle informazioni anagrafiche descritte nella pagina precedente avremo infatti:
dati_personali[string%nominativo]
dati_personali[int%eta]
dati_personali[array%indirizzo][string%via]
dati_personali[array%indirizzo][int%civico]
dati_personali[array%indirizzo][string%citta]
Dalle informazioni riportate sopra possiamo dedurre che:
- i tipi string, int ed array non devono necessariamente corrispondere ai tipi del PHP; essi rappresentano semplicemente un protocollo per la trasmissione di informazioni sul tipo dei dati e servono per un controllo dell’integrità da parte della pagina PHP;
- ai dati che rappresentano dei “contenitori” di informazioni veine associato il tipo array;
- le parentesi quadre aiutano a definire i differenti livelli di annidamento.
Ecco quindi come compare il testo della form HTML: