"Meddelelse: Udefineret variabel", "Bemærk: Udefineret indeks", og "Bemærk: Udefineret offset" ved hjælp af PHP

Jeg kører et PHP-script og modtager fortsat fejl som:

Notice: Udefineret variabel: my_variable_name i C:\wamp\www\mypath\index.php på linje 10

Bemærk: Udefineret indeks: my_index i C:\wamp\www\mypath\index.php på linje 11

Linje 10 og 11 ser således ud:

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

Hvad er betydningen af disse fejlmeddelelser?

Hvorfor vises de pludselig? Jeg har brugt dette script i årevis, og jeg har aldrig haft problemer.

Hvordan kan jeg rette dem?


Dette er et generelt reference-spørgsmål, som folk kan linke til som duplikat, i stedet for at skulle forklare problemet igen og igen. Jeg føler, at dette er nødvendigt, fordi de fleste reelle svar på dette spørgsmål er meget specifikke.

Relateret Meta-diskussion:

Prøv disse

Q1: denne meddelelse betyder, at $varname ikke er defineret i den aktuelle rækkevidde af script.

Q2: Brug af isset(), empty() betingelser før brug af en mistænkelig variabel virker godt.

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

Eller, som en hurtig og beskidt løsning:

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

Bemærk om sessioner:

Kommentarer (2)

Generelt på grund af dårlig programmering og muligheden for fejl nu eller senere.

  1. Hvis det'er en fejl, skal du lave en korrekt tildeling til variablen først: $varname=0;
  2. Hvis den virkelig kun er defineret nogle gange, så test for det: if (isset($varname)), før du bruger den
  3. Hvis det'er fordi du har stavet den forkert, skal du bare rette det
  4. Måske endda slå advarslerne fra i dine PHP-settings
Kommentarer (4)

Det betyder, at du tester, evaluerer eller udskriver en variabel, som du endnu ikke har tildelt noget til. Det betyder, at du enten har en skrivefejl, eller at du skal kontrollere, at variablen først er initialiseret til noget. Kontroller dine logikveje, den kan være indstillet i én vej, men ikke i en anden.

Kommentarer (0)