SQL – Integrità referenziale

Con l’avvento dell’integrità referenziale nello standard SQL, alcuni controlli, come la verifica dell’esistenza di un Dipartimento con lo stesso cod_dipart per un Impiegato appena inserito viene delegata al DBMS.

Per un aggiornamento corretto ed efficiente dei dati nel database questi devono essere strutturati in una maniera particolare, detta forma normalizzata.

Dobbiamo tener conto che oltre la prima, la seconda e la terza forma normale esite anche la quarta e la quinta forma normale.

Supponiamo di avere la seguente struttura dati:

Dati di progetto

ed è non normalizzata.

I FORMA NORMALE

Il primo passo è quello di eliminare i gruppi ripetitivi per arrivare alla prima forma normale (1NF o FNF).

1NF

La teoria relazionale non consente che gruppi ripetitivi di colonne siano presenti nella stessa tabella. I dettagli del progetto non possono includere gruppi relativi di colonne che descrivono i compiti degli impiegati che lavorano sul progetto. Alcuni progetti prevedono un solo compito per impiegato, altri possono averne di più.

Per mantenete intatta l’originale relazione implicita tra progetto e compito, il cod_progetto è duplicato e utilizzato come colonna della chiave della tabella Compito.

Il processo viene ripetuto per altri gruppi ripetitivi in ogni tabella, passando dall’ordine più elevato a quello più basso e duplicando le chiavi successivamente ai livelli più bassi.

2 FORMA NORMALE

Il passo 2 consiste nella rimozione delle dipendenze delle chiavi parziali per arrivare alla seconda forma normale.

2NF

Se troviamo una o più colonne dipendenti soltanto da una parte della chiave composita, allora dovremo scindere di nuovo la tabella.

Notare che la tabella DETTAGLI_IMP include dei dati ripetitivi sulle precedenti funzioni di un impiegato. Ciò implica che questa tabella non è nella prima forma normale; pertanto dobbiamo scindere le colonne in CURRICULUM.

Terza forma normale

Il passo 3 consiste nella rimozione delle colonne transitivamente dipendenti.

Questo tipo di dipendenza si verifica quando le colonne di una tabella non descrivono l’oggetto rappresentato dalla tabella stessa, ma qualcos’altro identificato da una colonna che non è parte della chiave della tabella, per esempio le colonne della tabella Impiegato che descrivono le caratteristiche del dipartimento o i progetti che descrivono i dipartimenti per i quali sono stati programmati.

3NF

Pubblicato in Senza categoria | Lascia un commento

PHP – Interazione con l’utente: i moduli

Form

Come si nota il tag Form è all’interno del tag body dell’html.

Se si imposta method=”get”, tutte le variabili ed il loro contenuto vengono inviati ad action (lo script php, asp o cgi che si è impostato) tramite una Querystring.

Ad esempio, all’invio del form il browser sarà indirizzato ad un URL del tipo :

script.php?nome=Domenico&cognome=Nappo&eta=24

Tutto ciò che segue il carattere ? viene detto Querystring e consiste in una serie di coppie
nome-valore.

Il metodo post invece, fa sì che le variabili vengano inviate allo script come un flusso separato e non appaiono nella barra di indirizzi del browser. Inoltre, con il metodo get c’è una limitazione per quanto riguarda la quantità di informazioni da poter inviare. Con il metodo post tale limitazione non esiste.

Input

definisce gli elementi con cui l’utente può interagire ed immettere il suo input.
La sintassi è la seguente :

Tale tag è inserito all’interno del tag Form.

Può assumere vari type:

typeDescrizione
textCampo di teso
passwordCampo di testo per password
radiopulsanti di scelta
checkboxcaselle di scelta
hiddencampo nascosto non visualizzato ma invato
submitpulsante per l’invio delle informazioni
resetpulsante per resettare il modulo

Per ognuno ne faccio la sintassi e l’output:

Voglio far notare come sono ad esclusione i due radio button in quanto hanno lo stesso nome.



<select>

Eccone subito la sintassi ed il suo esempio:

