Il sito per imparare gratuitamente a fare pagine Web

Corso PHP














Questa guida non è stampabile per volontà del suo stesso autore Claudio Curci.



Guida PHP scritta da Claudio Curci - Aggiornamenti di Max Kiusso

lezione 6: MySql (parte seconda)

Sommario lezione

. un tool grafico (finalmente!)
. un primo approccio visuale: phpMyAdmin
. Mysql Control Center



Un tool grafico (finalmente!)

La scorsa lezione ha suscitato un vero e proprio "caso" nel forum. L'utilizzo da riga di comando di un database è risultata un pò indigesta, a giudicare dalle discussioni.
Ringrazio tutti per i post pubblicati, come sapete pubblico questa guida gratuitamente e la vera soddisfazione è il vostro interesse. Grazie a (cito a memoria, sono off-line mentre scrivo) Silfro, Lillo (sospiro di sollievo: finalmente ti funziona Easy vero??), Jumper, le "php-ine" Claudia ed Elena (tra un pò odierai Visual Basic...) e sopratutto ad Andrea che ha costruito questa community cosi serena :)
Torniamo alla guida.

In effetti, come accennavo nella prefazione a questo corso, il mondo web è particolare. Spesso non esiste una figura distinta, il "programmatore" e il "grafico". Il più delle volte esiste il "web designer" (e meno male che stanno scomparendo termini come "web surfer" o "web developer"!), persona che svolge entrambe le mansioni. Un web designer tipo sa usare editor grafici (DreamVeawer o FrontPage) ma anche scaricare e personalizzare script e codici di programmazione da internet.
Va da sè che una figura di questo tipo, decisamente efficace e produttiva per le aziende, non utilizza strumenti "hard" come la riga di comando o gli script di Adobe Photoshop.

Se ho deciso di utilizzare la riga di comando, è perchè si tratta di un approccio efficace, esplicativo.
Credo che tutti noi siamo stati avviati al mondo dei database da Microsoft Access: un doppio click ed ecco a disposizione motore, query, ambiente di sviluppo Visual Basic e perfino pagine pronte per la stampa (report)..
Negli altri database non è cosi, anzi con un doppio click non si ottiene proprio nulla! Access è un db facile da utilizzare, pensato però per un ambiente casalingo o per la piccola azienda. Su internet occorre gestire diverse connessioni, magari centinaia al minuto.. servono ben altri prodotti.

Per questo ho voluto utilizzare un approccio "hard": la riga di comando è quanto di più genuino per comunicare con un normale database. Utilizzeremo in questa lezione dei tool grafici ma non fatevi ingannare: non fanno altro che inviare dei comandi come quelli illustrati in DOS nella precedente lezione. Un pò come quando realizzate un sito con DreamVeawer: è facile perchè è tutto visuale, ma alla fine produce lo stesso codice che qualcunaltro ottiene con notepad (o anche con Dos, digitando "edit" sul prompt.. è anche meglio di notepad perchè almeno conta le righe!).
Quasi sempre però chi usa DreamVeawer ha un approccio (senza offesa) "viziato", dipendente dal tool di sviluppo. Non è insomma "padrone" del codice, se la tabella layout "spana" o si perde un </tr> non sa dove correre ai ripari.. Chi programma siti con notepad ha un controllo totale sul codice, è capace di spostare un elemento "pixel per pixel".
"L'HTML è nulla senza controllo", parafrasando una nota pubblicità.

Con i database è lo stesso discorso. Usate pure i tool grafici per prendere familiarità, ma ogni tanto tornate alla famosa "lezione 5": presto acquisirete padronanza dell'interfaccia e potrete anche farne a meno.


Un primo approccio visuale: phpMyAdmin

Tra poco vedremo dei tool grafici che di certo non vi faranno rimpiangere phpMyAdmin. Tuttavia è bene parlare di questo strumento perchè viene utilizzato da molti utenti, è open source, non va installato. In soldoni: anche se presenta diversi limiti, è cosi diffuso che è bene conoscerlo.

Avviate EasyPhp/XAMPP. Aprendo il localhost via browser, in alcune versioni dovreste già trovare un pulsante "phpMyAdmin". Tuttavia, per evitare inutili problemi, scegliete una strada più sicura. Adesso aprite il browser puntando all'indirizzo:

