Utilisation de PHP "Attention : variable non définie", "Attention : index non défini", "Attention : clé de tableau non définie" et "Attention : décalage non défini"
P粉851401475
P粉851401475 2023-08-23 11:45:50
0
2
445
<p>J'exécute un script PHP et je continue de recevoir des erreurs comme celle-ci : </p> <blockquote> <p>Remarque : Variable non définie : my_variable_name dans C:wampwwwmypathindex.php à la ligne 10</p> <p>Remarque : Index non défini : my_index C:wampwwwmypathindex.php ligne 11</p> <p>Attention : la clé de tableau 'my_index' n'est pas définie dans C:wampwwwmypathindex.php à la ligne 11</p> </blockquote> <p>Les lignes 10 et 11 ressemblent à ceci : </p> <pre class="brush:php;toolbar:false;">echo "Ma valeur de variable est : " $my_variable_name; echo "Ma valeur d'index est : " $my_array["my_index"];</pre> <p>Que signifient ces messages d’erreur ? </p> <p>Pourquoi apparaissent-ils soudainement ? J'utilise ce script depuis des années et je n'ai jamais eu de problèmes. </p> <p>Comment les réparer ? </p> <heure /> <blockquote> <p><sub><strong>Il s'agit d'une question de référence générale</strong> afin que les utilisateurs puissent accéder à des questions en double sans avoir à expliquer la question encore et encore. Je pense que cela est nécessaire car la plupart des réponses concrètes à cette question sont très spécifiques. </sub></p> <p><sub>Méta-discussion connexe :</sub></p> <ul> <li><sub>Que dois-je faire en cas de questions en double ? </sub></li> <li><sub>La « question de référence » a-t-elle un sens ? </sub></li> </ul> </blockquote><p><br /></p>
P粉851401475
P粉851401475

répondre à tous(2)
P粉644981029

Essayez-les

// 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'];
}

Ou, comme solution rapide et sale :

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

Remarques sur les séances :

P粉787934476

Ce message d'erreur est destiné à aider les programmeurs PHP à trouver des fautes de frappe ou des erreurs lors de l'accès à une variable (ou un élément de tableau) qui n'existe pas. Alors un bon programmeur :

  1. Assurez-vous que chaque variable ou clé de tableau est définie lorsqu'elle est utilisée. Si vous devez utiliser une variable dans une fonction, vous devez la transmettre en paramètre à la fonction.
  2. Soyez conscient de cette erreur et procédez à sa correction comme vous le feriez pour toute autre erreur. Cela peut signifier qu'il y a une faute de frappe ou qu'une procédure ne renvoie pas les données qu'elle devrait.
  3. Ce n'est que dans de rares cas, lorsque les choses échappent au contrôle du programmeur, que vous devez ajouter du code pour éviter cette erreur. Mais cela ne devrait jamais être une habitude aveugle.

Notification/Avertissement : variable non définie

Bien que PHP ne nécessite pas de déclaration de variable, il le recommande pour éviter certaines failles de sécurité ou bugs où les gens oublient d'attribuer une valeur à une variable qui est utilisée plus tard dans le script. PHP émet une erreur de niveau E_WARNING lorsqu'une variable n'est pas déclarée.

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

Cela signifie qu'une variable peut obtenir une valeur à partir d'un fichier inclus, et cette valeur sera utilisée à la place du null attendu pour accéder à une variable non initialisée, ce qui peut conduire à des résultats imprévisibles. Pour éviter cela, il est préférable d'initialiser toutes les variables des fichiers PHP avant utilisation.

Méthodes pour gérer les problèmes :

  1. Recommandation : Déclarez chaque variable avant de l'utiliser. De cette façon, vous ne verrez cette erreur que si vous faites l'erreur d'essayer d'utiliser une variable qui n'existe pas - c'est exactement pourquoi ce message d'erreur existe.

    //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
  • Cas particulier où la variable est définie mais non visible dans la fonction. Les fonctions en PHP ont leur propre portée de variable, si vous devez utiliser une variable externe dans une fonction, sa valeur doit être passée 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. Supprimez les erreurs à l’aide de l’opérateur de coalescence nul. Mais rappelez-vous, de cette façon, PHP ne pourra pas vous avertir que vous avez utilisé un mauvais nom de variable.

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

    Pour les anciennes versions de PHP (

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

    Veuillez noter qu'il s'agit toujours essentiellement d'une suppression d'erreur, mais uniquement pour une erreur spécifique. Par conséquent, cela peut empêcher PHP de vous aider en marquant des variables uniformes.

  2. Utilisez le @operator pour supprimer les erreurs. Partir d'ici pour des raisons historiques, mais sérieusement, cela ne devrait pas arriver.

Remarque : Fortement recommandé de mettre en œuvre uniquement le point 1.

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

Cet avis/avertissement se produit lorsque vous (ou PHP) essayez d'accéder à un index non défini d'un tableau.

Tableau interne

L'attitude doit être exactement la même lorsqu'il s'agit de tableaux internes définis dans le code : il suffit d'initialiser toutes les clés avant utilisation. De cette façon, le bug fera son travail prévu : informer les programmeurs des erreurs dans leur code. La méthode est donc la même :

Recommandé : Déclarez les éléments de votre 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

Un cas particulier est lorsque certaines fonctions renvoient des tableaux ou d'autres valeurs (par exemple nullfalse). Ensuite, vous devez effectuer un test avant de tenter d'accéder aux éléments du tableau, comme

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

Tableau externe

Pour les tableaux externes (tels que $_POST / $_GET / $_SESSION ou entrée JSON), la situation est un peu différente, car le programmeur n'a aucun contrôle sur le contenu de ces tableaux. Il est donc raisonnable de vérifier si certaines clés existent ou même d’attribuer des valeurs par défaut aux clés manquantes.

  • Lorsqu'un script PHP contient un formulaire HTML, il est naturel qu'il n'y ait aucun contenu de formulaire lors de son premier chargement. Un tel script devrait donc 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 (tels que les cases à cocher) ne seront pas envoyés au serveur s'ils ne sont pas cochés. Dans ce cas, il y a une raison d'utiliser l'opérateur de coalescence nul pour attribuer une valeur par défaut

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

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

Mais le devoir doit être fait au tout début du script. Validez toutes les entrées, attribuez-les à des variables locales et utilisez-les dans tout votre code. Par conséquent, chaque variable à laquelle vous accédez existera volontairement.

Connexe :

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!