• User Newbie

    Notice: Undefined variable

    Sto facendo girare in locale un sito in php.
    In rete funziona tutto perfettamente, mentre quando provo a farlo girare in locale vengo sommerso da "Notice: Undefined variable".
    Questo problema è legato sia a variabili che dovrebbe prendere tramite $_GET['var'], mentre nel codice c'è solo $var, sia a variabili che dovrebbe tirare fuori dal database, ad esempio tramite $riga['vardb'], mentre nel codice c'è solo $vardb.
    La connessione al database funziona.
    Vorrei sapere se c'è un parametro nel php.ini (o nel file di configurazione di apache(:():))che devo modificare per evitare questi problemi, oppure mi tocca cambiare a mano tutto il codice.


  • User Attivo

    Mi spieghi questa frase?

    "questo problema è legato sia a variabili che dovrebbe prendere tramite $_GET['var'], mentre nel codice c'è solo $var"

    Non ho capito bene...

    keiske


  • User

    Il problema è questo : il server in rete per motivi di sicurezza disabilita i messaggi di errore. Se uno script dovrebbe usare una variabile e non la trova ti mostrerebbe l'errore ma essendo disabilitato (ripeto per sicurezza) questo messaggio non lo vedi.
    In locale di solito il server di prova che si fa' girare ha abilitati di default questi messaggi (per garantire un corretto debug allo scripter) quindi il messaggio lo vedi.
    In parole povere :
    Non trova una variabile. forse la $_GET['var'] . In versioni vecchie di php mi pare che dire $_GET['var'] era equivalente a dire $var (mi pare!). con le versioni attuali non funzia piu il discorso quindi meglio usare il corretto richiamo alla variabile : $_GET['var'].


  • User Attivo

    Allora, il discorso riguarda la sicurezza e cioè le global var...

    Per motivi di sicurezza se tu in un form di tipo POST passi delle variabili, nella pagina di arrivi le trovi memorizzate come $_POST['nomevar'] e quindi se provi a usare in quella pagina $nomevar ovviamente non te le trova...

    Devi o usare $_POST['nomevar'] oppure in cima alla pagina associ:
    $nomevar = $_POST['nomevar']

    E poi la usi nella pagina come $nomevar

    Stesso discorso per $_GET

    La sicurezza sta nel fatto che se tu potessi usare $var al posto di $_GET['var'] per le variabili passate all'url, mi basterebbe passare all'url quello che mi pare per violarti il sito...

    Infatti poniamo che tu usi nel tuo script una variabile chiamata $ok e dici che se un certo evento si verifica e $ok = 1 allora concedi un privilegio...

    A quel punto io nell'url scrivo sito.php?ok=1 e ottengo il privilegio...

    Ma dal momento che mettere ok=1 nell'url significa assegnare 1 a $_get['ok'] la tua variabile $ok è a sicuro... non prende il valore 1 dell'url e lo script è salvo...

    Ora, dopo tutta questa premessa, potrebbe darsi che tu usando $var al posto di $_GET['var'] ottenga l'errore di variabile non definita perchè di fatto attraverso l'url hai definito $_GET['var'] ma non $var.

    In locale evidentemente la protezione variabili globali è su off e allora ti va, ma online il 99,99% dei server ormai è protetto da secoli...

    keiske

    edit: rileggendo bene il tuo messaggio penso che questo concetto ti fosse già chiaro... spero che l'indicazione sul possibile errore sia quello e magari la spiegazione sarà utile ai posteri 😄


  • User Newbie

    Grazie a entrambi del supporto. 😉
    Comunque ho trovato qualcosa sulla sicurezza sul php, in particolare sulla direttiva register_globals
    questo è il link.
    [http][:][//]php.html.it/guide/lezione/2982/sulla-direttiva-registerglobals/
    Domani lo leggo bene e provo...poi vi dico.


  • User Newbie

    Ho risolto. 😄
    Si deve andare sul php.ini e modificare due righe:
    register_global bisogna metterlo a On
    e poi se non si vogliono visualizzare i warning basta porre uguale error_reporting a E_ALL & ~E_NOTICE.


  • User Attivo

    No guarda che col register global ON hai risolto il problema ma ti sei esposto a una serie di pericoli infinita...

    La soluzione che devi adottare è tenere il valore OFF e invece di usare nei tuoi script le variabili del tipo $var, quelle del tipo $_GET['var'] o $_POST['var'] e via così...

    In alternativa in cima alla pagina assegni:

    $var = $_GET['var']

    E poi usi $var

    Ma ti consiglio caldamente di tenere le variabili a OFF... rileggiti il mio intervento di prima, mi sembrava chiaro... 😄

    keiske


  • User Attivo

    image