Cet article vous explique comment résoudre l’erreur Notice: Undefined variable, index et offset que vous pourrez rencontrer en PHP. Cette erreur est facile à repérer dans les journaux des messages d’avertissement et d’erreur.

Comment corriger l’erreur « Undefined Variable »

Se baser sur la valeur par défaut d’une variable non initialisée est sujet à caution dans le cas de l’intégration d’un fichier dans un autre qui utilise le même nom de variable. C’est aussi un risque majeur de sécurité lorsque register_globals est activé. Une erreur de niveau E_NOTICE est produite en cas de travail avec des variables non initialisées, mais pas en cas d’ajout d’éléments au tableau non initialisé. Le montage du langage isset() peut être exploitée pour révéler si une variable a déjà été engagée. De plus, la clé idéale est empty() car elle ne génère pas de message d’avertissement ou d’erreur si la variable n’est pas initialisée.

Aucun avis n’est produite si la variable n’existe pas. Cela veut dire que empty() est essentiellement l’équivalent concis de !isset($var) || $var == false.

Cela signifie que vous pourriez utiliser uniquement empty() pour déterminer si la variable est définie, et en plus il vérifie la variable par rapport à ce qui suit, 0, 0.0, “”, “0”, null, false ou [].


Exemple :

$o = [];
@$var = ["",0,null,1,2,3,$foo,$o['monIndex']];
array_walk($var, function($v) {
    echo (!isset($v) || $v == false) ? 'true ' : 'false';
    echo ' ' . (empty($v) ? 'true' : 'false');
    echo "\n";
});

Testez l’extrait ci-dessus dans votre éditeur PHP.

Bien que PHP n’exige pas la déclaration des variables, il la recommande afin d’éviter certaines failles de sécurité ou bugs où l’on oublierait de donner une valeur à une variable qui sera utilisée plus tard dans le script. Ce que PHP produit dans le cas de variables non déclarées est de communiquer une erreur de très bas niveau, E_NOTICE, qui n’est même pas signalée par défaut, mais que le manuel conseille d’autoriser pendant le développement.

Les moyens simples de résoudre le problème :

  1. Méthode recommandée : Déclarez vos variables, par exemple lorsque vous essayez d’ajouter une chaîne de caractères à une variable indéfinie. Ou utilisez isset() / !empty() pour analyser si elles sont déclarées avant de les référencer, comme dans le cas ci-après :
//Initialisation des variables
$value = ""; 
//Initialisation des value; Exemples
//"" Quand vous voulez ajouter des choses plus tard
//0  Lorsque vous voulez ajouter des chiffres plus tard
//isset()
$'value'= isset($_POST['value']) ? $_POST['value'] : '';
//empty()
$'value'= !empty($_POST['value']) ? $_POST['value'] : '';

Cela est devenu beaucoup plus propre depuis PHP 7.0, vous pouvez maintenant utiliser l’opérateur null coalesce comme suit :

// Opérateur de coalescence des nuls 
// Il n'est pas nécessaire d'initialiser explicitement la variable.
$value = $_POST['value'] ?? '';

   2- Spécifier un gestionnaire d’erreur personnalisé pour E_NOTICE et rediriger les messages hors de la sortie standard (peut-être vers un fichier journal) :

set_error_handler('myHandlerForMinorErrors', E_NOTICE | E_STRICT)

3- Désactiver E_NOTICE des rapports. Un moyen rapide d’exclure uniquement E_NOTICE est de le faire comme suit :

error_reporting( error_reporting() & ~E_NOTICE )

4- Supprimez l’erreur avec l’opérateur @.

Notez bien : Il est fortement recommandé de n’appliquer que le point 1.

Comment résoudre les erreur “Notice: Undefined index et offset?

Ce message apparaît lorsque vous (ou PHP) essayez d’accéder à un index indéfini d’un tableau.

Quelques conseils pour résoudre ces erreurs :

  1. Vérifiez si l’index existe avant d’y accéder. Pour ce fait, vous pouvez vous servir de isset() ou array_key_exists() :
//isset()
$value = isset($array['my_index']) ? $array['my_index'] : '';
//array_key_exists()
$value = array_key_exists('my_index', $array) ? $array['my_index'] : '';

2. La construction du langage list() peut générer ceci lorsqu’elle tente d’accéder à un index de tableau qui n’existe pas :

ist($a, $b) = array(0 => 'a');
//ou
list($one, $two) = explode(',', 'test string');

Deux variables sont utilisées pour accéder à deux éléments de tableau, mais il n’y a qu’un seul élément de tableau, l’indice 0, ce qui génère l’erreur suivante :

Notice: Undefined offset:1

Remarques :

Les variables $_POST / $_GET / $_SESSION

Les appréciations ci-dessus apparaissent souvent lorsque l’on travaille avec $_POST, $_GET ou $_SESSION. Pour $_POST et $_GET, vous devez simplement vérifier si l’index existe ou non avant de les utiliser. Pour $_SESSION, vous devez vous assurer que la session a été lancée avec session_start() et que l’index existe également.

Notez également que ces trois variables sont des superglobales et sont en majuscules.


En conclusion, vous pouvez résoudre les Notice de variable, d’index et de offset non définis de plusieurs façons. Tout d’abord, si la variable est indéfinie, cela signifie simplement que vous n’avez pas déclaré de variable. Vous devez suivre toutes les directives lors de la déclaration de la variable pour éviter l’erreur. Ensuite, lorsque vous transférez des données vers une autre page, vous devez vérifier si une variable est définie pour éviter la notice d’index indéfini. Enfin, il serait préférable de s’assurer que des valeurs sont attribuées aux variables pour éviter les messages d’erreur de type “offset indéfini”. Vous pouvez ignorer les erreurs redondantes, mais ce n’est pas recommandé.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

10 + dix-sept =