L'ultimo articolo scritto su Sir Bit risale a marzo 2014. La versione che state visitando è un archivio: le pagine sono accessibili come sempre e gli autori potrebbero rispondere ai commenti, ma non saranno inseriti dei nuovi articoli. Visita questa pagina per i dettagli.

Una volta che si acquisisce dimestichezza con un linguaggio di programmazione, diventa cosa comune utilizzare ogni giorno delle comode funzioni per ridurre il più possibile il codice della pagina.
Ottimizzare l’esecuzione delle funzioni diventa utile, a volte persino necessario. Nel mio caso, faccio spesso uso di metodi di classe – che in quanto a gestione di base sono simili alle funzioni – e creare una struttura ottimizzata mi è fondamentale (a tale proposito, se vi interessa approfondire l’argomento della programmazione a oggetti in php date un’occhiata al mio articolo sulle classi).

In questo articolo vediamo un aspetto delle funzioni (e dei metodi di classe) spesso sottovalutato: come far passare in modo efficiente gli argomenti.
Come regola generale, io utilizzo un sistema semplice e che mi permette una certa flessibilità:
– se i parametri da passare sono obbligatori, li scrivo in chiaro come argomento a sé stante
– se i parametri sono facoltativi o di natura “secondaria” li faccio passare tutti assieme come elementi di un array

Tra poco vedremo un esempio che spiegherà meglio il concetto e l’utilità di utilizzare array come “contenitore di parametri”. Tengo a precisare di nuovo che si tratta di una regola generica, che non sempre applico: è il buon senso a stabilire quando e in che modo farne uso.

Per la comprensione di questo articolo si richiede una conoscenza di base dell’uso delle funzioni e degli array (per un ripasso di quest’ultimi, si può fare ricorso a un tutorial di base).

La descrizione del procedimento

Prima una descrizione veloce su quello che andremo a creare.
Si presume che sia presente una tabella nel database (chiamata per esempio “utenti”) i cui record sono persone fisiche. I campi su cui andremo a lavorare nell’esempio saranno quattro:
– id del record
– nome
– cognome
– sesso

La nostra idea è semplicemente di far passare questi campi alla funzione, che corrisponderanno ai campi nel database da modificare (ovvero su cui fare una query di update). I campi potranno essere elaborati a piacere prima dell’esecuzione della query (per esempio, controllando che “cognome” non sia vuoto).

Leggi Tutto >>

Quando manipoliamo il codice di WordPress, spesso ci è necessario recuperare il nome della categoria. Questo può capitare se siamo all’interno di un articolo oppure all’interno di una sottocategoria: in quest’ultimo caso, generalmente, ci preme soprattutto recuperare l’id della categoria padre (ed eventualmente il suo nome).

Iniziamo con ordine e vediamo come lavorare con le categorie. Ci sarà utile per comprendere le dinamiche dell’esempio finale.

Recuperare nome della categoria conoscendo il suo id

Se andate nel pannello di amministrazione, nel menu Articoli => Categorie troverete la lista delle categorie. Portatevi sopra alla categoria voluta con il mouse e troverete l’id della categoria (identificata dal get tag_ID).
Avendo a disposizione l’id della categoria, a questo punto possiamo recuperare tutti i riferimenti della categoria. Nel nostro caso, stamperemo il nome della categoria:

1
2
3
$category = &get_category($id);
$category_name=$category->slug;
echo $category_name;

Leggi Tutto >>

Scan del fumetto Spiderman

Il formato .cbr è usato tipicamente (ma non solo) per raccogliere scans di fumetti e immagini in genere, rendendole fruibili su software appositi come se fossero dei libri da sfogliare (1)

Se vi capita tra le mani un file con estensione .cbr, è probabile che vogliate convertirlo in un formato più “amichevole” e trasportabile, per poter essere facilmente letto dai tablet o su un pc su cui non avete installato programmi capaci di leggere i file .cbr.

La conversione può essere fatta agevolmente con il programma Calibre, ma il pdf così creato perderà i colori originari. Se quindi dovete convertire un file a colori, è necessario usare un sistema un po’ più elaborato.

