Continua la nostra preziosa rubrica dedicata alla creazione del nostro cms personalizzato. Oggi vediamo come recuperare le informazioni inserite nel nostro database tramite query mysql.
Se vi siete persi gli altri “episodi” della guida tenete sott’occhio la sidebar a destra del sito, oppure per i più svogliati, ecco un comodo riassunto:
– L’importanza di una dashboard e impostazione del progetto
– Strutturare il database per l’inserimento dati.
Bene iniziamo!
Come interrogare un database MYSQL
Nella scorsa lezione abbiamo imparato alcuni modi per inserire correttamente informazioni nel nostro database mysql tramite script PHP. Oggi vediamo come visualizzarli a schermo in modo corretto. In linea di massima uno degli step fondamentali per eseguire una query mysql è richiamare lo script di configurazione e connessione al database. Dovreste già averlo creato per l’inserimento delle news, ma per ricapitolare al meglio ve li ripropongo in formato esteso:
config.php
E’ il file contenente tutte le informazioni del sito e le credenziali per connettersi al database.
//URL PER HTACCESS $base_url = "http://localhost/tuosito"; //connessione DB $host = "localhost"; $db_user = "root"; $db_psw = "pass"; $db_name = "news";
connessione_db.php
E’ lo script che se incluso, seleziona il database su cui lavorare.
<?php include("config.php"); //includo file configurazione per recupero variabili $connessione = mysql_connect("$host","$db_user","$db_psw"); if(!$connessione) { die("Errore critico di Connessione al Database" . mysql_error()); } ?>
Una volta inclusi questi due file “essenziali” possiamo passare all’interrogazione vera e propria (il codice di seguito è completo, vedi la continuazione per l’analisi delle singole funzioni):
lista_news.php
<?php //connessione mysql_select_db("$db_name",$connessione); //query SELEZIONA TUTTO DALLA TABELLA NEWS $ris_news= mysql_query("SELECT * FROM news"); //Se la query va male if (!$ris_news) { //messaggio di errore per capire il problema exit ('<p> Errore mentre recuperavo i dati' . mysql_error() . '</p>'); } // loop per stampare i risultati while ($news= mysql_fetch_array($ris_news)) { //struttura del loop visualizzazione si ripeterà n volte echo "<p>Titolo news: ".$news['titolo_news']."</p>" ; }//While ?>
Analizziamo insieme nel dettaglio:
//connessione mysql_select_db("$db_name",$connessione);
Esegue la connessione al database usando i file config.php e connessione_db.php.
$ris_news= mysql_query("SELECT * FROM news");
Allego alla variabile $ris_news il risultato della query. la query va letta e interpretata così: “PRENDI TUTTI I CAMPI” DAL DATABASE “NEWS”. Al posto dell’asterisco possiamo prendere solamente alcuni porzioni del database, come ad esempio solo il campo “titolo_news” o “descrizione_news”. Ecco ad esempio come selezionare solo il campo del titolo.
$ris_news= mysql_query("SELECT 'titolo_news' FROM news");
Ecco alcune funzioni utili (di base) per rendere le query davvero complete:
LIMIT: imposta un limite di visualizzazione. Ad esempio LIMIT 5 fa apparire solo 5 news. Da inserire IN FONDO alla query.
ORDER BY: ordina i risultati. ORDER BY ID DESC ad esempio ordina i risultati per id in maniera decrescente. Da inserire IN FONDO alla query.
//Se la query va male if (!$ris_news) { //messaggio di errore per capire il problema exit ('<p> Errore mentre recuperavo i dati' . mysql_error() . '</p>'); }
Questa parte serve se la query ha degli errori. Lo script ci restituisce il messaggio contenente il problema.
NOTA: in php il punto esclamativo prima di una variabile la nega. Ovvero se $ris_news non va a buon fine esegui qualcosa.
// loop per stampare i risultati while ($news= mysql_fetch_array($ris_news)) { //struttura del loop visualizzazione si ripeterà n volte echo "<p>Titolo news: ".$news['titolo_news']."</p>" ; }//While
Diciamo che questa sezione è il cuore dello script. Tramite la funzione mysql_fetch_array() possiamo facilmente stampare i dati della query. Quello che scriviamo dentro il ciclo while verrà ripetuto tante volte quanti sono i record in tabella selezionati con la query. Se ad esempio ho 3 news il risultato sarà:
01. Titolo news: primo titolo
02. Titolo news: secondo titolo
03. Titolo news: terzo titolo
Possiamo richiamare diversi elementi della tabella sostituendo il selettore all’interno delle parentesi quadre:
//seleziona descrizione $news['descrizione_news'] //seleziona data $news['data_news']
In questo modo possiamo stampare tutti i campi della nostra tabella. Elaborando questo script possiamo facilmente creare una tabella contenente tutti i dati che ci servono.
Tabella lista dati MYSQL
Ecco la tabella che conterrà il nostro database delle news:
<table id="lista" style="width:100%; margin-left:-10px; margin-top:-30px;"> <caption><div align="center"><b>Lista <?php echo $tipologia_sito ?> - <?php echo $sito_internet ?></b></div></caption> <thead> <tr> <th width="10%">Data</th> <th width="40%">Titolo</th> <th width="15%">Descrizione</th> <th width="30%">Operazioni</th> </tr> </thead> <tbody> //LOOP //FILE DEL LOOP VA QUI //DENTRO WHILE USATE LA SINTASSI: // echo "<tr>"; // echo " // <td><p>". $news['data'] ."</p> </td> // <td><p>". $news['titolo_news'] ."</p> </td> // <td><p>". $news['descrizione_news'] ."</p> </td> // "; </tbody> </table>
Informazioni e note di sviluppo
Ovviamente il panorama dei loop è molto vasto. Questa guida si rivolge a coloro che voglio iniziare, per un uso avanzato del loop ho deciso di creare guide ” a sè” per facilitare la trattazione.
Vi è stato utile? Fatemelo sapere… Condividete e commentate!
Ottimo articolo! Continua cosi!
Se posso, per chi è veramente alle prime armi consiglerei da subito di iniziare con MySQLi o con le PDO. Se non sbaglio dalla prossima versione di PHP sarà permesso interrogare i database MySQL soltanto tramite queste due estensioni.
Grazie della segnalazione Alessandro mi informerò anche se non penso che la differenza fra mysql normale e mysqLI sia così abissale… o sbaglio?
Purtroppo Riccardo è parecchio differente, MySQL utilizza delle semplici funzioni mentre invece MySQLi ha una classe apposita con relativi metodi. Insomma non è un passaggio propriamente indolore 🙁
Ciao Alessandro, mi informerò sicuramente ma il passaggio al nuovo sistema sarà così repentino?
Vado a memoria (quindi “Si salvi chi può” :D) le classi MySQL dovrebbero essere deprecate dalla versione 5.4 di PHP ma se devo dirti la verità penso che adotteranno un pò di flessibilità per venire in contro un pò a tutti.
Quoto quanto affermato da Alessandro.
Per quel che concerne il fatto che alcune funzione mysql_* alcune già sono derecate (mysql_create_db, mysql_db_query da php 5.3, mysql_list_dbs da php 5.4) mentre altre si avviano ad essere deprecate nelle successive versioni (ci sono rumors ma nulla di ufficiale per quanto ne sappia).
guarda Comparison of Features in fondo a questa pagina http://www.php.net/manual/en/mysqli.overview.php
per ciò che concerne il tuo tutorial vi è un errore. Nel file lista_news.php manca l’inclusione del file connessione_db.php.
Inoltre consiglierei di inserire la selezione del db direttamente in quest’ultimo file.
ciao
Per quanto riguarda la non inclusione di connessione_db.php me lo sono scordato grazie della segnalazione, anche se dopo aver letto le guide di questo filone dovrebbe venire automatico includerlo forse l’ho omesso proprio per quel motivo 😉
Per quanto riguarda il nuovo standard credo sia controproducente adottarlo fin da ora dato che per la sua diffusione ci vorrà ancora molto tempo. (voglio proprio vedere chi lo usa già per progetti “reali” di lavoro 😉 ). Ad ogni modo è giusto iniziare a “studiarselo” per non rimanere indietro 😉
Ciaooooooo, grazie per l’aiuto siete stati molto utili. Ciao ciao da manu e giuly. 🙂