2010-01-29 7 views
11

Dans une page php je code suivant:Undefined index: Erreur dans le script php

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

Je continue à recevoir Undefined erreur d'index. Sur Googling, je parviens à comprendre que si une page est accessible sans paramètres (dans l'URL) que nous essayons d'accéder, nous pouvons obtenir cette erreur/avertissement. Je crois que si un paramètre n'est pas défini dans l'URL, il devrait simplement retourner vide au lieu de donner un message d'erreur/avertissement.

Je sais qu'il est possible de supprimer les erreurs et avertissement en ajoutant

error_reporting(E_ALL^E_NOTICE);

Mais je ne veux pas le faire.

Ce même travail page très bien sur le serveur web de notre société, mais ne fonctionne pas sur nos clients serveur web.

Pourquoi cela se produit-il?

Comment résoudre ce problème?

+0

La balise 'ne request' est faux ce que j'avais en fait des types est:' $ _REQUEST'. Pourquoi le TAG '$ _REQUEST' est-il converti en 'not' request'' lorsque nous publions? –

Répondre

25

Vous obtenez cette erreur car vous essayez de comparer $_REQUEST['c'] à quelque chose quand $_REQUEST['c'] n'existe pas. La solution consiste à utiliser isset() avant de le comparer. Cela supprimera l'avertissement, car la comparaison n'aura pas lieu si $_REQUEST['c'] n'existe pas.

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

Il est une erreur de niveau E_NOTICE, et votre niveau de error reporting aura une incidence si l'erreur apparaît ou non. Le rapport sur les erreurs de niveau du serveur E_NOTICE de votre client est activé, ce qui explique pourquoi il apparaît ici.

C'est une bonne idée de toujours développer en utilisant E_ALL afin que vous puissiez attraper ce genre d'erreur avant de déplacer votre code vers d'autres serveurs.

1

PHP donne un avis (ce qui n'est pas une erreur: c'est juste un avis) lorsque vous essayez d'utiliser une variable qui n'existe pas, ou un élément de tableau qui n'existe pas. Ceci est juste pour vous aider, et vous ne devriez pas masquer ces avis: ils sont là pour vous aider - par exemple, pour vous aider à détecter les fautes de frappe dans les noms de variables.

Avant d'utiliser cet index de tableau, si ce n'est pas toujours présent, vous devez tester si elle est ici, en utilisant isset:

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

Au lieu de isset() vous pouvez également utiliser: array_key_exists(). La différence entre les deux méthodes est que isset() vérifie également si la valeur de la variable est null.Si c'est null alors isset renvoie false alors que array_key_exists() renvoie toujours true si la clé existe (quelle que soit sa valeur). E.g .:

$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 

Selon le contexte, il est important de le distinguer. Dans votre cas, je ne pense pas que cela importe peu, car (je suppose) un paramètre de requête ne sera jamais null (sauf que l'on écrase manuellement).

5

Une autre solution consiste à utiliser les éléments suivants:

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

Vous pouvez également, si vous préférez retourner une valeur autre que vide, en plaçant une valeur par défaut dans le dernier jeu de guillemets simples, par exemple

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

ou retourner un autre type de variable, par exemple un entier:

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