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