In questo caso si possono fare selezioni multiple, size 4 dice di mostrare 4 opzioni le altre con una barra di scorrimento laterale. I valori si salvano in un vettore. Multiple nel senso che si possono fare più scelte usando il TAB.


In questo caso abbiamo una scelta singola ma con la possibilità di apertura successiva di un menù a tendina.

<TEXTAREA>


Allego il codice html completo con gli oggetti precedenti.

Ecco il codice php che utilizza i dati passati dal sorgente modulo.htm

Da notare alcune cose come la gestione del vettore come bisogna passare il parametro al comando print il $_POST

Pubblicato in Senza categoria | Lascia un commento

PHP – Le funzioni

Per chi già consce le funzioni nei vari tipi di programmazione il php non fa che riprendere gli stessi concetti, passaggio per valore o per riferimento. Visibilità di una variabile e così via.

Qui farò solo un ripasso per comprendere la sintassi caratterizzante le funzioni in php.

Nulla di nuovo sotto il sole, oppure far eseguire la funzione che ritorni un valore:

Ho usato un passaggio per valore.

Ma la cosa più bella di usare le funzioni è quella di poter creare un file esterno all’interno del quale salvo la mia funzione e poi inglobarla nel codice. Qui ne do un esempio:


il file somma.php è così definito:

come si nota anche il file somma.php ha i delimitatore di codice php!

Veramente molto bella tale possibilità esattamente come in C++ in cui si possono inglobare pezzi di codice scritti da altri.

Operare in tale maniera permetta ad un gruppo di programmatori di creare applicazioni complesse lavorado in parallelo su tante funzioni per poi inglobarle nel programma principale.

Pubblicato in Senza categoria | Lascia un commento

PHP – Creazione ambiente MYSQL – MySQL Workbench

Adesso cercherò di impostare e descrivere l’ambiente per il database MySQL e come si usa MySQL Workbench.

Per installare MySql sul tuo computer con sitema operativo windows, scarica il file di installazione che trovi sul sito ufficiale di MySql a questo indirizzo

installando il pacchetto selezionato chiederà nelle fasi successive quale software effettivamente installare.

Questa è la versione open source del database che per la maggior parte degli scopi andrà benissimo, ti consiglio di scaricare l’installer da 1,6 M perché ti permette di scegliere i vari moduli da installare. La versione a 64 bit non esiste per cui scarica tranquillamente quella a 32 bit. Una volta avviato l’installer, ti apparirà una finestra come questa, in cui dovrai selezionare che tipo di installazione preferisci. Io ti consiglio di selezionare quella di default.

Al termine dell’installazione sull’icona delle applicazione ne compare un’altra, selezionarla:

A questo punto selezionarla e comparirà:



selezionare Launch MySQL Installer.

Selezionare Add.

Aggiungere MySQL Server 8.0 e portarlo nello spazio a destra, poi selezionare MySQL Workbench e portarlo a destra. Al termine dell’installazione si chiederà la password di root del database per potervi accedere

Impostazione php.ini

Per poter utilizzare il database MySql con PHP bisogna individuare la linea extension=mysqli e decommentarla eliminando il punto e virgola.

ambiente MySQL Workbench

Ecco come si presenta dopo aver dato login e password di root.

Prima di iniziare si può creare uno schema o un database dall’interfaccia oppure mediante comandi php nativi. Sotto la voce server vi è la voce users e privileges usarla per creare un nuovo utente e dopo averne aggiunto uno cliccando su Add Account, si possono dare i privilegi su un opportuno database.

Pubblicato in Senza categoria | Lascia un commento

PHP – Lavorare con i files

Se si vuole lavorare con applicazioni professionali, l’accesso in lettura e scrittura a file sarà quasi inevitabile.

PHP mette a disposizione due funzioni per includere del codice in altri file, quali una libreria di funzioni, una serie di definizioni di variabili, del codice HMTL che può fungere da header o da footer delle pagine etc. etc.

Ad esempio, queste semplici righe di codice includono nel file php tutte le istruzioni html per la normale pagina html.