http://localhost/mysql/index.php

Dovreste avere un output html come questo:



Grazie a questa interfaccia html/php, possiamo gestire tutto il nostro db: creare nuove tabelle, modificare record, estrarre dati, creare un nuovo db (almeno sul localhost) e connetterci in remoto ad altri host sorgenti.
Praticamente, quello che potevamo ottenere con la riga di comando, in modo più semplice e familiare.

A sinistra trovate un menù a tendina dalla quale scegliere un database. Di default, phpMyAdmin effettua una connessione sul localhost. Con l'installazione di default di EasyPhp dovreste avere già due database sul localhost, "test" e "mysql". Se avete eseguito le istruzioni della lezione precedente, dovreste avere anche il db "corso_php". A fianco del nome del db trovate il numero di tabelle che lo compongono:



Se nella scorsa lezione non siete riusciti a creare un db "corso_php" da riga di comando sul prompt DOS, potete crearne uno adesso: scrivete direttamente il nome nella casella "Crea nuovo database" e cliccate su "Crea".

Ma cos'è phpMyAdmin? Non confondete phpMyAdmin con MySql o con PHP. phpMyAdmin è un insieme di script PHP che permettono di gestire un database. Se studiate i codici sorgente del programma (li trovate nella cartella phpmyadmin dentro la directory dove avete installato EasyPHP), non troverete altro che pagine php. Essendo un tool open source, chi lo ha creato ha pensato bene di renderlo disponibile a tutti. Un pacchetto come EasyPhp non poteva mancare di includere un tool del genere, che permette di interagire completamente con un database complesso come MySql.
Quindi non pensate a phpMyAdmin come a qualcosa di misterioso che viene lanciato chissà quando dal sistema operativo, vedetelo semplicemente come un sito internet composto di codice php che permette di amministrare un database.

Abbiamo utilizzato la riga di comando per creare un db; faremo uso di phpMyAdmin per creare delle tabelle.
Selezioniamo dal menù a tendina "home" il db "corso_php" (uno stesso host può avere più db, cosi come un hard disk può contenere più file .mdb prodotti da Access).

Se avete completato la scorsa lezione, avrete già una tabella "giocatori". Andiamo adesso a creare una tabella con l'elenco di tutte le squadre di calcio del campionato italiano 1989-90. Secondo i concetti appresi dai db relazionali, la nostra tabella dovrà essere composta da:

.un campo contenente il nome della squadra;

.un campo contenente la sua chiave ID (un contatore univoco numerico che permette di identificare un record, utilissimo per velocizzare le ricerche e per unire tra loro diverse tabelle con dati comuni);

.già che ci siamo, inseriamo anche un campo numerico di 4 cifre con la data di fondazione del club.

Il campo ID deve essere un numero che, automaticamente, viene incrementato di 1 unità all'inserimento di una nuova squadra. In questo modo abbiamo la certezza di inserire un valore univoco.

Il campo contenente il nome della squadra deve ovviamente essere una sequenza di caratteri, una "stringa" come si dice in gergo informatico.
Infine, il campo relativo all'anno di fondazione deve essere un valore numerico di 4 cifre (visto che nessuna squadra del nostro campionato è stata fondata nel medioevo, e, per quanto ambiziosi possiamo essere, non abbiamo interesse a creare un sistema che funzioni anche nel 10mila D.C. -5 cifre-).

Nella progettazione di una tabella, è importante scegliere il tipo di dato che ciascun campo dovrà contenere (numero, data, stringa ecc.) ma anche la dimensione. Una tabella occupa spazio, e riservare a dei campi che dovranno contenere poche lettere ciascuna (ad esempio un cognome) dei valori esagerati (magari una stringa di 255 caratteri) significa sprecare memoria e compromettere le prestazioni. Un pò come se compraste un autobus per andare al lavoro, con dentro voi ed un collega. Spreco di risorse, di benzina, di bollo, di assicurazione.

