2009-08-07 21 views
8

que el informe de errores simplemente habilitado y ¡qué sorpresa tengo probablemente miles, si no cientos de avisos como este¿Cómo deshacerse de cientos de avisos de índice PHP indefinido?

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

entiendo que son porque yo estoy llamando a una variable withoutsetting o lo que sea, pero es que hay una manera más fácil manera de establecer, por ejemplo, si una página tiene 50 variables que informa esto, ¿hay alguna manera más fácil de codificar esa página correctamente para arreglarlas todas?

Y no me refiero a simplemente ocultarlos Creo que sería mejor para solucionarlos

aquí es un ejemplo de esa línea que he publicado

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

Respuesta

13

por lo general les gusta usar ternary declaraciones en la parte superior de mis guiones para inicializar los valores.


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

Claro que probablemente podría utilizar un enfoque más genérico, pero ese método puede resultar problemático ya que las diferentes variables pueden tener diferentes valores predeterminados.

+1

De hecho, uso esto para paginar $ page = (! Empty ($ _ GET ['page']))? $ _GET ['página']: 0; y el error se ha ido cuando estoy en una página, pero si no se establece ninguna página, obtengo el error de índice – JasonDavis

+0

, tenga en cuenta que existe una diferencia entre empty y isset. – rezzif

+0

Y array_key_exists(). –

0

elementos de matriz Comprobar primero utilizando isset () o vacío().

por ejemplo,

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

Recomendaría usar isset dado que vacío será verdadero si el valor es 0 y preguntó cómo detener las advertencias indefinidas. – rezzif

+2

también, te estás perdiendo un cierre paren. – troelskn

7

Como rezzif mencionó lo que debe hacer es verificar con una llamada isset(). Si está utilizando muchas matrices y no quiere volver y agregar varias llamadas a isset(), siempre puede usar una función. Algo así como:

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

Posteriormente, se podría cambiar su sentencia if a algo como:

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

Si todas las comprobaciones que se realiza están en contra de $_GET siempre se puede Nix el primer parámetro de la función y hardcode $ _GET en él, mi ejemplo asume que estás haciendo esto contra varias matrices diferentes.

Esta solución no es necesariamente la más elegante, pero debería hacer el trabajo.

+0

gracias Puedo probar esto – JasonDavis

+2

+1 me gusta esta respuesta. Le da la opción de hacerlo en todos los ámbitos. Una adición podría ser agregar un parámetro opcional para un valor predeterminado. function get_index ($ array, $ index, $ default = null) { return isset ($ array [$ index])? $ array [$ index]: $ default; } – rezzif

0

¡Deshazte de los avisos de índice indefinido GET y POST para siempre! Coloque esto en la parte superior de su 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 
?>