Facciamo adesso un esempio più complesso: la realizzazione di un
blocco personalizzato che visualizza l'oroscopo. La caratteristica di questo
blocco è quella di visualizzare l'oroscopo di un segno per volta,
a caso, ogni volta che viene visualizzata una pagina. Per rendere il codice
significativo, ci preoccuperemo di mettere gli oroscopi nel database, e provvederemo
la prossima volta a creare una interfaccia di amministrazione che consenta
di modificarli.
Per prima cosa dobbiamo quindi creare una tabella di database e metterci
dentro le previsionii che vogliamo visualizzare. Il codice SQL è il
seguente:
create table oroscopo ( segno varchar(30) primary key, previsioni varchar(255) );
insert into oroscopo values('Ariete', 'Sono in arrivo molti soldi.'); insert into oroscopo values('Toro', 'Guai in vista. State attenti.'); insert into oroscopo values('Gemelli', 'Vi aspetta un periodo di riflessine.'); insert into oroscopo values('Cancro', 'Influssi negativi dalle stelle. Serata tranquilla.'); insert into oroscopo values('Leone', 'La fretta è cattiva consigliera.'); insert into oroscopo values('Vergine', 'Amore alle stelle, soldi alle stalle.'); insert into oroscopo values('Bilancia', 'Bilanciate ragione e sentimento.'); insert into oroscopo values('Scorpione', 'Momenti pungenti per il partner.'); insert into oroscopo values('Sagittario', 'La luna si intromette negli affari vostri.'); insert into oroscopo values('Capricorno', 'Fate voi la prima mossa.'); insert into oroscopo values('Acquario', 'Serenità fa rima con rassegnazione.'); insert into oroscopo values('Pesci', 'Momento magico per tutta la settimana.');
Se state utilizzando MySQL, e il database si chiama "nukedb", con utente
"nukeuser" e password "nukepass", salvando l'SQL in un file "oroscopo.sql"
potete creare la tabella con il comando:
mysql -u nukeuser -pnukepass nukedb <oroscopo.sql
Scriviamo dunque il codice, che sarà contenuto in un file "html/blocks/block-Oroscopo_del_Giorno.php".
I problemi da risolvere sono due: il primo è la scelta casuale
dell'oroscopo da visualizzare, il secondo è una interrogazione al
database per estrarre l'oroscopo scelto e visualizzarlo.
Vediamo innanzitutto come fare a scegliere casualmente l'oroscopo
da visualizzare. La funzione PHP "rand(0,11)" mi ritorna un numero casuale
tra 0 e 11. Siccome per individuare il segno nel database uso il nome, specifico
un array per selezionare il segno su cui fare la query. Ovvero creo qualcosa
come "segni = array('ariete', 'toro' ....)". Per trovare l'oroscopo dal database
occorre eseguire una query utilizzando le consuete "mysql_pconnect", "mysql_query"
e "mysql_fetch_array". Il codice risultante sarà il seguente:
<?php
if (eregi("block-Oroscopo_del_Giorno.php",$PHP_SELF)) { Header("Location: index.php"); die(); }
/* scegliamo il segno */ $segni = array('Ariete', 'Toro', 'Gemelli', 'Cancro', 'Leone', 'Vergine', 'Bilancia', 'Scorpione', 'Sagittario', 'Capricorno', 'Acquario', 'Pesci'); $segno = $segni[rand(0,11)];
/* leggiamo la previsione */ global $dbhost, $dbuname, $dbpass, $dbname;
mysql_pconnect($dbhost, $dbuname, $dbpass); mysql_select_db($dbname); $previsioni = mysql_fetch_row( mysql_query( "select previsioni from oroscopo where segno='$segno'"));
/* ritorniamo il blocco */ $content = "<b>$segno</b>:" ."<br>$previsioni[0]";
?>
Da notare l'uso del "global" per ottenere le variabili di configurazione
per collegarsi al database, ovvero "$dbhost", "$dbname", "$dbuname" e "$dbpass".
Queste variabili sono definite nel file "config.php" di cui abbiamo parlato
la volta scorsa, e possono essere utilizzate per accedere al database.
Siccome il blocco è chiamato dentro una funzione, senza l'uso esplicito
del "global" la connessione al database fallisce (le variabili suddette infatti
non sarebbero visibili). In Figura 3 possiamo vedere il risultato dei
nostri sforzi:
Figura 3
|