2010-01-29 19 views
11

En una página php que he siguiente código:Undefined index: Error en el script php

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

me siguen dando error de índice Indefinido.

En Google puedo entender que si se accede a una página sin parámetros (en URL) a los que estamos intentando acceder, podemos obtener este error/advertencia. Creo que si un parámetro no está definido en la URL, debería devolverlo vacío en lugar de dar un mensaje de error/advertencia.

sé que es posible suprimir errores y advertencia mediante la adición de

error_reporting(E_ALL^E_NOTICE);

Pero no quiero hacer esto.

Esta misma página funciona bien en el servidor web de nuestra compañía, pero no funciona en el servidor web de nuestros clientes.

¿Por qué sucede esto?

¿Cómo solucionar este problema?

+0

La etiqueta 'no request' es falso lo que tenía en realidad tipos es:' $ _REQUEST'. ¿Por qué la etiqueta '$ _REQUEST' se convierte a 'no' solicitud' cuando publicamos? –

Respuesta

25

Obtiene ese error porque está intentando comparar $_REQUEST['c'] con algo cuando $_REQUEST['c'] no existe.

La solución es utilizar isset() antes de compararlo. Esto eliminará la advertencia, ya que la comparación no ocurrirá si $_REQUEST['c'] no existe.

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

Es un error E_NOTICE nivel, y su nivel de error reporting afectará si el error se presenta o no. El servidor de su cliente tiene E_NOTICE informe de errores de nivel activado, por lo que aparece allí.

Es una buena idea desarrollar siempre usando E_ALL para que pueda detectar este tipo de error antes de mover su código a otros servidores.

1

PHP está dando un aviso (que no es un error: es solo un aviso) cuando está tratando de usar una variable que no existe, o un elemento de matriz que no existe.

Esto es solo para ayudarlo, y no debe enmascarar esos avisos: están aquí para ayudarlo, por ejemplo, para ayudarlo a detectar errores tipográficos en nombres de variables.

Antes de utilizar que el índice de matriz, si no siempre está presente, debe probar si es aquí, usando isset:

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

En lugar de isset() también se puede utilizar: array_key_exists().

La diferencia entre ambos métodos es que isset() comprueba también si el valor de la variable es null.Si es null, entonces isset devuelve false, mientras que array_key_exists() devuelve siempre true si la clave existe (no importa qué valor). Por ej .:

$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 

Dependiendo del contexto, es importante distinguir esto. En su caso, no creo que importe, ya que (supongo) un parámetro de solicitud nunca será null (excepto que uno sobrescribe manualmente).

5

Otra solución es utilizar el siguiente:

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

También puede, si lo prefiere para devolver un valor distinto de vacío, mediante la colocación de un valor predeterminado dentro del conjunto final de comillas simples, por ejemplo,

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

o devolver un tipo de variable diferente, por ejemplo un entero:

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