Sui database avremmo da parlarne fino a perderci, esulando dagli obiettivi di questo corso. Se volete approfondire l'argomento potete cercare materiale su internet, tenete conto che tra i vari database cambiano strutture, tool e metodi di accesso ma alcuni concetti (come i tipi di dato) sono molto simili.
Andiamo quindi a definire il tipo di dato per il nostro database:

id (campo contatore, univoco, chiave primaria);

nome_squadra (campo stringa, possiamo assumere che un nome di squadra non supererà i 50 caratteri);

anno_fondazione (vogliamo contenere solo l'anno di fondazione e non il classico .giorno/mese/anno., quindi possiamo utilizzare un normale campo numerico di 4 cifre senza ricorrere ad un campo data)

Abbiamo due stade per creare una nuova tabella da phpMyAdmin: inviare un'istruzione SQL (scrivendola su "esegui la query SQL sul database") o scrivendo il nome e il numero di campi su "Crea una nuova tabella", più sotto. Trovato le due strade?



Utilizziamo entrambi gli approcci, cosi prendiamo familiarità con il linguaggio SQL. Ovviamente mettetene in pratica uno (non potete creare due tabelle con lo stesso nome nello stesso db), se volete provarli entrambi create una tabella e poi cancellatela.

Primo approccio: visuale. Digitate "squadre" nella casella "nome:" sotto "Crea una nuova tabella nel database corso_php", e inserite il numero di campi desiderati (ovvero tre, nel nostro caso: id, nome_squadra e anno_fondazione).



Dopo aver cliccato su "ESEGUI", avete a disposizione una tabella nella quale decidere il nome del campo ed il tipo di dato associato. Per il campo ID segniamo un contatore chiave univoca, per il nome della squadra una stringa di 50 caratteri e per l'anno un numerico di 4 cifre. La tabella va compilata in questo modo:

campoTipoLunghezzaExtraprimariaindiceunica
idint11auto_incrementyes  
nome_squadrachar50    
anno_fondazionesmallint     

Abbiamo utilizzato 3 campi, ciascuno di un tipo diverso.
Il primo campo è un intero, "auto_increment" (come detto sopra, ha un valore numerico che viene incrementato automaticamente ogni volta che viene inserito un nuovo record).
"Nome_squadra" è invece una stringa che può contenere fino a 50 caratteri. Più che sufficienti per il nome di una squadra di calcio.

Infine, l'anno di fondazione è un numerico. Invece di ricorrere ad un int, abbiamo utilizzato uno smallint. Arabo vero? Illustriamo meglio con esempio pratici.
Ipotizziamo di dover acquistare un panino con prosciutto, straordinario matrimonio alimentare. Per quanto possa costare, non credo che (almeno che non siate cosi "giapponesi" -sorriso compreso- da comprarlo presso un venditore ambulante davanti la fontana di Trevi) possiate spendere più di 3 euro.

Volendo è possibile pagare il panino con un assegno, ma.. poco praticabile. Sconsigliato.
Trasferiamo il discorso in informatica: è un inutile spreco di risorse usare un "blocco degli assegni" (un campo che contiene valori -stringhe o numeri- di grande dimensioni, fino a milioni di miliardi) per un banale "anno di fondazione", che di sicuro contiene 4 cifre.

Per questo, esistono diversi tipi di campo: i TINYINT, che possono contenere numeri compresi tra 0 e 255 (pensate se doveste gestire i voti di una classe: in questo periodo di scarsa crescita demografica, sarebbe un'eccezione se aveste più di 30 alunni), gli SMALLINT (perfetti per gestire dati come gli anni..), i mediumint (arrivano fino a 16777251), gli INT (ancora più grandi) fino ad arrivare ai BIGINT (9223372036854775807...).
Ovviamente, più è grande il valore massimo da contenere, maggiore deve essere la "scatola", l'area di memoria riservata. Peggiore sarà la prestazione in fase di query.

Per questo, è necessario progettare bene il database e le tabella, tanto più quanto maggiore sarà la mole di dati da contenere.
Vedremo nelle lezioni successive altri tipi di dato (VARCHAR, BLOB, TIME ecc.), per ora accontentiamoci di questi. Per la gestione dell'anno di nascita delle squadre, ad esempio, MySQL offre un apposito tipo di dato, YEAR, che non è compatibile però con versioni precedenti la 3.22. Evitiamo inutili confusioni e andiamo tranquillamente avanti :)

Cliccando su "salva" creiamo la nostra tabella. PhpMyAdmin ci propone, nella pagina successiva, anche l'istruzione SQL di creazione tabella (quella che avevamo visto al termine della scorsa lezione). Un'istruzione SQL è un comando inviato ad un database. Tra i vari tipi di database esistono poche differenze "dialettiche" SQL. L'idea era quella di creare un linguaggio standard, ma la storia insegna che nell'informatica il concetto di "standard" è relativo.. In ogni caso tenete presente che i comandi sono quasi uguali almeno nelle funzioni base (creazione tabella, estrazione record, inserimento e cancellazione), per cui spendere del tempo nell'apprendimento di SQL è un buon investimento. Anche in questo caso vi rimando alle varie guide che trovate su internet, fermo restando che i concetti fondamentali di SQL saranno giocoforza trattati anche in questa guida.

Andiamo ad inserire un record nella tabella. Nel frame di sinistra adesso dovremmo avere anche l'ultima tabella creata, "squadre". Clicchiamo e poniamoci cosi sul pannello relativo. In alto troviamo un link, "Inserisci": seguiamolo per inserire un nuovo record.
PhpMyAdmin è un tool efficace ma limitato dall'ambiente html, per cui possiamo trovare alcuni difetti. Ad esempio, nella schermata di inserimento record, troviamo il campo "valore" compilabile anche per la chiave id: questo è un chiaro errore, visto che abbiamo dichiarato quel campo "auto_increment" e il motore MySql provvederà automaticamente ad associargli il contatore.

Sorvoliamo e andiamo direttamente a compilare il campo "nome_squadra", inserendo sotto la colonna "Valore" il nome di una società calcistica. In basso, vicino "anno_fondazione", scriviamo il valore relativo (possiamo anche inventarli, comunque se avete digitato "Napoli" scrivete 1926).

Per ora non date conto ai menù a tendina "funzione", si tratta di un argomento avanzato e lo tratteremo un'altra volta (anche perchè raramente utilizzato, giusto in fase di inserimento password).
Sotto trovate una comoda opzione: "Inserisci nuova riga E..", potete scegliere se dopo l'inserimento del record tornare al pannello di controllo oppure farvi riportare su questa stessa pagina in modo da inserire un'altro valore. Scegliamo la seconda ipotesi, cosi da inserire un'altra squadra.


ops.. sorry c'è un errore nell'immagine, l'ultimo campo come detto sopra è uno smallint mentre qui è un int. Provvederò a correggerlo, comunque usate lo smallint

Se volete, continuate ad esplorare phpMyAdmin senza paura (finchè siete su localhost in fase di test, al massimo potete cancellare l'intero database, nulla vi vieta di ricrearne un altro con lo stesso nome). Attenti però: nei database le operazioni non possono essere cancellate. In soldoni, se per sbaglio avete eliminato un record, non avete modo di recuperarlo, non esiste un "Modifica=>Annulla".




Mysql Control Center

PhpMyAdmin è un bel prodotto, certo più facile rispetto la riga di comando.
Restano però il limiti legati all'interfaccia html.
Se poi abbiamo a che fare con un database in remoto, diventa problematico con i tempi di connessione e risposta.

A proposito, potete configurare altri database in phpMyAdmin inserendo gli appositi parametri (forniti dal vostro provider) nel file:
phpmyadmin/config.inc.php

Come vedete, nella prima parte del file, trovate un array php contenente diverse voci. Vanno compilate con i dati del db (mano mano che ne aggiungete uno).
Se incontrate difficoltà nell'inserire un nuovo database in phpMyAdmin, possiamo parlarne nel forum. Vi raccomando di editare questo file esclusivamente con notepad, onde evitare impicci (codice inserito da altri editor, "a capo" non voluti ecc.).
Comunque preferisco sorvolare nella guida su questa parte perchè concludiamo la lezione con un altro tool, ancora più efficente e pratico di phpMyAdmin. Fino a poco fa era disponibile un bel programmino, MySqlFront. Peccato che adesso sia diventato a pagamento. In giro potreste trovare ancora la vecchia versione, ma è meglio puntare su altro per questo corso, cosi da utilizzare un tool comune.

Utilizziamo nientemeno che il tool ufficiale di mysql.com: mysql control center.
Andiamo su mysql.com e cerchiamo nell'area "products" il file (scorrete la pagina fino a "MySQL Control Center", cliccate sul link o sull'immagine).
Scegliamo nella nuova pagina "Download the latest version" e quindi su "Windows downloads": "pick a mirror" (lo so, potrei darvi direttamente la url, ma tra qualche mese può cambiare la struttura del sito ed è meglio, per i futuri lettori della guida, muoversi tra i vari link).

Scegliamo un mirror qualsiasi e iniziamo il download. Attualmente il file si chiama mysqlcc-0.9.4-win32.zip. Mentre attendete il download, gustatevi il preview :)

mysql control center

L'installazione è in classico stile windows, se volete personalizzare qualcosa potete togliere i linguaggi supportati (lasciando l'italiano ovviamente) per risparmiare spazio su hard disk.