In questo breve tutorial vedremo come convertire un .cbr in .pdf mantenendo inalterati i colori. La procedura è stata testata tempo fa su Windows XP, ma per i successivi sistemi operativi è la medesima.

Occorrono due programmi da installare:
– un programma di decompressione degli archivi (Winrar, Zipgenius, ecc.)
– un programma di creazione del pdf tramite stampa. Nel mio caso userò Pdf Creator, che è gratuito e facile da usare

Procedimento

Per semplicità scriverò il procedimento a punti.

– Aprite il file .cbr con il programma di decompressione degli archivi e scompattatelo in una cartella qualsiasi. Si creeranno delle immagini .jpg, corrispondenti al contenuto del file.

– Ordinate le immagini, per esempio con un numero progressivo. L’ordinamento è importante: le immagini appariranno nel pdf con questo ordine.

Leggi Tutto >>

Nell’estrazione di record, spesso ci dobbiamo confrontare con la necessità di estrarre soltanto un determinato numero di righe da una tabella.

Quando le righe da estrarre sono l’una successiva all’altra, è cosa facile: basta utilizzare la clausola del limit (come abbiamo visto, per esempio, nella suddivisione di record su più pagine).
Per estrarre i primi 100 record di una tabella, per esempio, useremo la seguente query:

1
SELECT * FROM tabella LIMIT 0,100;

Ma come fare quando le righe non sono contigue?
A seconda dei casi, naturalmente, abbiamo diversi modi di approccio. Di seguito vediamo due casistiche che vi permetteranno, elaborandole, di coprire altri casi più complessi.

Leggi Tutto >>

I meta tag sono delle informazioni che servono a descrivere i dati contenuti in una pagina html. Non c’è programmatore che non li conosca, perché sono essenziali a fornire ai motori di ricerca e agli utenti che aprono la pagina alcuni dettagli altrimenti difficili da capire.

Il loro scopo non è di stabilire il layout della pagina: all’utente che apre la pagina del sito, queste informazioni rimangono nascoste (saranno visibili soltanto quando si osserva il codice sorgente).

Struttura di base

La struttura di un meta tag è molto semplice ed è formato in genere dall’attributo name (che identifica il nome del meta tag) e dall’attributo content (il valore del meta tag). Per esempio:

<meta name="description" content="Questa è una descrizione" />

Il valore di name non è arbitrario: esiste una determinata “lista” riconosciuta, di cui si avvolgono generalmente i motori di ricerca per reperire informazioni utili. La vedremo tra poco.

Un altro tipo di attributo usato nei meta tag è http-equiv. Il loro scopo è più specifico: si occupano di inviare al browser gli header http (ovvero quei pacchetti che contengono informazioni necessarie per il funzionamento della rete). Anche in questo caso il loro valore rientra in una certa lista e il content deve essere compilato a seconda dell’attributo usato. Il meta tag seguente, per esempio, indica al browser che la pagina deve essere vista con la codifica di tipo utf-8:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Vediamo allora la lista dei meta tag principali, a partire da quelli con attributo name. Ve li propongo non in ordine alfabetico, ma in base a una mia stima personale sull’importanza o la frequenza di utilizzo. I metatag che non dovrebbero mai mancare sono, naturalmente, quelli della descrizione e delle parole chiave, ma anche la codifica charset dove occorre.
Sotto a ognuno inserirò un esempio per chiarire.

Leggi Tutto >>

Di recente mi sono trovato a lavorare con la struttura di un sito piuttosto complesso, costruito interamente sulla base della programmazione a oggetti.
In questa situazione, per evitare errori futuri difficili da scovare, occorre seguire una “manovra” di continuo debug, controllando il codice non appena una classe è pronta per essere usata (salvo miglioramenti futuri).

Per risparmiare tempo, tra gli altri script ho realizzato una classe piuttosto semplice che mi permette di stampare il contenuto dei $_GET e dei $_POST in modo agevole e con un aspetto elegante.
Cosa fa di preciso? Richiamando il metodo voluto, recupera per esempio il $_GET e stampa a video ogni sua chiave con il relativo valore all’interno di una struttura a tabella.

