MySQL howto - Comune di Campagnano di Roma

annuncio pubblicitario
MySQL howto
(maisiquel autu)
Augusto Scatolini ([email protected]) ([email protected])
Miniguida n. 181
Ver. 1.0 marzo 2013
La prima guida che ho scritto su MySQL risale ad aprile 2004 ed è disponibile all'indirizzo
http://www.comunecampagnano.it/gnu/accessless/fromMySQL/index.htm
la seconda parte della guida sempre di aprile 2004 è disponibile all'indirizzo
http://www.comunecampagnano.it/gnu/accessless/fromMySQL/index2.htm
ho ripreso l'argomento nel febbraio del 2011 con
http://www.comunecampagnano.it/gnu/mini-howto/mysqlbiblibre/mysqlbiblibre.pdf
e poi a marzo 2011 con
http://www.comunecampagnano.it/gnu/mini-howto/phpmyedit/phpmyedit.pdf
Oggi marzo 2013, a quasi 9 anni dalla prima guida mi sembra opportuno ritornare sull'argomento ed
attualizzarla. Molti programmi sono evoluti, alcuni sono diventati a pagamento, programmi nuovi
sono diventati disponibili, liberi, open source, freeware e a pagamento.
Perché MySQL?
Se è vero, come è vero, che la maggioranza degli utenti (utonti) usa il Personal Computer
(prevalentemente con sistema operativo Microsoft, chiuso e a pagamento) per navigare su internet,
scrivere qualche documento e prendersi una montagna di virus e quindi ad un decimo/ventesimo
delle possibilità della macchina è altrettanto vero che la funzione principe di un calcolatore è quella
di gestire dei dati, dei database.
Non esiste un'azienda, pubblica o privata, che non gestisca dati in piccola o grande quantità.
Normalmente l'azienda acquista sul mercato un programma composto da un database installato su
un server capace di dare accesso in lettura e scrittura ai vari client, decine o centinaia che siano.
Il linguaggio informatico prevalentemente utilizzato è SQL, nato nel 1974
In informatica SQL (Structured Query Language) è un linguaggio standardizzato per database basati sul
modello relazionale (RDBMS) progettato per:
creare e modificare schemi di database (DDL - Data Definition Language);
inserire, modificare e gestire dati memorizzati (DML - Data Manipulation Language);
interrogare i dati memorizzati (DQL - Data Query Language);
creare e gestire strumenti di controllo ed accesso ai dati (DCL - Data Control Language).
A differenza del nome, non si tratta dunque solo di un semplice query language, ma include anche gli altri
linguaggi tipici per la progettazione e gestione/amministrazione del database.
http://it.wikipedia.org/wiki/SQL
Quindi si installa SQL su un server, si crea un'interfaccia web per i client che permette tutte le
funzioni tipiche di un database, inserimento, modifica, cancellazione, interrogazioni, filtri, stampe,
eccetera.
Fortunatamente, in queste aziende, è facile trovare qualche utente un po' più evoluto che si dedica a
sviluppare piccoli database personali (stand-alone) o di gruppo (via intranet).
Attualmente questi utenti-sviluppatori usano principalmente MS Access (programma di Office
chiuso e a pagamento) e secondariamente Base (programma del pacchetto LibreOffice aperto, libero
e gratuito) come pacchetti per sviluppare questi piccoli/medi database.
Il limite di questi programmi, molto potenti nella creazione di interfacce per l'utente, è la scarsa
usabilità in un ambiente intranet (via web) e multiutente.
Ecco perché la scelta, quasi obbligata, è quella di usare MySQL nato nel 1979 ma che supporta SQL
dal 1996
Perché MySQL su piattaforma Microsoft?
La ragione, tutt'altro che tecnica, è semplicemente dovuta all'enorme diffusione di PC con questo
tipo di sistema operativo, soprattutto nelle aziende, rispetto a sistemi UNIX alike (GNU/Linux).
Visto che gli utenti GNU/Linux sono “naturalmente” più evoluti di quelli Microsoft, il target di
questa guida è quell'utente-evoluto Microsoft che vuole utilizzare il server web Apache (si
pronuncia apaci) con installato il server MySQL (maisiquel) e interrogarlo tramite il linguaggio
PHP.
Usare Microsoft Access con MySQL
Questo articolo spiega come collegare un server MySql ad un Client Windows ed editare i record
usando Microsoft Access.
http://www.desantix.it/index.php?page=show_articles&cmd=show_article&id=108
XAMPP
XAMPP, è una piattaforma software gratuita costituita da Apache HTTP Server, il database MySQL
e tutti gli strumenti necessari per utilizzare i linguaggi di programmazione PHP e Perl. Il nome è
un acronimo dei programmi sopra citati: la X sta per cross-platform, la A sta per Apache HTTP
Server, la M sta per MySQL, la P sta per PHP e l'ultima P sta per Perl.
Su queste piattaforme si appoggiano spesso siti web e altre piattaforme di sviluppo web dinamico
(CMS) come Wordpress, Drupal e Joomla!.
http://it.wikipedia.org/wiki/XAMPP
Scaricare xampp da http://www.apachefriends.org/it/xampp.html per windows portable di circa 89
MB
scompattarlo nella cartella C:\xampp
lanciare il programma xampp-control.exe (pannello di controllo)
avviare il server apache cliccando sul pulsante Start (a destra di Apache), se il server si avvia e poi
si ferma immediatamente molto probabilmente c'è un servizio che tiene occupata la porta 80
bisogna indagare, scoprire e rimuovere questo servizio
il metodo più semplice (su Windows 7) è aprire il task manager,
alla sezione Prestazioni e poi cliccare Monitoraggio risorse
si noterà, in questo caso, che la porta 80 è impegnata dal programma (servizio)
vmware-converter.exe
Quindi aprendo il pannello dei servizi
disabilitiamo il/i servizio/i che tengono occupata la porta 80
su Windows XP, oltre ad usare il comando DOS “netstat -aon”, si può scaricare il programma
Active Ports da http://www.ilsoftware.it/dl.asp?id=355
sia il comando netstat che il programma Active Ports ci mostrano che la porta 80 (in questo caso) è
occupata dal processo PID 3640 che è quello del Server Web Apache il cui programma eseguibile è
httpd.exe. Infatti su XAMPP si può notare lo stato di Apache che è “Running”
dopo di che potremo avviare il server Apache e il server MySql
Ora si può aprire il browser ad uno dei seguenti indirizzi (equivalenti)
http://localhost
http://127.0.0.1
http://192.168.0.201 (indirizzo IP configurato sulla mia rete lan)
e dopo aver selezionato la lingua italiana otterremo:
ora applichiamo un minimo di sicurezza aprendo la pagina localhost/security/xamppsecurity.php
assegnando una password al super utente root e creando un utente con relativa password,
se ora riapriamo la pagina della sicurezza vedremo
USARE DATABASE MYSQL
se dobbiamo creare un database da zero torna molto utile il programma phpMyAdmin presente tra
gli strumenti
motore di memorizzazione MyISAM (classico) o InnoDB (nuovo)?
MyISAM : possibilità di copiare i tre file fondamentali
*.frm = formato delle tabelle
*.MYD = dati
*.MYI = indici
InnoDB : più evoluto ma più delicato da manutenere
*.frm = struttura
ibdata = tutto il resto
ib_logfile = le variazioni
Questo serve per recuperare il db in caso di down del server e ricostruire le tabelle.
Apriamo phpmyadmin
Dopo aver selezionato la lingua, aver digitato la password di root e aver cliccato su Esegui
apriamo la scheda Database, diamo un nome al nuovo database, settiamo i caratteri a
utf8_general_ci e clicchiamo Crea
il nuovo database sarà presente
nell'elenco dei database disponibili
selezionando il database (vuoto) rubrica, possiamo ora creare la/le tabella/e aprendo la scheda
Struttura, stabilendo un nome per la tabella e il numero di campi della stessa
il nome della tabella é contatti e stabiliamo che contenga 4 campi
i 4 campi saranno:
ID contatore, chiave primaria
nominativo (cognome e nome)
cellulare
indirizzo_mail
Ora potremmo scaricare il programma portatile HEIDISQL dalla pagina
http://www.heidisql.com/download.php
e dopo averlo posizionato in una cartella e lanciato
e creato una sessione come mostrato in figura
possiamo selezionare il database rubrica, poi la tabella contatti e poi dalla scheda Data possiamo
aggiungere un paio di record tramite i pulsanti posizionati in alto
ovviamente la stessa cosa si ottiene tramite phpMyAdmin oppure possiamo scaricare (previa
registrazione) e usare (senza installazione) MySql Workbench da http://www.mysql.it/downloads/
Dove sono i dati?
Se abbiamo scelto MyISAM come motore di memorizzazione troveremo i classici tre file per
ciascuna tabella sotto la cartella “rubrica” che è il database
CONVERTIRE UN DATABASE MS ACCESS MDB IN MYSQL
Nella guida all'indirizzo
http://www.cionfs.it/forum/guida-convertire-un-file-di-access-mdb-mysql-vt171.html
la migrazione viene fatta tramite un programma presente nel pacchetto
mysql-gui-tools-5.0-r3-win32.msi che richiede la versione di java
jre-1_5_0_08-windows-i586-p.exe
Un esempio reale
Dopo aver reso visibili gli oggetti di sistema di access tramite Strumenti ---> opzioni il database MS
Access MDB “contrassegni” composto da un'unica tabella la cui maschera è la seguente
apparirà in struttura come segue
Si noteranno 6 oggetti che precedentemente erano nascosti
seguendo la procedura dettagliata nella guida si potrà importare la tabella “contrassegni” dal
database “contrassegni” dentro il database MySQL
visto con phpMyAdmin
visto con HeidiSQL
visto con MySQL Workbench
visto con MySQL Query Browser
Si può anche usare Access to MySQL msa2mys_5_1_0_232.exe scaricandolo da
http://www.bullzip.com/download.php
visto con MySQL-Front scaricabile da http://www.mysqlfront.de/
visto con DreamCoder for MySQL scaricabile da
http://download.cnet.com/DreamCoder-for-MySQL-Enterprise-Freeware/3000-10254_4-10226530.html
(attenzione a tutti i programmini che vengono installati insieme a DreamCoder)
visto con EMS SQL Manager for MySQL versione Lite freeware scaricabile da
http://www.sqlmanager.net/en/products/mysql/manager/download
nella forma tabellare
e nella più classica forma FORM
Creare un'interfaccia web (scritta in PHP) per interrogare l'archivio “contrassegni”
seguendo la guida del 2011
http://www.comunecampagnano.it/gnu/mini-howto/phpmyedit/phpmyedit.pdf
scaricando phpMyEdit da
http://opensource.platon.sk/projects/release_view_page.php?release_id=66 si può ottenere
se si clicca su Modifica apparirà una maschera
con tutti i campi del record
DADABIK
Volendo spendere 15,00 euro + IVA si può acquistare Dadabik nella versione basic
e dopo aver configurato poche righe
averlo installato lanciando http://localhost/dadacontrassegni/insall.php
(la cartella dadacontrassegni contiene tutti i file necessari di dadabik)
puntando su http://localhost/dadacontrassegni/ l'utente vedrà
mentre l'amministratore vedrà
REPORT
Il report si può fare tramite Dreamcoder for MySQL installato sulla propria macchina
Diverso è il problema di offrire un report ai vari utenti della intranet via web. L'utente utilizzatore
dell'archivio MySQL non può e non deve installare nulla per stampare una tabella del DB.
Iniziamo una ricerca su Google con la stringa “free mysql report generator”
1. iniziamo con DMYreports 0,3 (Dynamic MySQL Reports) scaricabile da
http://sourceforge.net/projects/dmyreports/
scarichiamo, scompattiamo e copiamo la cartella dmyreports sotto XAMPP
apriamo il file readme e troviamo delle istruzioni tanto brevi quanto incomprensibili:
INSTALLATION
-----------1. Restore the MySQL database in the "dbBackup" folder.
2. Modify the "config.php" in the "includes" folder as required.
Thatz it!!!
Che diavolo significa Restore the MySQL database in the "dbBackup" folder non è dato saperlo.
fine delle prove.
Inutile cercare aiuto, help, manual, tutorial, non esiste niente! NEGATIVO
2. continuiamo con PM Report 4.1 scaricabile da http://downloads.fyxm.net/PM-Report-5087.html
scarichiamo, scompattiamo e copiamo la cartella pm_repot sotto XAMPP
apriamo il file readme e modifichiamo, come indicato, il file config.php
il risultato di http://localhost/pm_report è sconfortante: una pagina incomprensibile, piena di errori
NEGATIVO
3. vi risparmio Reportico scaricabile da http://www.reportico.org/site/index.php in quanto non ci si
capisce assolutamente niente. NEGATIVO
4. tralasciamo anche Smart Report Maker che è acquistabile su http://mysqlreports.com/index.html
per 48 Dollari. È possibile provarlo in demo direttamente sul sito. 48 dollari.
5. continuiamo con PHP Report scaricabile da
http://sourceforge.net/projects/php-report/files/latest/download
leggiamo readme, configuriamo config e questo è il risultato (in brasiliano e ovviamente non
funziona) NEGATIVO
6. continuiamo con reportgen scaricabile previa registrazione da
http://www.phpclasses.org/package/1785-PHP-Generate-HTML-report-from-MySQL-query-result-data.html
configuriamo la connessione e questo è il risultato. NEGATIVO
7. vediamo ora phpmyreport scaricabile da http://sourceforge.net/projects/phpmyreport/?source=dlp
dopo una prima e invitante schermata come quella che segue.
questo è tutto quello che si può ottenere. NEGATIVO
BISOGNA SCRIRSI IL CODICE
8. stanco di tutti questi programmi/script che non funzionano, me lo sono scritto (parzialmente) da
solo (lo script), bastano 24 righe inclusa la connessione al database
<?php
$dbms_type = 'mysql';
$host = "localhost";
$username = "root";
$password = "xxxxxxx";
$database = "contrassegni";
$connessione = @mysql_connect($host, $username, $password);
@mysql_select_db($database);
if ($database== false) die ("Errore nella connessione.");
$query = "select * from contrassegni";
$risultato = @mysql_query($query);
$numcampi = @mysql_num_fields($risultato);
echo "<table><tr>";
for ($i=0; $i < $numcampi; $i++)
{
echo '<th>'.mysql_field_name($risultato, $i).'</th>';
}
echo "</tr>";
while ($row = @mysql_fetch_row($risultato))
{
echo '<tr><td>'.implode($row,'</td><td>')."</td></tr>";
}
echo "</table>";
?>
ho salvato lo script come stampacontrassegni.php, l'ho messo sulla radice del server e l'ho lanciato,
questo è stato il risultato (i campi sono tantissimi e non si vedono tutti nello schermo)
a questo punto è sufficiente stampare su file (salvare come PDF) scegliendo il formato orizzontale e
si ottiene questo PDF:
meglio di niente!
E se volessimo una stampa (ridotta) più leggibile, con solo alcuni campi significativi possiamo
sempre modificare lo script e salvarlo con un altro nome come stamparegistro.php
questo è il codice di stamparegistro.php
<?php
$dbms_type = 'mysql';
$host = "localhost";
$username = "root";
$password = "xxxxxx";
$database = "contrassegni";
$connessione = @mysql_connect($host, $username, $password);
@mysql_select_db($database);
if ($database== false) die ("Errore nella connessione.");
$query = "SELECT protocollo, richiesta, dal, cogn_e_nome, nato_il, nato_a, n_concessione, data_scadenza FROM contrassegni";
$risultato = @mysql_query($query);
$numcampi = @mysql_num_fields($risultato);
echo "<table><tr>";
for ($i=0; $i < $numcampi; $i++)
{
echo '<th>'.mysql_field_name($risultato, $i).'</th>';
}
echo "</tr>";
while ($row = @mysql_fetch_row($risultato))
{
echo '<tr><td>'.implode($row,'</td><td>')."</td></tr>";
}
echo "</table>";
?>
questo è il PDF
abbiamo migliorato!
Con una piccolissima modifica possiamo evidenziare la tabella per migliorare la visualizzazione
sostituiamo echo "<table><tr>"; con echo '<table border="1" cellpadding="10" cellspacing="0"><tr>'; e otteniamo:
se volessimo usare un motore di ricerca per individuare ed estrarre i dati di un singolo record
dobbiamo scrivere uno script per fare la ricerca e un altro per mostrare gli eventuali i risultati
il codice del modulo di ricerca (modulo.php) è molto semplice:
<form name="ricerca" action="ricerca.php" method="post">
<input type="text" name="cerca" />
<input type="submit" name="vai" value="Cerca nominativo!" />
</form>
apparirà in questo modo
il codice della pagina per mostrare i risultati (ricerca.php) è leggermente più complesso:
<?php
$dbms_type = 'mysql';
$host = "localhost";
$username = "root";
$password = "xxxxxxx";
$database = "contrassegni";
$connessione = @mysql_connect($host, $username, $password);
@mysql_select_db($database);
if ($database== false) die ("Errore nella connessione.");
if(isset($_POST['vai'])) {
echo "Ecco i risultati della ricerca:<br /><br /> ";
$parolacercata = $_POST['cerca'];
$query = "SELECT * FROM contrassegni WHERE cogn_e_nome LIKE '%$parolacercata%'";
$risultato = mysql_query($query);
while ($record = mysql_fetch_array($risultato, MYSQL_ASSOC)) {
echo 'protocollo: '; echo "<b>"; echo $record['protocollo']; echo "</b>"; echo "<p />";
echo 'richiesta: '; echo "<b>"; echo $record['richiesta']; echo "</b>"; echo "<p />";
echo 'dal: '; echo "<b>"; echo $record['dal']; echo "</b>"; echo "<p />";
echo 'nominativo: '; echo "<b>"; echo $record['cogn_e_nome']; echo "</b>"; echo "<p />";
echo 'nato il: '; echo "<b>"; echo $record['nato_il']; echo "</b>"; echo "<p />";
echo 'nato a: '; echo "<b>"; echo $record['nato_a']; echo "</b>"; echo "<p />";
echo 'n. concessione: '; echo "<b>"; echo $record['n_concessione']; echo "</b>"; echo "<p />";
echo 'scade il: '; echo "<b>"; echo $record['data_scadenza']; echo "</b>"; echo "<p />";
}
}
else {
}
?>
questo è il risultato
CONCLUSIONI
Nella cartella \dadacontrassegni\images\ c'è
il logo di dadabik:
se noi creiamo un'immagine personalizzata così:
e la sostituiamo all'originale logo.png
quando apriremo la nostra copia personalizzata di dadabik vedremo:
ora rimane da inserire nel menu originale di dadabik una voce per stampare il registro (ridotto e
formattato) e un'altra voce per cercare un record ed eventualmente stamparlo.
È sufficiente modificare la riga 625 del file header.php (sotto \include)
il codice della riga è il seguente: <td style="width:100%"><A HREF="tabellato.php" TARGET="_blank">stampa
registro</A>....<A href="modulo.php" TARGET="_blank">stampa record</A></td>
ovviamente, per il corretto funzionamento, bisogna spostare i tre file tabellato.php, modulo.php e
ricerca.php nella cartella di dadabik (dadacontrassegni)
RISULTATO FINALE
Abbiamo dadabik con logo personalizzato e con menù personalizzato:
cliccando su “stampa registro” apparirà il registro ridotto e formattato su una nuova finestra
cliccando su “stampa record” apparirà il modulo di ricerca su una nuova finestra.
FINE
Questo documento è rilasciato con licenza Copyleft
(tutti i rovesci sono riservati) altre miniguide su
http://www.comunecampagnano.it/gnu/miniguide.htm
oppure direttamente su http://miniguide.tk
sito consigliato: http://www.linux4campagnano.net
blog consigliato: http://campagnano-rap.blogspot.com
Scarica