Terminata l'installazione, lanciate il programma e selezionate (premendo CTRL+O) nelle opzioni la lingua italiana. Chiudete e riavviate il tool per dare effetto alle modifiche.

Dal menù "File" cliccate su "Nuovo" per impostare una nuova connessione. Come parametro mettete i dati del localhost: Hostname localhost, user name root, password vuota. In "Nome" inserite quello che volete, qualcosa che identifichi la connessione (chessò, "corso", "weblink", "locale")..
Lasciate tutte le altre opzioni così come le trovate, quindi cliccate su "Add".

Nella finestra principale, trovate a sinistra "MysqlServer". Cliccate con il destro sul nuovo creato e selezionate "Connetti". Con un doppio click sul nome del database (i soliti "test", "corso_php" e "mysql" che dovreste già avere) possiamo aprire il pannello di controllo con l'elenco di tutte le tabelle.
Selezionate con il tasto destro una tabella ("giocatori") e guardate quante opzioni sono a vostra disposizione: possiamo agire in visuale sulla struttura!

Andiamo adesso a cliccare sul tasto "SQL" (raggiungibile anche premendo CTRL+Q). Ci troviamo in ambiente QUERY.
Possiamo scrivere la nostra query (come abbiamo fatto prima su phpMyAdmin) per creare nuove tabelle, per estrarre informazioni, per inserire nuovi dati.
Dobbiamo ricorrere ad istruzioni SQL, che vedremo meglio la prossima volta.

