Εκτελώ ένα σενάριο PHP και συνεχίζω να λαμβάνω σφάλματα όπως:
Notice: C:\wamp\www\mypath\index.php στη γραμμή 10.
Notice: C:\wamp\www\mypath\index.php στη γραμμή 11
Οι γραμμές 10 και 11 μοιάζουν ως εξής:
echo "My variable value is: " . $my_variable_name;
echo "My index value is: " . $my_array["my_index"];
Ποια είναι η σημασία αυτών των μηνυμάτων σφάλματος;
Γιατί εμφανίζονται ξαφνικά; Χρησιμοποιούσα αυτό το σενάριο για χρόνια και δεν είχα ποτέ κανένα πρόβλημα.
Πώς μπορώ να τα διορθώσω;
<hr/>,
Αυτή είναι μια ερώτηση γενικής αναφοράς για να μπορούν οι άνθρωποι να παραπέμπουν σε αυτήν ως διπλότυπο, αντί να χρειάζεται να εξηγούν το θέμα ξανά και ξανά. Θεωρώ ότι αυτό είναι απαραίτητο επειδή οι περισσότερες απαντήσεις του πραγματικού κόσμου σε αυτό το θέμα είναι πολύ συγκεκριμένες. </sub>,
Σχετική συζήτηση Meta:</sub>,
Δοκιμάστε αυτά
Q1: αυτή η ειδοποίηση σημαίνει ότι το $varname δεν είναι δεν έχει οριστεί στην τρέχουσα εμβέλεια της script. >, Q2: Η χρήση των συνθηκών isset(), empty() πριν από τη χρήση οποιασδήποτε ύποπτης μεταβλητής λειτουργεί καλά.
// 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'];
}
Ή, ως μια γρήγορη και βρώμικη λύση:
// not the best solution, but works
// in your php setting use, it helps hiding site wide notices
error_reporting(E_ALL ^ E_NOTICE);
Σημείωση σχετικά με τις συνεδρίες:
Η session_start();
απαιτείται να τοποθετείται μέσα σε όλα τα αρχεία που χρησιμοποιούν συνεδρίες.
Γενικά λόγω "κακού προγραμματισμού", και μιας πιθανότητας για λάθη τώρα ή αργότερα.
if (isset($varname))
, πριν τη χρησιμοποιήσετεΣημαίνει ότι δοκιμάζετε, αξιολογείτε ή εκτυπώνετε μια μεταβλητή στην οποία δεν έχετε ακόμη εκχωρήσει τίποτα. Σημαίνει ότι είτε έχετε κάποιο τυπογραφικό λάθος, είτε ότι πρέπει να ελέγξετε πρώτα ότι η μεταβλητή έχει αρχικοποιηθεί σε κάτι. Ελέγξτε τα μονοπάτια της λογικής σας, μπορεί να έχει οριστεί σε ένα μονοπάτι αλλά όχι σε ένα άλλο.