funzione switch, colpa di php 5 o del codice?

Salve a tutti, inserisco un frammento della mia pagina index.php per capire come mai lo script funzioni su php 4.x.x e mi dia errore su php 5

<?php require_once('./header.html');  ?>

<?

switch ($id) {

case 'chisiamo':

           include("chisiamo.html");

           break;

/*PAGINA DI DEFAULT*/

   default:

           include("home.html");

}

?>

<?php require_once('./footer.html');  ?>

Il tipo di errore riferito da php 5 è: Notice: Undefined variable: id in index.php on line 3

inviato 11 anni fa
nurse3000
X 0 X

il tuo script non ha nulla di incompatibile con PHP 5

l'errore che ti viene segnalato solo adesso era presente anche prima ma l'impostazione di default di PHP 4 non prevedeva la segnalazione di errori di minima gravità, i cosidetti NOTICE

Adesso invece PHP 5 è configurato per segnalare qualsiasi problema ed ecco che ti si presenta l'errore. Se vuoi (te lo sconsiglio) agendo sul php.ini puoi impedire queste segnalazioni

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Dalla segnalazione di errore ho capito che devo dichiarare la variabile id, ma come?

risposto 11 anni fa
nurse3000
X 0 X

le variabili in PHP non vanno dichiarate prima dell'utilizzo (come avviene in C, C++, Java, ecc.) però se si usano prima che a queste venga assegnato un valore si ottiene un errore.

Nel tuo caso credo che la variabile $id sia in realtà un parametro passato nell'indirizzo della pagina, via URL.

In precedenti versioni di PHP (che avevano di default la direttiva register_global del php.ini settata ad ON) tali parametri venivano automaticamente trasformati in variabili accessibili dallo script. Pertanto probabilmente la variabile $id prelevava il suo valore direttamente dall'URL

Le più recenti versioni di PHP 4 e 5 invece non prevedono questa automativa inizializzazione delle variabili con i valori passati via URL. Bisogna invece utilizzare un arrya speciale, $_GET, che viene riempito dal PHP con tutti i valori passati via URL.

Morale della favola: prova a sostituire $id con $_GET['id'].

Se il problema sparisce allora le mie supposizioni sono corrette (sempre che venga fornito un id via URL)  ;)

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Risolto il problema modificando php.ini escludendo la segnalazione delle E_NOTICE ed applicando lo switch nella forma switch($_GET['id'])

Grazie Mille (euri)

O0

risposto 11 anni fa
nurse3000
X 0 X

ti consiglio comunque di lavorare con i NOTICE abilitati, in modo da realizzare codice più pulito (notice free)

dietro un notice si può nascondere un problema più o meno serio, anche un problema di sicurezza

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda