Saya menjalankan skrip PHP dan terus menerima kesalahan seperti:
Pemberitahuan: Variabel tidak terdefinisi: my_variable_name di C: \ wamp \ www \ mypath \ index.php pada baris 10
Pemberitahuan: Indeks tidak terdefinisi: my_index C: \ wamp \ www \ mypath \ index.php pada baris 11
Baris 10 dan 11 terlihat seperti ini:
echo "My variable value is: " . $my_variable_name;
echo "My index value is: " . $my_array["my_index"];
Apa arti dari pesan kesalahan ini?
Kenapa mereka muncul tiba-tiba? Saya biasa menggunakan skrip ini selama bertahun-tahun dan saya tidak pernah punya masalah.
Bagaimana cara memperbaikinya?
Ini adalah pertanyaan Referensi Umum bagi orang untuk ditautkan sebagai duplikat, alih-alih harus menjelaskan masalah berulang kali. Saya merasa ini perlu karena sebagian besar jawaban dunia nyata untuk masalah ini sangat spesifik.
Diskusi Meta terkait:
and-notice-undef
, hanya saran agar URL tidak terpotong. Mungkin bahkan menghapus tanda kutip (terlalu banyak). AtauPHP: “Undefined variable/index/offset” notices
and-notice-undef
. Itu hanya (beberapa) saran. Itu hanya mengulangi dirinya jugaNotice: Undefined
.Jawaban:
Perhatikan: Variabel tidak terdefinisi
Dari kebijaksanaan PHP Manual yang luas :
Dari dokumentasi PHP :
Ini berarti bahwa Anda bisa menggunakan hanya
empty()
untuk menentukan apakah variabel diatur, dan di samping itu memeriksa variabel terhadap berikut,0
,0.0
,""
,"0"
,null
,false
atau[]
.Contoh:
Uji cuplikan di atas di editor PHP online 3v4l.org
Meskipun PHP tidak memerlukan deklarasi variabel, PHP merekomendasikannya untuk menghindari beberapa kerentanan keamanan atau bug di mana orang akan lupa untuk memberi nilai pada variabel yang akan digunakan nanti dalam skrip. Apa yang dilakukan PHP dalam kasus variabel yang tidak dideklarasikan adalah mengeluarkan tingkat kesalahan yang sangat rendah,, kesalahan
E_NOTICE
yang bahkan tidak dilaporkan secara default, tetapi Manual menyarankan untuk mengizinkan selama pengembangan.Cara menangani masalah ini:
Disarankan: Nyatakan variabel Anda, misalnya saat Anda mencoba menambahkan string ke variabel yang tidak ditentukan. Atau gunakan
isset()
/!empty()
untuk memeriksa apakah mereka dinyatakan sebelum merujuk mereka, seperti pada:Ini telah menjadi jauh lebih bersih pada PHP 7.0, sekarang Anda dapat menggunakan operator null coalesce :
Tetapkan penangan kesalahan khusus untuk E_NOTICE dan arahkan pesan menjauh dari output standar (mungkin ke file log):
Nonaktifkan E_NOTICE dari pelaporan. Cara cepat untuk mengecualikan adil
E_NOTICE
adalah:Menekan kesalahan dengan operator @ .
Catatan: Sangat disarankan untuk mengimplementasikan poin 1 saja.
Pemberitahuan: Indeks tidak terdefinisi / Offset tidak terdefinisi
Pemberitahuan ini muncul ketika Anda (atau PHP) mencoba mengakses indeks array yang tidak ditentukan.
Cara menangani masalah ini:
Periksa apakah indeks ada sebelum Anda mengaksesnya. Untuk ini, Anda dapat menggunakan
isset()
atauarray_key_exists()
:Konstruk bahasa
list()
dapat menghasilkan ini ketika mencoba mengakses indeks array yang tidak ada:Dua variabel digunakan untuk mengakses dua elemen array, namun hanya ada satu elemen array, indeks
0
, jadi ini akan menghasilkan:$_POST
/$_GET
/$_SESSION
VariabelPemberitahuan di atas sering muncul saat bekerja dengan
$_POST
,$_GET
atau$_SESSION
. Untuk$_POST
dan$_GET
Anda hanya perlu memeriksa apakah indeks ada atau tidak sebelum Anda menggunakannya. Untuk$_SESSION
Anda harus memastikan Anda memiliki sesi dimulaisession_start()
dan indeks juga ada.Juga perhatikan bahwa ketiga variabel adalah superglobals dan huruf besar.
Terkait:
sumber
@
) memiliki beberapa masalah kinerja. Selain itu, karena menekan semua kesalahan dalam lingkup tertentu, menggunakannya tanpa perawatan mungkin menutupi pesan yang ingin Anda lihat.$var = @$_GET['nonexisting'];
masih menyebabkan pemberitahuan ..$value = isset($_POST['value']) ? $_POST['value'] : '';
alih-alih menggunakan 4.$value = @$_POST['value'];
?Coba ini
Atau, sebagai solusi cepat dan kotor:
Catatan tentang sesi:
Saat menggunakan sesi,
session_start();
harus ditempatkan di dalam semua file menggunakan sesi.http://php.net/manual/en/features.sessions.php
sumber
E_NOTICE
dariphp.ini
file konfigurasi, lakukanerror_reporting = (E_ALL & ~E_NOTICE)
Operator tampilan kesalahan
@
Untuk pemberitahuan yang tidak diinginkan dan berlebihan, seseorang dapat menggunakan
@
operator khusus untuk » menyembunyikan « pesan variabel / indeks yang tidak ditentukan.isset?:
atau??
super-supression namun. Pemberitahuan masih bisa dicatat. Dan seseorang dapat membangkitkan@
pemberitahuan yang disembunyikan dengan:set_error_handler("var_dump");
if (isset($_POST["shubmit"]))
dalam kode awal Anda.@
atauisset
hanya setelah memverifikasi fungsionalitas.@
terutama untuk$_GET
/$_POST
parameter input, khususnya jika mereka opsional .Dan karena ini mencakup sebagian besar pertanyaan seperti itu, mari kita bahas penyebab paling umum:
$_GET
/$_POST
/$_REQUEST
input yang tidak ditentukanHal pertama yang Anda lakukan ketika menemukan indeks / offset tidak terdefinisi, adalah memeriksa salah ketik:
$count = $_GET["whatnow?"];
Kedua, jika pemberitahuan tersebut tidak memiliki penyebab yang jelas, gunakan
var_dump
atauprint_r
untuk memverifikasi semua array input untuk konten saat ini:Keduanya akan mengungkapkan jika skrip Anda dipanggil dengan benar atau parameter apa pun.
Alternatif atau gunakan devtools browserF12 Anda ( ) dan periksa tab jaringan untuk permintaan dan parameter:
Parameter POST dan input GET akan ditampilkan secara terpisah.
Untuk
$_GET
parameter Anda juga dapat mengintip diQUERY_STRING
dalamPHP memiliki beberapa aturan untuk menyatukan nama parameter non-standar ke dalam superglobals. Apache mungkin juga menulis ulang. Anda juga dapat melihat
$_COOKIES
header permintaan HTTP mentah dan lainnya yang disediakan dengan cara itu.Secara lebih jelas lihat bilah alamat peramban Anda untuk parameter GET :
http://example.org/script.php?id=5&sort=desc
The
name=value
pasang setelah?
tanda tanya adalah parameter Anda query (GET). Dengan demikian URL ini hanya dapat menghasilkan$_GET["id"]
dan$_GET["sort"]
.Akhirnya periksa
<form>
dan<input>
deklarasi Anda, jika Anda mengharapkan parameter tetapi tidak menerima.<input name=FOO>
id=
atautitle=
atribut tidak cukup.method=POST
bentuk harus diisi$_POST
.method=GET
(atau meninggalkannya) akan menghasilkan$_GET
variabel.action=script.php?get=param
melalui $ _GET danmethod=POST
bidang lainnya dalam $ _POST di samping.$_REQUEST['vars']
lagi, yang membuat parets GET dan POST meningkat.Jika Anda menggunakan mod_rewrite, maka Anda harus memeriksa keduanya
access.log
dan mengaktifkannyaRewriteLog
untuk mengetahui parameter yang tidak ada.$_FILES
$_FILES["formname"]
.enctype=multipart/form-data
method=POST
dalam<form>
deklarasi Anda .$_COOKIE
$_COOKIE
array tidak pernah dihuni tepat setelahsetcookie()
, tetapi hanya pada setiap permintaan ikutan HTTP.sumber
Umumnya karena "pemrograman buruk", dan kemungkinan kesalahan sekarang atau nanti.
if (isset($varname))
sebelum menggunakannyasumber
Ini berarti Anda sedang menguji, mengevaluasi, atau mencetak variabel yang belum Anda tetapkan. Itu berarti Anda memiliki salah ketik, atau Anda perlu memeriksa bahwa variabel diinisialisasi ke sesuatu terlebih dahulu. Periksa jalur logika Anda, itu mungkin diatur dalam satu jalur tetapi tidak di jalur lain.
sumber
Saya tidak ingin menonaktifkan pemberitahuan karena ini membantu, tetapi ingin menghindari terlalu banyak mengetik.
Solusi saya adalah fungsi ini:
Jadi jika saya ingin merujuk ke $ name dan echo jika ada, saya cukup menulis:
Untuk elemen array:
Di halaman jika saya ingin merujuk ke $ _REQUEST ['name']:
sumber
$foo = "BABAR"; ifexists('foo');
secara umum akan mengembalikan nol. (Italia adalah bab-bab php.net.)if( !empty($user) and !empty($location) ) echo "hello $user ..."
Cara terbaik untuk mendapatkan string input adalah:
Lapisan satu ini hampir setara dengan:
Jika Anda benar-benar menginginkan nilai string , seperti:
sumber
Ini karena variabel '$ user_location' tidak didefinisikan. Jika Anda menggunakan loop if apa pun di mana Anda mendeklarasikan variabel '$ user_location' maka Anda juga harus memiliki loop lain dan mendefinisikan yang sama. Sebagai contoh:
Kode di atas akan membuat kesalahan karena The if loop tidak puas dan di loop lain '$ user_location' tidak didefinisikan. PHP masih diminta untuk mengulangi variabel. Jadi untuk memodifikasi kode Anda harus melakukan hal berikut:
sumber
Sebagai balasan untuk "" Mengapa mereka muncul tiba-tiba? Saya biasa menggunakan skrip ini selama bertahun-tahun dan saya tidak pernah punya masalah. "
Sangat umum bagi sebagian besar situs untuk beroperasi di bawah pelaporan kesalahan "default" dari "Tampilkan semua kesalahan, tetapi bukan 'pemberitahuan' dan 'usang'". Ini akan diatur dalam php.ini dan berlaku untuk semua situs di server. Ini berarti bahwa "pemberitahuan" yang digunakan dalam contoh akan ditekan (disembunyikan) sementara kesalahan lainnya, yang dianggap lebih kritis, akan ditampilkan / direkam.
Pengaturan penting lainnya adalah kesalahan dapat disembunyikan (yaitu
display_errors
diatur ke "off" atau "syslog").Apa yang akan terjadi dalam kasus ini adalah bahwa baik
error_reporting
itu diubah untuk juga menampilkan pemberitahuan (sesuai contoh) dan / atau bahwa pengaturan diubah kedisplay_errors
pada layar (sebagai lawan untuk menekan mereka / login mereka).Mengapa mereka berubah?
Jawaban yang jelas / paling sederhana adalah bahwa seseorang menyesuaikan salah satu dari pengaturan ini di php.ini, atau versi PHP yang ditingkatkan sekarang menggunakan php.ini yang berbeda dari sebelumnya. Itu tempat pertama untuk melihat.
Namun dimungkinkan juga untuk mengabaikan pengaturan ini di
dan semua ini juga bisa diubah.
Ada juga komplikasi tambahan bahwa konfigurasi server web dapat mengaktifkan / menonaktifkan arahan .htaccess, jadi jika Anda memiliki arahan dalam .htaccess yang tiba-tiba mulai / berhenti berfungsi maka Anda perlu memeriksa itu.
(.htconf / .htaccess menganggap Anda menjalankan sebagai apache. Jika menjalankan baris perintah ini tidak akan berlaku; jika menjalankan IIS atau server web lain maka Anda harus memeriksa konfigurasi tersebut sesuai dengan itu)
Ringkasan
error_reporting
dandisplay_errors
arahan php di php.ini belum berubah, atau Anda tidak menggunakan php.ini yang berbeda dari sebelumnya.error_reporting
dandisplay_errors
arahan php dalam .htconf (atau vhosts dll) belum berubaherror_reporting
dandisplay_errors
arahan php dalam .htaccess belum berubaherror_reporting
dandisplay_errors
arahan php telah ditetapkan di sana.sumber
perbaikan cepat adalah menetapkan variabel Anda ke nol di bagian atas kode Anda
sumber
Saya dulu mengutuk kesalahan ini, tetapi bisa mengingatkan Anda untuk melarikan diri dari input pengguna.
Misalnya, jika Anda pikir ini cerdas, kode singkatan:
...Pikirkan lagi! Solusi yang lebih baik adalah:
(Saya menggunakan
html()
fungsi khusus untuk keluar dari karakter, jarak tempuh Anda mungkin beragam)sumber
Di PHP 7.0 sekarang mungkin menggunakan operator penggabungan Null:
Sama dengan:
Manual PHP PHP 7.0
sumber
if (is_array($my_array['idontexist'] ?? '')) { dosomething(); }
isset()
, jika Anda lulusis_array()
- yang merupakan boolean, perilaku tak terduga akan mengikuti.Saya menggunakan semua fungsi exst () yang berguna yang secara otomatis mendeklarasikan variabel.
Kode Anda akan -
sumber
Dalam Bahasa yang sangat Sederhana .
Kesalahannya adalah Anda menggunakan variabel
$user_location
yang tidak Anda tetapkan sebelumnya dan tidak memiliki nilai. Jadi saya sarankan Anda untuk mendeklarasikan variabel ini sebelum menggunakannya , Sebagai contoh:$user_location = '';
Atau
$user_location = 'Los Angles';
Ini adalah kesalahan yang sangat umum yang bisa Anda hadapi. Jadi jangan khawatir hanya mendeklarasikan variabel dan Nikmati Pengkodean .
sumber
mengapa tidak membuat hal-hal sederhana?
sumber
MENGAPA INI TERJADI?
Seiring waktu, PHP telah menjadi bahasa yang lebih fokus pada keamanan. Pengaturan yang dulu dimatikan secara default sekarang dihidupkan secara default. Contoh sempurna untuk ini adalah
E_STRICT
, yang dinyalakan secara default pada PHP 5.4.0 .Selanjutnya, menurut dokumentasi PHP, secara default,
E_NOTICE
dinonaktifkan di php.ini. PHP docs merekomendasikan menyalakannya untuk keperluan debugging . Namun, ketika saya mengunduh PHP dari repositori Ubuntu dan dari tumpukan Windows BitNami, saya melihat sesuatu yang lain.Perhatikan bahwa
error_reporting
sebenarnya diatur ke nilai produksi secara default, bukan ke nilai "default" secara default. Ini agak membingungkan dan tidak didokumentasikan di luar php.ini, jadi saya belum memvalidasi ini pada distribusi lain.Namun, untuk menjawab pertanyaan Anda, kesalahan ini muncul saat tidak muncul sebelumnya karena:
Anda menginstal PHP dan pengaturan default baru agak kurang didokumentasikan tetapi tidak mengecualikan
E_NOTICE
.E_NOTICE
peringatan seperti variabel yang tidak ditentukan dan indeks yang tidak ditentukan sebenarnya membantu membuat kode Anda lebih bersih dan lebih aman. Saya dapat memberitahu Anda bahwa, bertahun-tahun yang lalu, denganE_NOTICE
mengaktifkan terus memaksa saya untuk mendeklarasikan variabel saya. Itu membuatnya BANYAK lebih mudah untuk belajar C, tidak menyatakan variabel jauh lebih besar dari gangguan.APA YANG BISA SAYA LAKUKAN TENTANG ITU?
Matikan
E_NOTICE
dengan menyalin "Nilai default"E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
dan menggantinya dengan apa yang saat ini dihapus komentar setelah sama dengan masukerror_reporting =
. Mulai ulang Apache, atau PHP jika menggunakan CGI atau FPM. Pastikan Anda mengedit "benar" php.ini. Yang benar adalah Apache jika Anda menjalankan PHP dengan Apache, fpm atau php-fpm jika menjalankan PHP-FPM, cgi jika menjalankan PHP-CGI, dll. Ini bukan metode yang disarankan, tetapi jika Anda memiliki kode lawas yang akan menjadi sangat sulit untuk diedit, maka itu mungkin taruhan terbaik Anda.Matikan
E_NOTICE
level file atau folder. Ini mungkin lebih disukai jika Anda memiliki beberapa kode lama tetapi ingin melakukan hal-hal dengan cara yang "benar" sebaliknya. Untuk melakukan ini, Anda harus berkonsultasi dengan Apache2, Nginx, atau apa pun server pilihan Anda. Di Apache, Anda akan menggunakanphp_value
bagian dalam<Directory>
.Tulis ulang kode Anda menjadi lebih bersih. Jika Anda perlu melakukan ini saat pindah ke lingkungan produksi atau tidak ingin seseorang melihat kesalahan Anda, pastikan Anda menonaktifkan tampilan kesalahan apa pun, dan hanya mencatat kesalahan Anda (lihat
display_errors
danlog_errors
di php.ini dan pengaturan server Anda) .Untuk memperluas opsi 3: Ini adalah yang ideal. Jika Anda dapat menempuh rute ini, Anda harus melakukannya. Jika Anda tidak memulai rute ini pada awalnya, pertimbangkan untuk memindahkan rute ini pada akhirnya dengan menguji kode Anda di lingkungan pengembangan. Sementara Anda berada di sana, singkirkan
~E_STRICT
dan~E_DEPRECATED
lihat apa yang salah di masa depan. Anda akan melihat BANYAK kesalahan yang tidak dikenal, tetapi itu akan menghentikan Anda dari memiliki masalah yang tidak menyenangkan ketika Anda perlu meningkatkan PHP di masa depan.APA ARTINYA KESALAHAN?
Undefined variable: my_variable_name
- Ini terjadi ketika variabel belum didefinisikan sebelum digunakan. Ketika skrip PHP dieksekusi, secara internal hanya mengasumsikan nilai nol. Namun, dalam skenario mana Anda perlu memeriksa variabel sebelum didefinisikan? Pada akhirnya, ini adalah argumen untuk "kode ceroboh". Sebagai seorang pengembang, saya dapat memberitahu Anda bahwa saya menyukainya ketika saya melihat proyek open source di mana variabel didefinisikan sebagai tinggi dalam cakupan mereka karena mereka dapat didefinisikan. Itu membuatnya lebih mudah untuk mengetahui variabel apa yang akan muncul di masa depan dan membuatnya lebih mudah untuk membaca / mempelajari kode.Undefined index: my_index
- Ini terjadi ketika Anda mencoba mengakses nilai dalam array dan itu tidak ada. Untuk mencegah kesalahan ini, lakukan pemeriksaan bersyarat.Pilihan lain adalah mendeklarasikan array kosong di bagian atas fungsi Anda. Ini tidak selalu memungkinkan.
(tip tambahan)
vim
orang hari ini :).sumber
indeks undefined berarti dalam array yang Anda minta untuk indeks array yang tidak tersedia misalnya
variabel tidak terdefinisi berarti Anda telah menggunakan sepenuhnya bukan variabel yang ada atau yang tidak didefinisikan atau diinisialisasi dengan nama itu misalnya
berarti offset yang didefinisikan dalam array yang Anda minta tidak ada kunci. Dan solusi untuk ini adalah memeriksa sebelum digunakan
sumber
Mengenai bagian pertanyaan ini:
Tidak ada jawaban yang pasti tetapi berikut adalah beberapa kemungkinan penjelasan mengapa pengaturan dapat 'tiba-tiba' berubah:
Anda telah memutakhirkan PHP ke versi yang lebih baru yang dapat memiliki default lain untuk error_reporting, display_errors atau pengaturan lain yang relevan.
Anda telah menghapus atau memperkenalkan beberapa kode (mungkin dalam ketergantungan) yang menetapkan pengaturan yang relevan saat runtime menggunakan
ini_set()
atauerror_reporting()
(cari ini dalam kode)Anda mengubah konfigurasi server web (dengan asumsi apache di sini):
.htaccess
konfigurasi file dan vhost juga dapat memanipulasi pengaturan php.Biasanya pemberitahuan tidak ditampilkan / dilaporkan (lihat manual PHP ) sehingga ada kemungkinan bahwa ketika menyiapkan server, file php.ini tidak dapat dimuat karena suatu alasan (izin file ??) dan Anda berada di pengaturan default . Kemudian, 'bug' telah diselesaikan (secara tidak sengaja) dan sekarang BISA memuat file php.ini yang benar dengan set error_reporting untuk menampilkan pemberitahuan.
sumber
Jika bekerja dengan kelas, Anda perlu memastikan Anda merujuk variabel anggota menggunakan
$this
:sumber
Alasan lain mengapa pemberitahuan indeks yang tidak ditentukan akan dilempar, adalah bahwa kolom dihilangkan dari permintaan basis data.
Yaitu:
Kemudian mencoba mengakses lebih banyak kolom / baris di dalam satu lingkaran.
Yaitu:
atau dalam satu
while
lingkaran:Hal lain yang perlu dicatat adalah bahwa pada * NIX OS dan Mac OS X, semuanya sensitif huruf besar-kecil.
Konsultasikan Tanya Jawab berikut tentang di Stack:
Apakah nama tabel dalam case MySQL sensitif?
nama tabel case mysql sensitif dalam permintaan
MySql - Case Sensitive masalah tabel di server yang berbeda
sumber
Menggunakan terner sederhana, mudah dibaca, dan bersih:
Pra PHP 7
Tetapkan variabel ke nilai variabel lain jika disetel, tetapkan lain
null
(ataunilai default apa pun yangAnda butuhkan):PHP 7+
Sama kecuali menggunakan Null Coalescing Operator . Tidak ada lagi kebutuhan untuk memanggil
isset()
karena ini dibangun, dan tidak perlu memberikan variabel untuk kembali karena diasumsikan mengembalikan nilai variabel yang diperiksa:Keduanya akan menghentikan Pemberitahuan dari pertanyaan OP, dan keduanya sama persis dengan:
Jika Anda tidak memerlukan pengaturan variabel baru maka Anda dapat langsung menggunakan nilai yang dikembalikan ternary, seperti dengan
echo
, argumen fungsi, dll:Gema:
Fungsi:
Di atas akan bekerja sama dengan array, termasuk sesi, dll, menggantikan variabel yang diperiksa dengan misalnya:
$_SESSION['checkMe']
atau seberapa banyak level yang Anda butuhkan, misalnya:
$clients['personal']['address']['postcode']
Penekanan:
Dimungkinkan untuk menekan Pemberitahuan PHP dengan
@
atau mengurangi tingkat pelaporan kesalahan Anda, tetapi itu tidak memperbaiki masalah , itu hanya menghentikannya dilaporkan dalam log kesalahan. Ini berarti bahwa kode Anda masih mencoba menggunakan variabel yang tidak disetel, yang mungkin atau mungkin tidak berarti sesuatu tidak berfungsi sebagaimana dimaksud - tergantung pada seberapa penting nilai yang hilang itu.Anda harus benar-benar memeriksa masalah ini dan menanganinya dengan tepat, baik menyajikan pesan yang berbeda, atau bahkan hanya mengembalikan nilai nol untuk segala sesuatu yang lain untuk mengidentifikasi keadaan yang tepat.
Jika Anda hanya peduli tentang Pemberitahuan tidak ada di log kesalahan, maka sebagai opsi Anda bisa mengabaikan log kesalahan.
sumber
Salah satu penyebab umum dari variabel tidak ada setelah formulir HTML dikirimkan adalah elemen formulir tidak ada di dalam
<form>
tag:Contoh: Elemen tidak terkandung di dalam
<form>
Contoh: Elemen sekarang terkandung dalam
<form>
sumber
Mungkin Anda menggunakan versi PHP lama sampai dan sekarang memutakhirkan PHP itulah alasannya ia bekerja tanpa kesalahan hingga sekarang dari tahun ke tahun. sampai PHP4 tidak ada kesalahan jika Anda menggunakan variabel tanpa mendefinisikannya tetapi pada PHP5 dan seterusnya ia melempar kesalahan untuk kode seperti yang disebutkan dalam pertanyaan.
sumber
Saat berurusan dengan file, enctype yang tepat dan metode POST diperlukan, yang akan memicu pemberitahuan indeks yang tidak ditentukan jika salah satu tidak termasuk dalam formulir.
Manual menyatakan sintaks dasar berikut:
HTML
PHP
Referensi:
sumber
Saya mengajukan pertanyaan tentang ini dan saya dirujuk ke pos ini dengan pesan:
Saya membagikan pertanyaan dan solusi saya di sini:
Ini kesalahannya:
Jalur 154 adalah masalahnya. Inilah yang saya miliki di baris 154:
Saya pikir masalahnya adalah bahwa saya menulis jika kondisi untuk variabel
$city
, yang bukan kunci tetapi nilai dalam$key => $city
. Pertama, bisakah Anda mengkonfirmasi jika itu adalah penyebab peringatan? Kedua, jika itu masalahnya, mengapa saya tidak bisa menulis kondisi berdasarkan nilainya? Apakah harus dengan kunci yang saya butuhkan untuk menulis kondisi?UPDATE 1: Masalahnya adalah ketika mengeksekusi
$citiesCounterArray[$key]
, kadang-kadang$key
sesuai dengan kunci yang tidak ada dalam$citiesCounterArray
array, tetapi itu tidak selalu terjadi berdasarkan data dari loop saya. Yang saya butuhkan adalah mengatur kondisi sehingga jika$key
ada dalam array, kemudian jalankan kode, jika tidak, lewati saja.UPDATE 2: Ini adalah bagaimana saya memperbaikinya dengan menggunakan
array_key_exists()
:sumber
Kesalahan ini terjadi setiap kali kita menggunakan variabel yang tidak disetel.
Cara terbaik untuk menghadapinya adalah mengatur pelaporan kesalahan saat pengembangan.
Untuk mengatur pelaporan kesalahan pada:
Pada server produksi, pelaporan kesalahan tidak aktif, oleh karena itu, kami tidak mendapatkan kesalahan ini.
Namun, pada server pengembangan, kami dapat mengatur pelaporan kesalahan.
Untuk menghilangkan kesalahan ini, kita melihat contoh berikut:
Kita dapat menginisialisasi variabel
NULL
sebelum menetapkan nilainya atau menggunakannya.Jadi, kita dapat memodifikasi kode sebagai:
Ini tidak akan mengganggu logika program apa pun dan tidak akan menghasilkan Pemberitahuan meskipun
$test
tidak memiliki nilai.Jadi, pada dasarnya, selalu lebih baik untuk mengatur pelaporan kesalahan ON untuk pengembangan.
Dan perbaiki semua kesalahan.
Dan saat produksi, pelaporan kesalahan harus dinonaktifkan.
sumber
Pemberitahuan itu karena Anda tidak memiliki variabel yang digunakan
defined
danmy_index
kunci tidak hadir ke dalam$my_array
variabel.Pemberitahuan itu dipicu setiap saat, karena Anda
code
tidak benar, tetapi mungkin Anda tidak mengaktifkan pelaporan pemberitahuan.Selesaikan bug:
Cara lain untuk mengeluarkan ini:
sumber
Di PHP Anda perlu kepalan untuk mendefinisikan variabel setelah itu Anda dapat menggunakannya.
Kita dapat memeriksa variabel didefinisikan atau tidak dengan cara yang sangat efisien !.
Penjelasan Sederhana
sumber