2010-01-29 12 views
11

In una pagina PHP che ho seguente codice:Undefined index: Errore nello script php

if($_REQUEST['c']!="") // I get error on this line itself. Why? 
{ 
$pidis=(int)($_REQUEST['c']); 
} 

continuo a ricevere l'errore di indice non definito.

Su Ricerca Google, capisco che se una pagina è un accesso senza parametri (in URL) a cui stiamo tentando di accedere, possiamo ottenere questo errore/avviso. Credo che se un parametro non è definito nell'URL dovrebbe semplicemente tornare vuoto invece di dare un messaggio di errore/avvertimento.

so che è possibile per eliminare gli errori e di allarme con l'aggiunta di

error_reporting(E_ALL^E_NOTICE);

Ma io non voglio fare questo.

Questa stessa pagina funziona perfettamente sul server Web della nostra azienda ma non funziona sul server Web dei nostri clienti.

Perché sta succedendo?

Come risolvere questo problema?

+0

Il tag 'non request' è falso quello che avevo in realtà i tipi è:' $ _REQUEST'. Perché il tag "$ _REQUEST' viene convertito in" not 'request'" quando pubblichiamo? –

risposta

25

Si sta verificando questo errore perché si sta tentando di confrontare $_REQUEST['c'] in qualcosa quando $_REQUEST['c'] non esiste.

La soluzione è utilizzare isset() prima di confrontarlo. Questo rimuoverà l'avviso, poiché il confronto non avverrà se $_REQUEST['c'] non esiste.

if(isset($_REQUEST['c']) && $_REQUEST['c']!="") 
{ 
$pidis=(int)($_REQUEST['c']); 
} 

è un errore E_NOTICE livello, e il vostro livello di error reporting interesserà se l'errore si presenta o meno. Il server del tuo cliente ha la segnalazione degli errori di livello E_NOTICE attivata, motivo per cui viene visualizzata qui.

È una buona idea sviluppare sempre utilizzando E_ALL in modo da poter rilevare questo tipo di errore prima di spostare il codice su altri server.

1

PHP sta dando un avviso (che non è un errore: è solo un avviso) quando si sta tentando di utilizzare una variabile che non esiste o un elemento di matrice che non esiste.

Questo è solo per aiutarti e non dovresti mascherare quelle notifiche: sono qui per aiutarti - per esempio, per aiutarti a rilevare errori di battitura nei nomi delle variabili.

Prima di usare tale indice array, se non è sempre presente, è necessario verificare se è qui, utilizzando isset:

if (isset($_REQUEST['c']) && $_REQUEST['c']!="") { 
    // ... 
} 
5

Invece di isset() è anche possibile utilizzare: array_key_exists().

La differenza tra entrambi i metodi è che isset() controlla anche se il valore della variabile è null.Se è null allora isset restituisce false mentre array_key_exists() restituisce sempre true se la chiave esiste (non importa quale valore). Es .:

$array = array('c' => null); 

var_dump(isset($array['c']))); // isset() returns FALSE here 
var_dump(array_key_exists($array['c']); //array_key_exists() returns TRUE 

A seconda del contesto, è importante distinguerlo. Nel tuo caso non credo che importi non importa, poiché (suppongo) un parametro di richiesta non sarà mai null (tranne che uno lo sovrascrive manualmente).

5

Un'altra soluzione è quella di utilizzare il seguente:

$pidis = isset($_REQUEST['c']) ? $_REQUEST['c'] : ''; 

È anche possibile, se si preferisce restituire un valore diverso da vuoto, mettendo un valore di default all'interno del set finale di virgolette singole, ad esempio,

$pidis = isset($_REQUEST['c']) ? $_REQUEST['c'] : 'Default Value'; 

o restituire un tipo di variabile diverso, ad esempio un numero intero:

$pidis = isset($_REQUEST['c']) ? $_REQUEST['c'] : 34; 
Problemi correlati