Potete però già iniziare a giocare: guardate che succede quando cliccate su "QUery=>Tipo di query=>query di inserimento" (sembra Access!)... Viene già proposta un'istruzione sql base. Riuscite, attraverso questa, a capire come inserire nuovi dati nella nostra tabella delle squadre? Una volta scritta la query, eseguitela premendo CTRL+E.
Esiste un altro modo di inserire dati. E' bene però che prendiate familiarità con l'SQL perchè è l'unico modo di far interagire una pagina PHP con un db.

Comunque: tasto destro del mouse su una tabella, scegliete "Apri tabella" visualizzando "tutte le righe".
Tasto destro del mouse su un qualsiasi record, "Inserisci record".. a questo punto sembra davvero di stare in Access (nel senso familiare del termine.. tecnicamente mai più!).
Come compitino per questa settimana, giocate con questi strumenti e cercate di popolare le tabelle.
Ogni tanto guardate anche phpMyAdmin: quando eseguite un'operazione vi restituisce l'SQL stampandolo a video, niente male per acquisire dimestichezza.

Riguardo MySqlControlCenter, è un tool open source e in continuo sviluppo. Se trovate ogni tanto il programma bloccato, lasciatelo stare e attendete che termini la query o la connessione, è normale (almeno finchè dura pochi secondi). Nella finestrella in basso, "Debug SQL", trovate le istruzioni inviate al server. Quelle che potreste inviare anche voi connettendovi dalla riga di comando (sono fissato eh!).

Come sempre, se avete dubbi scrivete sul forum.



Se avete domande potete scrivere sul forum di supporto, gratuito e aperto a tutti.



Claudio Curci e Max Kiusso per Web-Link.it