A questo punto chiarisco un concetto che fino a qui era vago: come devono essere salvate le pagine scritte in php? E’ buona abitudine tenere separato il codice php con il codice html. Poi nel codice php includo con il seguente comando il codice html.

Questo codice mostra come è possibile includere del codice html e lasciare il codice php “pulito”, senza contaminarlo con del codice html. In questo modo, i designers ed i redattori di contenuti possono dedicarsi a scrivere le pagine html, senza dover modificare gli script php.

Questo esempio verifica l’esistenza di un file e tutte le sue caratteristiche: data di creazione, se è modificabile o meno, dimensione e l’ultima modifica.

Da notare che le funzioni filectime() e filemtime() restituiscono le date in formato TIMESTAMP di Unix.

Questo è l’output del precedente comando:

Lettura e scrittura di un file

fgets()

La funzione fgets() legge un file riga per riga

La funzione fopen() permette di aprire un file in tre diverse modalità : lettura (r), scrittura (w) e append (a), (per scrivere in fondo al file, aggiungendo nuovi dati).

bisogna stare attenti che la variabile text deve essere prima inizializzata.

fread()

Legge il file ma a righe invece che tutto in blocco

in questo caso legge per riga ma comunque poi in fase di visualizzazione tutto il file viene letto.

file_get_contents()

Sicuramente il metodo più veloce per leggere un file è il seguente. Ricordiamoci che php non nasce per leggere i file ma questi comandi servono per leggere piccoli file.

In questo caso ogni elemento del vettore è una riga del file.

Non esiste il metodo migliore o peggiore alla fine basta conoscere un metodo per leggere un file.

fwrite()

Si deve introdurre la funzione flock(), a cui bisogna ricorrere ogni volta che la scrittura di un file si può verificare in multiutenza. In pratica, lo scopo di questa funzione è bloccare il file ad un singolo utente, in modo che gli altri utenti che tentano di scrivere nel file trovano la risorsa occupata, aspettando che venga rilasciata per poter poi operare.
Sintassi:
flock(file_pointer,x)
dove x può essere :
1 Condiviso (tutti possono leggere ma nessuno può scrivervi)
2 Esclusivo (nessuno può leggere o scrivere, tranne chi ha ottenuto il privilegio)
3 Rilascio (Rilascio del file)

Copia di un file

Eccone un esempio:

Notate come avviene la chiamata ad fputs(). Come secondo parametro, cioè come dati da
scrivere nel file DOLLAROdest, si sfrutta ciò che ritorna la funzione fread operante sul file DOLLAROsrc.

Pubblicato in Senza categoria | Lascia un commento

PHP – Le espressioni regolari – regular expressions

Le regular expressions (espressioni regolari) servono per descrivere dei modelli di stringa. E’ possibile verificare, ad esempio, se un codice fiscale o un indirizzo email sono stati inseriti correttamente.

Un’espressione regolare è una stringa, definita pattern, che contiene al suo interno una serie di simboli attraverso i quali è possibile identificare gruppi di stringhe.

Con il rilascio della versione 5.3 di PHP le funzioni ereg per le espressioni regolari POSIX sono state dichiarate deprecate e verranno rimosse dalla release 6 del linguaggio; utilizzarle non è quindi più una buona pratica, chi desidera impiegare un’alternativa potrà farlo grazie alle funzioni PCRE.

Un’applicazione immediata è quella di controllare i caratteri inseriti in una form che poi verrà usata per fare una query in un database. Il controllo della lunghezza e del tipo di caratteri immessi è fondamentale affinché la query successiva possa aver esito positivo.

Questo controllo è alla base delle pagine dinamiche.

Eccone un esempio:

preg_match()

controllo che lo username sia corretto ossia che contenga solo caratteri minuscoli e lettere, inoltre che abbia lunghezza minima 3 e massima 15.

Inoltre il comando deve essere sempre compreso tra //

Un altro esempio è il seguente:

Che fornisce come output:

340

8652066

quindi estrae il prefisso ed il numero di telefono. Si è usato il comando \d per identificare i numeri e \d* per prendere tutta la sequenza di numeri.