In questo modo avremo alcuni vantaggi non trascurabili:
– facilità di vedere il contenuto di questi array globali in mezzo al codice già stampato a video
– possibilità di stampare a video chiavi e valori richiamando un solo metodo, risparmiando tempo e codice
– possibilità di personalizzare l’aspetto della struttura di stampa

Un metodo simile può essere usato per stampare a video le chiavi e i valori di qualsiasi array, come vedremo più sotto (a dire la verità si potrebbe modificare la classe affinché, con un unico metodo, si possano stampare $_GET, $_POST e qualsiasi array: ma per chiarezza li lasciamo separati).

La struttura della classe

Diamo un’occhiata all’intera classe nella sua forma base. Ogni passaggio è commentato, per cui richiederà soltanto qualche piccola spiegazione.

Leggi Tutto >>

Numeri a random su sfondo azzurro

Una funzione, da scaricare gratuitamente, per generare una stringa a random di lunghezza voluta e con caratteri personalizzati

La necessità di generare una stringa random, a partire da determinati caratteri e di una certa lunghezza, è sentita soprattutto per quanto riguarda la gestione delle password. In questo caso possiamo fare riferimento ad alcuni script in javascript pre-confezionati.

Il concetto, in php, è lo stesso del codice in javascript.
In questo articolo vedremo una funzione leggermente più complessa, che permette di generare una stringa a random con alcune particolarità:
– la possibilità di ottenere come output una stringa della lunghezza voluta
– la possibilità di scegliere quali caratteri e quali simboli andranno a comporre la stringa finale

Il tutto sarà fatto tramite una funzione piuttosto semplice, a cui faremo passare determinati parametri.
Per la sua comprensione è utile la conoscenza sull’uso delle funzioni e degli array. Chi fosse alle prime armi può comunque fare uso della funzione, che richiede poca (o nessuna) personalizzazione.

Il codice è scaricabile gratuitamente in formato zip dal link qui sotto.

La funzione: creare una stringa random

La funzione è di facile comprensione (nello zip da scaricare troverete anche i commenti ai suoi argomenti da passare).
Vediamo il codice, che commenteremo subito dopo.

Leggi Tutto >>

Php - multi upload di file

L’invio e il recupero di più file da un form upload è piuttosto semplice. Basta seguire qualche accortezza e lavorare sugli array (1)

Qualche giorno fa mi è stato chiesto per email di realizzare un articolo sugli upload multipli, cioè uno script che sia in grado di fare l’upload di più file o immagini contemporaneamente. La richiesta è avvenuta dopo la lettura di un mio recente articolo che trattava le basi dell’upload di immagini.

Esistono in rete diversi sistemi per eseguire l’upload multiplo. I più efficienti si avvalgono di una struttura a classi e permettono opzioni di livello avanzato.
Per lo scopo di questo articolo, però, ci fermeremo ai primi passi: invio dei file e recupero di ognuno di essi.

Si richiede la lettura (che è molto semplice) dell’articolo linkato sopra, sulla quale fonderò le basi di questo tutorial.

Il form

La creazione del form è molto semplice. L’unica cosa da ricordarsi è che l’attributo “name” deve contenere un nome con le parentesi quadre e che sia presente l’attributo “multiple”.
Di fatto, quando cercherete i file sul computer, potrete selezionarne più di uno tenendo premuto il tasto ctrl della tastiera.

1
2
3
4
5
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file[]" multiple>
<br /><br />
<input name="invia" type="submit" value="Carica i file" />
</form>

Leggi Tutto >>

Diagramma oggetti di classe

Un diagramma generico su come può essere strutturata una gerarchia di classi. Il concetto è identico in qualsiasi linguaggio di programmazione, non solo php (1)

Nei tutorial precedenti abbiamo visto una panoramica di cos’è la programmazione a oggetti, della sua strutturale generale in php e del suo uso di base.
Abbiamo inoltre visto, in un altro articolo, come è possibile estendere una classe per poter così utilizzare i suoi metodi in un’altra classe (si parla di eredità di classe).
Ora saldiamo tutte le nozioni con un esempio organico e completo, che potete liberamente scaricare per eseguire test personali.

