"Opmerking: Undefined variable", "Notice: Undefined index", en "Notice: Undefined offset" met PHP

Ik draai een PHP script en blijf fouten krijgen zoals:

Notice: ongedefinieerde variabele: my_variable_name in C:³³³'index.php op regel 10

Opmerking: Ongedefinieerde index: my_index in C:\wamp-wwww\mypath.php op regel 11

Lijn 10 en 11 zien er zo uit:

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

Wat is de betekenis van deze foutmeldingen?

Waarom verschijnen ze plotseling? Ik heb dit script jaren gebruikt en ik heb nooit problemen gehad.

Hoe los ik ze op?


Dit is een Algemene Referentievraag voor mensen om naar te linken als duplicaat, in plaats van het probleem steeds opnieuw te moeten uitleggen. Ik voel dat dit nodig is omdat de meeste real-world antwoorden op deze kwestie zeer specifiek zijn.

Gerelateerde Meta discussie:

Probeer deze.

V1: Deze mededeling betekent dat $varname niet gedefinieerd in het huidige bereik van het script.

Q2: Gebruik van isset(), empty() condities voordat een verdachte variabele wordt gebruikt werkt goed.

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

Of, als een snelle en vuile oplossing:

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

Opmerking over de sessies:

Commentaren (2)

Over het algemeen vanwege "slechte programmering" en een mogelijkheid voor fouten nu of later.

  1. Als het'een fout is, maak dan eerst een goede toewijzing aan de variabele: $varname=0;
  2. Als het echt alleen soms gedefinieerd is, test er dan op: if (isset($varname)), voordat je het gebruikt
  3. Als het komt doordat je het verkeerd hebt gespeld, corrigeer dat dan
  4. Misschien zelfs de waarschuwingen in je PHP-settings uitzetten
Commentaren (4)

Het betekent dat je een variabele aan het testen, evalueren of afdrukken bent, waaraan je nog niets hebt toegekend. Het betekent dat je of een typefout hebt, of dat je eerst moet controleren of de variabele wel ergens op geïnitialiseerd is. Controleer je logische paden, het kan ingesteld zijn in één pad maar niet in een ander.

Commentaren (0)