Proviamo solo a pensare quali controlli si devono fare in C++ per la coerenza del dato ed invece la potenza di tale comando.

Adesso unisco i due esempi precedenti supponendo di aver creato una form in cui ho richiesto il numero di telefono e devo controllare il campo e successivamente prendere il prefisso ed il numero di telefono:

Questa tabella mostra tutti i parametri che possono essere inseriti

Meta carattereDescrizione
\Carattere generico di escape
^Delimitatore di inizio della stringa
DOLLARODelimitatore di fine della stringa
.Definisce ogni carattere eccetto il carattere di invio
[Carattere di inizio della definizione di classe
]Carattere di fine della definizione di classe
|Inizio di un ramo alternativo
(Inizio subpattern
)Fine subpattern
?Indica 0 o 1 occorrenze
*0 o più occorrenze
+1 o più occorrenze
{Inizio intervallo minimo/massimo di occorrenze
}Fine intervallo minimo/massimo di occorrenze
Indica un range di caratteri all’interno di parentesi []
.Indica un singolo carattere
\sUn carattere di spaziatura (space, tab, newline)
\STutto eccetto un carattere di spaziatura
\dUn carattere numerico (0-9)
\DTutto eccetto un carattere numerico
\wUna lettera (a-z, A-Z, 0-9, _)
\WTutto eccetto una lettera
[aeiou]Uno dei caratteri compresi nella parentesi
[^aeiou]Tutto eccetto i caratteri compresi nella parentesi
(foo|bar|baz)Una delle alternative tra parentesi

preg_match_all()

E’ un comando simile al precedente solo che estrae tutte le occorrenze presente nel criterio di ricerca, ad esempio il seguente estratto di codice:

che cerca i codici numerici all’interno della stringa e fornisce come output i tre numeri.

preg_replace()

Si può sostituire un’espressione con un’altra.

ParametroDescrizione
DOLLAROpatternPattern di ricerca.
DOLLAROreplacementLa stringa che verrà sostituita.
DOLLAROsubjectStringa da sostituire.
DOLLAROlimitLimite delle sostituzioni da effettuare (opzionale).

in questo esempio sostituisco i numeri di telefono con degli asterischi, si pensi ad esempio ad una password immessa che deve essere sostituita con degli asterischi o viceversa.

Pubblicato in Senza categoria | Lascia un commento

PHP – Manipolare le stringhe

printf

Il risultato nel browser sarà semplicemente la stampa del numero in formato decimale.

Al posto della d posso inserire le seguenti codifiche:

TipoFormato
bbinario
cascii
ffloating point
oottale
sstringa
xesadecimale minuscolo
Xesadecimale maiuscolo

Se si vogliono visualizzare solo due cifre dopo la virgola si usa la seguente sintassi:

printf può contenere le seguenti specifiche:

Nome specificaDescrizioneEsempio
Specifica di tipoDetermina il formato ed il tipo
dei dati da visualizzare.
d
Specifica di precisioneNumero di cifre decimali a cui
arrotondare un numero non
intero
.2
Specifica di riempimentoDetermina caratteri di
riempimento e larghezza
minima dell’output
04d
Specifica di larghezza di
campo
Larghezza del campo in cui si
vuole visualizzare l’output
20

Specifica di riempimento

con questo comando ho come output 000250

se invece voglio un carattere diverso devo mettere un apice prima del carattere di riempimento.


sprintf()

questo comando copia il comando print in una variabile:

strlen()

lunghezza di una stringa

una sua tipica applicazione è il controllo della lunghezza di una stringa di caratteri che poi deve essere utilizzata ad esempio per una query sul DB.

substr()

Tale comando estrae una sottostringa di caratteri.

l’output sarà:

ting
tin
ing

quindi la stringa viene considerata come un vettore che parte dalla posizione 0. Il primo comando deve partire dall’indice alla posizione 3 fino alla fine. Il secondo sempre dalla stessa pozione ma solo 3 caratteri. Il terzo parte dalla fine della parola per tre posizioni.

N.B. Per andare a capo ho usato ‘<br>’