L’esempio è semplicistico e si basa su un form attraverso cui l’utente invia alcuni dati personali: nome, anno di nascita, email.
Noi ci occuperemo di prendere questi dati e di controllare la loro validità. Se i dati inviati sono corretti, saranno stampati a video. Se invece contengono degli errori, sarà stampato il relativo errore personalizzato.

Faremo uso di due classi, costruite all’interno dello stesso file (da importare nell’index.php):
– classe “StampaErrori”: nel caso si riscontrino errori, stabilirà quale errore stampare a video.
– classe “Persona”: controlla la correttezza dei dati passati. Sarà questa classe che istanzieremo in index.php. La classe “Persona” estenderà la classe “StampaErrori”: potrà quindi accedere ai metodi di quest’ultima per stampare gli errori.

Per una maggiore comprensione e per una visione d’insieme dell’esempio, scaricate innanzitutto lo zip contenente i codici sorgente.

Il form di invio dei dati

Il form usato dall’utente per inviare i dati non ha niente di particolare. Vediamolo per completezza.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<form action="" method="post" style="margin-top:30px;">

        <div class="riga">
                <div class="left">Nome:</div>
                <div class="right"><input type="text" name="nome" value="<?php if(isset($_POST['nome'])) echo $_POST['nome'];?>" /></div>
        </div>

        <div class="riga">
                <div class="left">Anno di nascita:</div>
                <div class="right"><input type="text" name="anno" value="<?php if(isset($_POST['anno'])) echo $_POST['anno'];?>" /></div>
        </div>

        <div class="riga">
                <div class="left">Email:</div>
                <div class="right"><input type="text" name="email" value="<?php if(isset($_POST['email'])) echo $_POST['email'];?>" /></div>
        </div>

        <div class="riga">
                <div class="left"></div>
                <div class="right"><input type="submit" value="Invia" name="invio" /></div>
        </div>

</form>

Leggi Tutto >>

Computer connessi

L’eredità tra classi è uno dei fulcri della programmazione a oggetti. Grazie a questa, possiamo usare metodi di una classe superiore (1)

Nell’articolo precedente abbiamo visto una panoramica di cos’è la programmazione a oggetti, della sua strutturale generale in php e del suo uso di base.
In quel tutorial abbiamo parlato di una tecnica chiamata eredità di classe: in breve, è possibile prende i metodi di una classe A e utilizzarli all’interno di una classe B (si dice che B eredita i metodi di A).
“A” è la superclasse (o classe madre) e “B” la sottoclasse (o classe figlia).

L’utilità è intuitiva, ma si comprende fino a fondo solo nella pratica. Se per esempio abbiamo una classe “Persona”, possiamo fare in modo che sia la classe “Studente” che la classe “Lavoratore” prendano i suoi metodi; ma “Studente” e “Lavoratore” non interagiranno in alcun modo tra loro.

Vedremo inoltre che esistono dei sistemi affinché una sottoclasse possa sovrascrivere i metodi di una superclasse, tramite la tecnica che prende il nome di overriding.

Esempio: Studente estende Persona

Riprendiamo l’esempio sopra e vediamo cosa significa effettivamente che la classe “Studente” estende la classe “Persona”.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Persona {        
	public function titolo() {
		return "Scheda del soggetto";
	}
}
class Studente extends Persona {      
        public function classe() {
                return "Classe: terza A";
        }

        public function titolo_generale() {
                return $this->titolo();
        }
}

$studente = new Studente;
echo $studente->classe;	// stampa "Classe: terza A"
echo $studente->titolo();	// stampa "Scheda del soggetto"
echo $studente->titolo_generale();	// stampa "Scheda del soggetto"

Come potete vedere, il metodo titolo() appartenente a “Persona” diventa direttamente accessibile dalla classe “Studente”, come se fosse un suo metodo (si noti il richiamo al metodo titolo() all’interno del metodo titolo_generale() ).
Una nota importante: una classe può estendere soltanto un’altra classe. Non potete fargli estendere più di una classe. In compenso possiamo estendere le classi in una cascata concettualmente illimitata; continuando l’esempio sopra, per esempio, nulla vieta di aggiungere la seguente classe:

1
2
3
class TerzaA extends Studente {      
        [...]
}

Leggi Tutto >>