Remarque : "Avis : variable non définie", "Avis : index non défini", "Avertissement : clé de tableau non définie", et "Avis : décalage non défini" en utilisant PHP
P粉046878197
P粉046878197 2023-07-20 11:17:02
0
2
845

J'exécute un script PHP mais je reçois toujours une erreur comme celle-ci :

Avis : Variable non définie : my_variable_name dans C:wampwwwmypathindex.php à la ligne 10

Avis : Index non défini : my_index C:wampwwwmypathindex.php en ligne 11

Attention : clé de tableau non définie "my_index" dans C:wampwwwmypathindex.php à la ligne 11

Les lignes 10 et 11 ressemblent à ceci :

echo "My variable value is: " . $my_variable_name;
echo "My index value is: " . $my_array["my_index"];

Que signifient ces messages d'erreur ?

Pourquoi apparaissent-ils soudainement ? J'utilise ce script depuis plusieurs années et je n'ai jamais eu de problèmes auparavant.

Comment corriger ces erreurs ?


P粉046878197
P粉046878197

répondre à tous(2)
P粉116631591

Essayez ceci

// recommended solution for recent PHP versions
$user_name = $_SESSION['user_name'] ?? '';

// pre-7 PHP versions
$user_name = '';
if (!empty($_SESSION['user_name'])) {
     $user_name = $_SESSION['user_name'];
}

Alternativement, il existe une solution simple et rapide :

// not the best solution, but works
// in your php setting use, it helps hiding site wide notices
error_reporting(E_ALL ^ E_NOTICE);
P粉722521204

Ce message d'erreur est destiné à aider les programmeurs PHP à détecter les fautes de frappe ou les erreurs lors de l'accès à des variables (ou éléments de tableau) inexistantes. Par conséquent, un bon programmeur doit :

  1. Assurez-vous que chaque variable ou clé de tableau est définie avant de l'utiliser. Si vous devez utiliser une variable dans une fonction, vous devez la transmettre en paramètre à la fonction.
  2. Suivez ce bug et corrigez-le comme n'importe quel autre bug. Cela peut indiquer une faute de frappe ou une procédure qui ne renvoie pas les données attendues.
  3. Seulement dans de rares cas indépendants de la volonté du programmeur, du code doit être ajouté pour contourner cette erreur. Mais cela ne doit pas devenir une habitude aveugle.

Remarque/Avertissement : variable non définie

Bien que PHP ne nécessite pas de déclaration de variable, il est recommandé de la déclarer pour éviter certaines failles de sécurité ou bugs où l'on pourrait oublier d'attribuer une valeur à une variable qui sera utilisée plus tard dans le script. Lorsqu'une variable n'est pas déclarée, PHP génère une erreur de niveau E_WARNING.

