2009-08-07 3 views
8

Ho la segnalazione degli errori appena attivato e wow che uno shock devo probabilmente migliaia se non centinaia di avvisi come questoCome sbarazzarsi di centinaia di avvisi di indice indefiniti di PHP?

Notice: Undefined index: action in C:\webserver\htdocs\header.inc.php on line 18 

Mi rendo conto che sono perché sto chiamando una variabile withoutsetting esso o qualsiasi altra cosa, ma c'è un più facile modo per impostare ad esempio se una pagina ha 50 variabili che sta segnalando questo, c'è un modo più semplice per codificare quella pagina correttamente per correggerli tutti?

E io non intendo nascondere semplicemente penso che sarebbe meglio per risolverli

ecco un esempio di quella linea che ho postato

if ($_GET['p'] == "account.edit.topfriends" || $_GET['action'] == "newmember" || $_GET['p'] == "account.profile.name") { 
    //some more code here 
} 

risposta

13

Io di solito piace usare ternary istruzioni nella parte superiore dei miei script per inizializzare i valori.


$_GET['p'] = (isset($_GET['p']) ? $_GET['p'] : 'default'); 

Certo, probabilmente si potrebbe utilizzare un approccio più generico, ma questo metodo può rivelarsi problematico come variabili diverse possono avere diversi valori di default.

+1

In realtà lo uso per paging $ page = (! Vuoto ($ _ GET ['pagina']))? $ _GET ['page']: 0; e l'errore è scomparso quando sono su una pagina ma se nessuna pagina è impostata, ottengo l'errore indice – JasonDavis

+0

nota che c'è una differenza tra vuoto ed isset. – rezzif

+0

E array_key_exists(). –

0

elementi dell'array Controllare prima usando isset () o vuoto().

per esempio,

if ((!empty($_GET['p'] && $_GET['p'] == "account.edit.topfriends") || 
    (!empty($_GET['action'] && $_GET['action'] == "newmember")) { 
    //some more code here 
} 
+1

Si consiglia di utilizzare isset dato che vuoto sarà true se il valore è 0 e ha chiesto come interrompere gli avvisi non definiti. – rezzif

+2

inoltre, ti manca un paren di chiusura. – troelskn

7

Come rezzif ha detto che cosa è necessario fare è verificare con una chiamata isset(). Se usi molto gli array e non vuoi tornare indietro e aggiungere un gruppo di chiamate a isset() puoi sempre avere una funzione. Qualcosa di simile:

function get_index($array, $index) { 
    return isset($array[$index]) ? $array[$index] : null; 
} 

Allora si potrebbe cambiare il vostro se-dichiarazione a qualcosa di simile:

if (get_index($_GET, 'p') == "account.edit.topfriends" || get_index($_GET, 'action') == "newmember" || get_index($_GET, 'p') == "account.profile.name") { 
    //some more code here 
} 

Se tutte le verifiche viene fatto sono contro $_GET si può sempre Nix il primo parametro della funzione e hardcode $ _Volvalo, il mio esempio presume che tu stia facendo questo contro diversi array diversi.

Questa soluzione non è necessariamente la più elegante, ma dovrebbe portare a termine il lavoro.

+0

grazie Potrei provare questo – JasonDavis

+2

+1 mi piace questa risposta. Gli dà la possibilità di farlo attraverso la lavagna. Un'aggiunta potrebbe essere quella di aggiungere un parametro facoltativo per un valore predefinito. function get_index ($ array, $ index, $ default = null) { return isset ($ array [$ index])? $ array [$ index]: $ default; } – rezzif

0

Sbarazzarsi di GET e POST avvisi dell'indice indefiniti (s) per sempre! Metti questo nella parte superiore del documento ...

<?php 
// Get rid of GET and POST undefined index notice forever! Put this in the top of your document... 
class InputData { 
    function get($p) { 
      return isset($_GET[$p]) ? $_GET[$p] : null; 
    } 

    function post($p) { 
      return isset($_POST[$p]) ? $_POST[$p] : null; 
    } 

    function get_post($p) { 
      return $this->get($p) ? $this->get($p) : $this->post($p); 
    } 
} 
$input = new InputData; 

$page = $input->get('p'); // Look in $_GET 
$page = $input->post('p'); // Look in $_POST 
$page = $input->get_post('p'); // Look in both $_GET and $_POST 
?> 
Problemi correlati