I'm uruchomiony skrypt PHP i nadal otrzymywać błędy, takie jak:
Notice: Undefined variable: my_variable_name in C:\wamp}mypath\index.php on line 10
Notice: Undefined index: my_index w C:\wamp\wmypath\index.php na linii 11
Linia 10 i 11 wygląda tak:
echo "My variable value is: " . $my_variable_name;
echo "My index value is: " . $my_array["my_index"];
Jakie jest znaczenie tych komunikatów o błędach?
Dlaczego pojawiają się one nagle? Używałem tego skryptu przez lata i nigdy nie miałem żadnych problemów.
Jak mogę je naprawić?
To jest ogólne pytanie referencyjne, aby ludzie mogli linkować do niego jako do duplikatu, zamiast wyjaśniać problem w kółko. Czuję, że jest to konieczne, ponieważ większość odpowiedzi w świecie rzeczywistym na ten temat jest bardzo specyficzna.
Powiązane dyskusje na Meta:
Spróbuj tych
Q1: to powiadomienie oznacza, że $varname nie jest zdefiniowany w bieżącym zakresie skryptu.
Q2: Użycie warunków isset(), empty() przed użyciem jakiejkolwiek podejrzanej zmiennej działa dobrze.
// 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'];
}
Lub, jako szybkie i brudne rozwiązanie:
// not the best solution, but works
// in your php setting use, it helps hiding site wide notices
error_reporting(E_ALL ^ E_NOTICE);
Uwaga dotycząca sesji:
Kiedy używamy sesji, session_start();
jest wymagane, aby znajdowało się wewnątrz wszystkich plików używających sesji.
Generalnie z powodu "złego programowania", i możliwości popełnienia błędów teraz lub później.
if (isset($varname))
, zanim jej użyjeszOznacza to, że testujesz, oceniasz lub drukujesz zmienną, do której jeszcze nic nie przypisałeś. Oznacza to, że albo masz literówkę, albo musisz sprawdzić, czy zmienna została najpierw zainicjalizowana do czegoś. Sprawdź swoje ścieżki logiczne, może to być ustawione w jednej ścieżce, ale nie w innej.