Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Come ignorare "Undefined index"

    Ciao a tutti!
    Ho il seguente problema:

    Ho da poco dovuto acquistare un PC nuovo, sul quale ho installato PHP 5.5.16 e Apache 2.4.

    Purtroppo, un sito che sul PC vecchio (Apache 2.2 e PHP 5.2) funzionava benissimo, ora mi da un sacco di problemi a partire dal seguente:
    ogni riga in cui testo un valore di tipo $_GET, $_POST o $_SESSION, ed in cui non è presente il controllo isset(), mi da l'errore <<Undefined Index>>.
    [es.: if($_GET["valore1"] == "a") mi ritorna l'errore Undefined index: valore1 ]

    Il problema è che sul PC vecchio la mancanza dell'isset non era un problema, mentre ora la pagina PHP va addirittura in "die".

    Voi direte <<E vabè, aggiungi l' isset() dove richiesto e sei a posto>>,
    ma purtroppo non posso farlo, in quanto il sito è MOLTO articolato ed il problema è presente in decine, forse centinaia di punti.

    Purtroppo non pensavo che andando avanti con le versioni, il PHP avrebbe dato questo problema.

    Ho già provato ad installare PHP 5.2, ma stranamente il problema permane.
    Presumo sia dovuto al fatto che comunque la versione di Apache installata è la 2.4.

    Quindi, per evitare di diventare pazzo a cercare le decine/centinaia di punti in cui è presente il problema, la mia domanda è:
    Esiste qualche configurazione da mettere su .htaccess/php.ini/httpd.conf in grado di dire a PHP di ignorare il fatto che non sia presente l' isset() sulle variabili di tipo $_GET, $_POST e $_SESSION?

    Spero in un vostro aiuto perchè ho fatto un sacco di ricerche e tentativi ma non riesco a trovare soluzioni.

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    disabilita la visualizzazione degli errori nel php.ini e non li vedi più (presumo siano tutti Notice)...
    però sarebbe molto meglio se sistemassi il codice...

  3. #3
    Grazie per la risposta

    Purtroppo il problema è che le pagine mi vanno proprio in "die" al verificarsi dell'errore.

    Quindi, se disabilito gli errori, come risultato comunque mi ritorna una pagina bianca senza nessun contenuto

    (PS. sicuramente sistemerò il codice, ma purtroppo attualmente non posso farlo in quanto richiedere molto tempo che al momento non ho)

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    se le pagine vanno in die, non è per gli indici mancanti
    riabilita la visualizzazione degli errori e controlla bene cosa ti segnala a schermo

  5. #5
    Purtroppo ti assicuro che è proprio per quello, perchè mettendo gli isset() la pagina funziona.

    Se invece non li metto e lascio la pagina com'era, la pagina viene caricata tutta bianca, e per vedere gli errori devo forzare col codice:
    error_reporting(E_ALL);
    ini_set("display_errors", 1)
    ;

    Presumo la pagina venga caricata tutta bianca perchè va in die, quindi eventualmente potrebbe bastarmi anche un modo per specificare che in caso di errori le pagine non vadano automaticamente in die,

    Però non so come fare, perchè in rete non ho trovato niente

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Non so che dirti, senza vedere codice e messaggi di errore completi è impossibile anche solo fare ipotesi

  7. #7
    Il codice è semplicemente come quello che mettevo nel post di apertura, ossia:
    if($_GET["cdr"] != "indhg"){

    Con la pagina così com'è PHP pare vada in die e carica una pagina bianca.

    Se aggiungo:
    error_reporting(E_ALL);
    ini_set("display_errors", 1);

    Ecco che mi viene riportato l'errore:
    Undefined index: cdr in C:\Web\miosito.it\index.php on line 51

    Trasformando la riga
    if($_GET["cdr"] != "indhg"){
    come segue:
    if(isset($_GET["cdr"]) && $_GET["cdr"] != "indhg"){
    funziona tutto.

    Quindi la sostanza è che la mancanza dell' isset() nelle condizioni aventi $_GET, $_POST e $_SESSION manda in die le pagine PHP del mio sito, cosa che sul PC vecchio con PHP 5.2 ed apache 2.2 non succedeva.

    Il mio problema è capire come poter aggirare questo ostacolo al momento senza dove mettere mano in centinaia di punti del sito (è un portale molto articolato)

  8. #8
    Piccolo aggiornamento:
    ho modificato il php.ini settando display_errors = on (pensavo fosse settato su "on" già di default) e quindi ora non mi compare più la pagina bianca ma appaiono direttamente gli errori di Undefined index.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2014
    residenza
    Voltati
    Messaggi
    913
    Se usi un editor che suporta il find/replace con le espressioni regolari puoi provare questo:

    Cerca:
    codice:
    if *?\( *?\$_(GET|POST|SESSION)\[(.*?)\](.*?)\) *?{
    Sostituisci:
    codice:
    if(isset($_$1[$2]) && $_$1[$2]$3){
    (Se il tuo editor non le supporta passami i files che te lo faccio io)
    No

  10. #10
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Non sarebbe più facile fare una funzione che testi l'esistenza del posto dell'array e poi ritorni sia il valore sia null ?

    esempio per $_POST

    Codice PHP:
    function my_$_POST($var) {
     
    $value = isset($_POST[$var]) ? $_POST[$var] : null;
     return 
    $value;

    poi in ogni file si fa un include e si sostituiscono i vari array. Cosi nel caso in cui ci fossero degli usi piú complessi degli array non cambierebbe nulla.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.