Cet avertissement aide les programmeurs à repérer les noms de variables mal orthographiés ou des erreurs similaires (par exemple, l'attribution d'une valeur à une variable lorsqu'une condition est évaluée comme fausse). De plus, d'autres problèmes peuvent survenir avec les variables non initialisées. Comme indiqué dans le manuel PHP,

Cela signifie que la variable peut obtenir une valeur du fichier inclus, et cette valeur sera utilisée à la place de la valeur nulle attendue lors de l'accès à une variable non initialisée, ce qui peut conduire à des résultats imprévisibles. Pour éviter cela, c'est une bonne idée d'initialiser toutes les variables de votre fichier PHP avant de les utiliser.

Il existe plusieurs façons de résoudre ce problème :

  1. L'approche recommandée consiste à déclarer chaque variable avant de l'utiliser. De cette façon, vous ne verrez cette erreur que si vous faites réellement une erreur et essayez d'utiliser une variable qui n'existe pas, c'est pourquoi ce message d'erreur apparaît.

    //Initializing a variable
     $value = ""; //Initialization value; 0 for int, [] for array, etc.
     echo $value; // no error
     echo $vaule; // an error pinpoints a misspelled variable name
  • Un cas particulier est celui où une variable est définie mais n'est pas visible dans la fonction. En PHP, les fonctions ont leur propre portée de variable. Si vous devez utiliser une variable externe dans une fonction, sa valeur doit être transmise en paramètre de la fonction :

    function test($param) {
        return $param + 1; 
    }
    $var = 0;
    echo test($var); // now $var's value is accessible inside through $param
  1. Utilisez l'opérateur de coalescence nul pour supprimer les erreurs. Mais gardez à l’esprit que de cette façon, PHP ne pourra pas vous avertir que vous avez utilisé le mauvais nom de variable.

    // Null coalescing operator
     echo $value ?? '';

    Pour les anciennes versions de PHP (< 7.0), isset() avec ternaire peut être utilisé

    echo isset($value) ? $value : '';

    Veuillez noter que bien qu'il s'agisse essentiellement d'une suppression d'erreurs, elle ne fonctionne que sur des erreurs spécifiques. Par conséquent, cela peut empêcher PHP de vous aider en marquant les variables comme non initialisées.

  2. Utilisez l'opérateur @ pour supprimer les erreurs. Il est conservé ici pour des raisons historiques, mais sérieusement, cela n'aurait jamais dû arriver.

Remarque : Il est fortement recommandé de ne mettre en œuvre que le premier point.

Remarque : index non défini/décalage non défini/avertissement : clé de tableau non définie

Cette astuce/avertissement apparaît lorsque vous (ou PHP) essayez d'accéder à un index non défini d'un tableau.

Tableau interne

Exactement la même attitude doit être adoptée lorsqu'il s'agit de tableaux internes, c'est-à-dire de tableaux définis dans votre code : initialisez toutes les clés avant utilisation. De cette façon, l’erreur est capable de faire le travail prévu : informer le programmeur d’une erreur dans le code. La démarche est donc la même :

Suggestion : Déclarez les éléments du tableau :

//Initializing a variable
    $array['value'] = ""; //Initialization value; 0 for int, [] for array, etc.
    echo $array['value']; // no error
    echo $array['vaule']; // an error indicates a misspelled key

Le cas particulier est celui où une fonction renvoie un tableau ou une autre valeur telle que null ou false. Avant de tenter d'accéder à un élément du tableau, un test doit être fait, par exemple :

$row = $stmt->fetch();
if ($row) { // the record was found and can be worked with
    echo $row['name']; 
}

Tableau externe

Pour les tableaux externes (comme $_POST/$_GET/$_SESSION ou entrée JSON), la situation est différente car le programmeur n'a aucun contrôle sur le contenu de ces tableaux. Par conséquent, il est raisonnable de vérifier si une certaine clé existe ou même d'attribuer une valeur par défaut à une clé manquante.

  • Lorsqu'un script PHP contient un formulaire HTML, naturellement, il n'y aura aucun contenu de formulaire au premier chargement. Par conséquent, un tel script devrait vérifier si le formulaire a été soumis.

    // for POST forms check the request method
      if ($_SERVER['REQUEST_METHOD'] === 'POST') {
          // process the form
      }
      // for GET forms / links check the important field
      if (isset($_GET['search'])) {
          // process the form
      }
  • Certains éléments de formulaire HTML, comme les cases à cocher, ne seront pas envoyés au serveur s'ils ne sont pas sélectionnés. Dans ce cas, il est logique d’utiliser l’opérateur de fusion nul pour attribuer une valeur par défaut.

    $agreed = $_POST['terms'] ?? false;
  • Les éléments facultatifs de chaîne de requête ou les cookies doivent être traités de la même manière.

    $limit = $_GET['limit'] ?? 20;
      $theme = $_COOKIE['theme'] ?? 'light';

Mais l'affectation doit être effectuée au tout début du script. Validez toutes les entrées, attribuez-les à des variables locales et utilisez-les dans tout votre code. De cette façon, chaque variable à laquelle vous accédez existera intentionnellement.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!