Oggi vorrei parlare dell'utilizzo delle variabili in PHP e più precisamente della differenza esistente tra variabili locali e variabili globali.
Normalmente la prima volta che ci si scontra con questo problema è quando si cerca di utilizzare una variabile definita nello script all'interno di una funzione:
<?php
$var1 = 'Marco Pegoraro';
function visualizza() { echo $var1; }
visualizza();
?>
Il codice precedente produrrà un errore in quanto la variabile $var1 non è conosciuta all'interno della funzione visualizza().
Questo errore è dovuto al fatto che PHP riserva degli spazi di definizione variabili ben distinti a livello di script, funzione ed, eventualmente, oggetto e metodo.
Questo accorgimento permette di utilizzare nomi di variabili uguali ma con contenuti diversi in parti diverse del codice. E' tuttavia possibile utilizzare variabili di script all'interno di funzioni e metodi.
Cos'è una variabile locale?
Una variabile locale è una variabile che esiste in uno spazio di allocazione ben definito, ad esempio all'interno di una funzione.
Tutte le variabili utilizzate all'interno di una funzione vengono automaticamente eliminate dallo script quando la funzione termina il suo compito.
Un esempio di utilizzo di variabile locale è:
<?php
function oraAttuale() {
$variabile_locale = time();
return $variabile_locale;
}
?>
La variabile $variabile_locale viene creata all'interno della funzione e, dopo l'istruzione di return viene distrutta dall'interprete PHP.
Cos'è una variabile globale?
Una variabile globale è una variabile che esiste in ogni spazio di allocazione utilizzato da un programma.
In PHP non esistono delle vere e proprie variabili globali.
In una funzione, per utilizzare una variabile esterna, è necessario importarla con la direttiva global. La prima porzione di codice dovrà dunque essere modificata come segue:
<?php
$var1 = 'Marco Pegoraro';
function visualizza() {
global $var1;
echo $var1;
}
visualizza();
?>
E' bene notare che la direttiva global non trasforma una variabile locale in una variabile globale ma semplicemente importa la variabile $var1 nello spazio delle variabili della funzione visualizza().
Precisazioni di configurazione:
Dire che in PHP non esistono le variabili globali non è del tutto esatto. Inizialmente (prima della versione 4.3) le variabili definite nello script, i nomi dei campi dei form inviati ed alcune variabili speciali di php venivano effettivamente gestite come variabili globali.
Questa modalità di funzionamento è data dalla direttiva register_globals definita nel file di configurazione di PHP (php.ini). Dalla versione 4.3 dell'interprete PHP questa impostazione è impostata a "off" di default rendendo di fatto inesistenti le variabili globali.
Restano tuttavia alcune variabili speciali che rimangono globali ad ogni blocco di codice. Tali variabili sono istanziate dall'interprete PHP prima dell'esecuzione del nostro codice. Alcuni esempi:
- $_SERVER - Array associativo che contiene alcune informazioni sul server e sulle componenti software.
- $_SESSION - Array associativo utilizzato per le variabili di sessione.
- $_GET, $_POST - Array associativi che contengono i dati inviati da form.

questo il listato:
echo $tab= $_POST['tab'];
/* Connessione e selezione del database */
$connessione = mysql_connect("localhost", "root", "")
or die("Connessione non riuscita: " . mysql_error());
print "connesso
";
mysql_select_db("prospetto_voti_2007") or die("Selezione del database non riuscita");
/* Esecuzione di una query SQL */
$query ="SELECT * FROM ".$tab;
$risultato = mysql_query($query) or die("Query fallita: " . mysql_error() );
$campi = mysql_num_fields($risultato);
$c="";
$vc="";
echo "I valori inseriti sono:"."
";
for ($i=0; $i < $campi; $i++) {
$nome = mysql_field_name($risultato, $i);
echo $campo[$i]=$nome;echo " = ";
echo $vcampo[$i]=$_POST[$campo[$i]];echo "
";
$c=$c.",".$campo[$i];
$vc=$vc.","."'".$vcampo[$i]."'";
}
$c[0]="";
$vc[0]="";
echo $c."
";
echo $vc."
";
echo $query2 = "INSERT INTO ". $tab." values(";
echo $risultato2 = mysql_query($query2."\"". $vc ."\"". ")") or die("Query fallita: " . mysql_error() );
?>
PUOI AIUTARMI?
QUESTO E' L'OUTPUT
alunniconnesso
I valori inseriti sono:
id_alunno = 10861
cognome = CAPUTO
nome = FABIO
datanascita = 1993-12-07
luogonascita = PALERMO
classe = IIA
id_alunno,cognome,nome,datanascita,luogonascita,classe
'10861','CAPUTO','FABIO','1993-12-07','PALERMO','IIA'
INSERT INTO alunni values(Query fallita: Il numero delle colonne non corrisponde al conteggio alla riga 1
CIAO SEB