strstr()

Ricerca una sottostringa all’interno di una stringa. Il tipico caso è quello della richiesta di un’email, essa sarà valida solo se sarà presente il carattere @.

strstr() è case-sensitive

stristr(), è case-insensitive.

strtoupper()

Tutto maiuscolo

strtolower()

Tutto minuscolo

ucwords()

Solo la prima lettera delle parole componenti una frase sono maiuscole

trim()

Rimuove gli spazi all’inizio e alla fine della stringa

ltrim()

Rimuove gli spazi soltanto all’inizio della stringa

rtrim() o chop()

Rimuove gli spazi alla fine

str_replace()

effettua una sostituzione di testo facendo al ricerca di quel testo ad esempio:

in pratica ricerca la parola $vowels nella frase “Hello word of PHP” e la sostituisce con “” ossia in pratica vengono eliminate le vocali.

Pubblicato in Senza categoria | Lascia un commento

PHP – Array

Gli array o vettori necessitano di un capitolo a parte proprio per il loro continuo utilizzo all’interno della programmazione; inoltre il php fornisce degli strumenti quali

  • la ricerca di un elemento,
  • l’ordinamento crescente o decrescente,
  • la grandezza di un array
  • array associativi che permettono di indicizzare un array mediante non più un indice ma un frase che caratterizza il contenuto dell’array
  • il passaggio da stringa a vettore
  • inserimento di un elemento di un vettore con un semplice comando

Esempio di inserimento degli elementi di un vettore confrontando la tecnica tradizionale con quella suggerita da php

Tecnica tradizionale (utilizzo spesso echo nl2br per andare a capo)

Creazione con []

Tecnica nuova, si noti come non viene usato il comando array ma direttamente [] con l’inserimento del nuovo elemento del vettore


Utilizzo di explode()

Si può anche trasformare una stringa in un vettore con il comando explode()

Si nota che ho definito una variabile DOLLAROnomi che non è altro che una stringa. Il comando explode suddivide la stringa cercando il carattere separatore, che in questo caso è una stringa, per creare il vettore.

Array associativi

Invece che accedere con un indice numerico si accede con un’etichetta e si associa l contenuto del vettore con => ossia uguale e maggiore:

si noti che ho utilizzato l’indice programmatore per stampare il contenuto del vettore con quel nome dell’indice.

Count()

conta il numero di elementi di un vettore

foreach()

Scorre un vettore finchè trova dei valori senza occuparsi dell’indice e senza creare un indice per scorrerlo, molto pratico. Si noti come il valore del contenuto del vettore viene appoggiato su una variabile d’appoggio:

unset()

questo comando serve per cancellare un elemento del vettore che è presente in una particolare posizione (immaginiamo solo quanto può essere oneroso farlo in C++: si devono spostare tutti gli elementi per coprire il buco che si è creato e quindi ridimensionare i vettore)

Come si nota preferisco sempre prima vedere il vettore e poi usare il comando. SI noti pure come ho preferito usare invece del classico ciclo per la visualizzazione del vettore, quello di usare il comando foreach()

in_array(elemento,array)

Altro comando veramente molto utile è quello di cercare un elemento all’interno del vettore. Esso restituisce il valore vero o falso se l’elemento è presente o meno.

sort()

Ordina il vettore in modo crescente

rsort()

Ordina il vettore in modo decrescente

asort()

ordina il vettore associativo in modo crescente (dal più piccolo al più grande) per valore

ksort()

ordina il vettore associativo in modo crescente per chiave

Pubblicato in Senza categoria | Lascia un commento

PHP – IF -Switch – while – for

In PHP i costrutti if, switch, while, for seguono esattamente la sintassi del C++.

In questo programma se ne dà un esempio:

Pubblicato in Senza categoria | Lascia un commento

PHP – Gli operatori

Gli operatori sono gli stessi che vengono comunemente usati in C++


==Uguale a
!=Diverso da
>Maggiore di
> = Maggiore o uguale a
<Minore
<=Minore Uguale
&&and
||or

Pubblicato in Senza categoria | Lascia un commento