Làm cách nào để xử lý lỗi chỉ mục không xác định trong PHP?

Khi làm việc với mảng trong PHP, rất có thể bạn sẽ gặp phải "Thông báo. Lỗi chỉ mục không xác định" theo thời gian

Trong bài viết này, chúng tôi xem xét những lỗi này là gì, tại sao chúng xảy ra, các tình huống mà chúng chủ yếu xảy ra và cách khắc phục chúng

Trước tiên chúng ta hãy xem xét một số ví dụ dưới đây

Ví dụ không có lỗi

ví dụ 1

 "John", "last_name" => "Doe");
echo "The first name is ".$person["first_name"];
echo "
"; echo "The last name is ".$person["last_name"];

đầu ra

Tên đầu tiên là John
Họ là Doe

ví dụ 2

";
echo $students[0]."
"; echo $students[1]."
"; echo $students[2]."
"; echo $students[3];

đầu ra

4 sinh viên của chúng tôi bao gồm
Peter
ma-ri-a
Niklaus
Amina

Ví dụ có lỗi

ví dụ 1

 "John", "last_name" => "Doe");
echo $employee["age"];

đầu ra

Lưu ý. Chỉ số không xác định. tuổi trong /path/to/file/filename. php trên dòng 3

ví dụ 2

đầu ra

Lưu ý. phần bù không xác định. 3 trong/đường dẫn/đến/tệp/tên tệp. php trên dòng 3

Bây giờ chúng ta hãy xem tại sao hai ví dụ đầu hoạt động tốt mà không có lỗi trong khi hai ví dụ cuối lại báo lỗi "Chỉ mục không xác định"

Lý do tại sao các ví dụ cuối cùng đưa ra lỗi là vì chúng tôi đang cố truy cập các chỉ mục/phần tử trong một mảng không được xác định (bộ). Điều này đưa ra một thông báo

Chẳng hạn, trong mảng $employee của chúng tôi, chúng tôi chỉ xác định phần tử "first_name" có giá trị là "John" và phần tử "last_name" có giá trị "Doe" nhưng cố gắng truy cập phần tử "age" chưa được đặt trong

Trong ví dụ khác có lỗi, chúng tôi đã tạo một mảng được lập chỉ mục là $devs với 3 phần tử trong đó. Đối với loại mảng này, chúng tôi sử dụng các chỉ số để truy cập các phần tử của nó. Các chỉ số này bắt đầu từ 0 [0], vì vậy trong trường hợp này, Mary có chỉ số 0, Niklaus có chỉ số 1 và Rancho chỉ số 2. Nhưng chúng tôi đã cố truy cập/in chỉ mục 3 không tồn tại (không được xác định) trong mảng.

Mặt khác, bạn sẽ nhận thấy rằng trong hai ví dụ đầu tiên của chúng tôi không có lỗi, chúng tôi chỉ truy cập các phần tử mảng (thông qua các khóa hoặc chỉ số của chúng) tồn tại trong mảng

Bản đồ đường viền

1. Chỉ truy cập các phần tử mảng được xác định

Vì lỗi xảy ra do cố gắng truy cập hoặc sử dụng các phần tử mảng không được xác định/đặt trong mảng, nên giải pháp là xem lại mã của bạn và đảm bảo bạn chỉ sử dụng các phần tử tồn tại trong mảng

Nếu bạn không chắc phần tử nào có trong mảng, bạn có thể in chúng bằng cách sử dụng var_dump() hoặc print_r() functions.

Thí dụ

 "John", "last_name" => "Doe", "email" => "[email protected]");
var_dump($user);

//Example 2
$cars = array("Toyota","Tesla","Nisan","Bently","Mazda","Audi");
print_r($cars);

Đầu ra 1

mảng(3) { ["first_name"]=> chuỗi(4) "John" ["last_name"]=> chuỗi(3) "Doe" ["email"]=> chuỗi(17) "johndoe@gmail. com" }

Đầu ra 2

Mảng ( [0] => Toyota [1] => Tesla [2] => Nisan [3] => Bentley [4] => Mazda [5] => Audi )

Bằng cách này, bạn sẽ có thể biết chính xác phần tử nào được xác định trong mảng và chỉ sử dụng chúng.

Trong trường hợp mảng được lập chỉ mục, bạn có thể biết phần tử mảng nào tồn tại mà không cần phải in mảng. Tất cả những gì bạn cần làm là biết kích thước mảng. Vì các chỉ số của mảng bắt đầu từ 0 (0) nên phần tử cuối cùng của mảng sẽ có chỉ số bằng kích thước mảng trừ đi 1

Để lấy kích thước của một mảng trong PHP, bạn sử dụng count() hoặc . functions.

Thí dụ

";
echo sizeof($cars);  //Output: 6

Ghi chú. Mặc dù kích thước của mảng là 6 nhưng chỉ số của phần tử cuối cùng trong mảng là 5 chứ không phải 6. Các chỉ số trong mảng này bao gồm 0, 1, 2, 3, 4 và 5, tổng cộng là 6

Nếu một phần tử không tồn tại trong mảng nhưng bạn vẫn muốn sử dụng nó, thì trước tiên bạn nên thêm nó vào mảng trước khi thử sử dụng nó

2. Sử dụng hàm php isset() để xác thực

Nếu bạn không chắc liệu một phần tử có tồn tại trong mảng hay không nhưng bạn muốn sử dụng nó, trước tiên bạn có thể xác thực nó bằng cách sử dụng PHP isset() function to check whether it exists. This way, you will be sure whether it exists, and only use it then.

The isset() trả về true nếu phần tử tồn tại và false nếu ngược lại.

ví dụ 1

 "John", "last_name" => "Doe");

if(isset($employee["first_name"])){
  echo "First name is ".$employee["first_name"];
}

if(isset($employee["age"])){
  echo $employee["age"];
}

Tên là John

Mặc dù không có phần tử nào tồn tại với khóa "tuổi" trong mảng, nhưng lần này lỗi thông báo không bao giờ xảy ra. Điều này là do chúng tôi đặt điều kiện chỉ sử dụng (in) nếu nó tồn tại. Vì hàm isset() được tìm thấy không tồn tại nên chúng tôi chưa bao giờ thử sử dụng nó

Các tình huống xảy ra lỗi này chủ yếu

Thông báo. Chỉ mục không xác định" được biết là xảy ra chủ yếu khi sử dụng các yêu cầu GET và POST

Yêu cầu NHẬN

Giả sử bạn có một tệp có URL này. https. //www. thí dụ. com/đăng ký. php

Một số dữ liệu có thể được chuyển qua URL dưới dạng tham số, lần lượt được truy xuất và sử dụng trong sổ đăng ký. tập tin php

URL đó, với các tham số, sẽ giống như https. //www. thí dụ. com/đăng ký. php?fname=John&lname=Doe&age=30

trong sổ đăng ký. php, sau đó chúng tôi có thể thu thập thông tin đã truyền như hình bên dưới

Chúng tôi có thể sử dụng dữ liệu trên theo bất kỳ cách nào chúng tôi muốn (ví dụ:. lưu vào cơ sở dữ liệu, hiển thị nó trên trang, v.v.) mà không có bất kỳ lỗi nào

Nhưng nếu trong cùng một tệp, chúng tôi thử truy cập hoặc sử dụng phần tử GET không phải là một phần của tham số được truyền qua URL, chẳng hạn như "email", thì chúng tôi sẽ gặp lỗi

Thí dụ

________số 8_______

đầu ra

Lưu ý. Chỉ số không xác định. email trong /path/to/file/filename. php trên dòng 2

Giải pháp

Ghi chú. GET yêu cầu là một mảng. Tên của mảng GET là $_GET . Sử dụng các hàm var_dump() hoặc print_r() để in GET .

Giống như trong sổ đăng ký của chúng tôi. php với các tham số URL ở trên, hãy thêm dòng bên dưới vào mã của bạn

đầu ra

mảng(3) { ["tên"]=> chuỗi(4) "John" ["tên"]=> chuỗi(3) "Doe" ["tuổi"]=> chuỗi(2) "30" }

Bây giờ bạn đã biết những phần tử nào tồn tại trong mảng $_GET, chỉ sử dụng chúng trong chương trình của bạn

Giống như các giải pháp ở trên, bạn có thể sử dụng hàm isset() trong trường hợp phần tử không được chuyển dưới dạng URL .

Trong trường hợp như vậy, trước tiên bạn có thể khởi tạo tất cả các biến thành một số giá trị mặc định, chẳng hạn như giá trị trống, sau đó gán chúng cho giá trị thực nếu chúng được đặt. Điều này sẽ ngăn lỗi "Chỉ mục không xác định" xảy ra

Thí dụ

";
echo $students[0]."
"; echo $students[1]."
"; echo $students[2]."
"; echo $students[3];
0

Yêu cầu POST

Yêu cầu POST chủ yếu được sử dụng để truy xuất dữ liệu biểu mẫu đã gửi

Nếu bạn gặp phải lỗi "Chỉ mục không xác định" với các yêu cầu gửi biểu mẫu, nguyên nhân có thể xảy ra nhất là bạn đang cố truy cập hoặc sử dụng dữ liệu bài đăng không được gửi bởi biểu mẫu

Ví dụ: cố gắng sử dụng $_POST["email"] trong tập lệnh PHP của bạn trong khi biểu mẫu gửi dữ liệu không có trường nhập liệu .

Giải pháp đơn giản nhất cho việc này là trước tiên hãy in mảng $_POST để biết dữ liệu nào đang được gửi. Sau đó, bạn xem lại mã biểu mẫu HTML của mình để đảm bảo rằng nó chứa tất cả các trường đầu vào mà bạn muốn truy cập và sử dụng trong tập lệnh PHP. Đảm bảo rằng giá trị của thuộc tính tên của đầu vào biểu mẫu khớp với khóa mảng bạn đang sử dụng trong $ . of your PHP.

Theo cách tương tự với giải pháp mà chúng tôi đã trình bày trong các yêu cầu GET về việc sử dụng hàm isset() để xác thực nếu các phần tử mảng được đặt, hãy thực hiện cho POST

Theo cách tương tự, bạn có thể khởi tạo giá trị của các biến thành giá trị mặc định (ví dụ:. trống), sau đó gán cho chúng các giá trị thực nếu chúng được đặt

";
echo $students[0]."
"; echo $students[1]."
"; echo $students[2]."
"; echo $students[3];
1

Nếu biểu mẫu HTML và mã PHP xử lý tệp nằm trong cùng một tệp, thì hãy đảm bảo rằng mã xử lý biểu mẫu không được thực thi trước khi biểu mẫu được gửi

Bạn có thể đạt được điều này bằng cách gói tất cả mã xử lý trong điều kiện kiểm tra xem biểu mẫu đã được gửi chưa như bên dưới

Làm cách nào để xử lý không xác định trong PHP?

Thông báo sửa chữa. Biến không xác định bằng cách sử dụng hàm isset() . Các giải pháp. Để khắc phục loại lỗi này, bạn có thể xác định biến là toàn cục và sử dụng hàm isset() để kiểm tra xem biến đó có được đặt hay không .

Làm cách nào để tránh chỉ mục không xác định?

Có thể tránh lỗi bằng cách sử dụng hàm isset() . Hàm này sẽ kiểm tra xem các biến chỉ mục có được gán giá trị hay không trước khi sử dụng chúng.

Làm cách nào để xóa lỗi bù không xác định trong PHP?

Có thể tránh lỗi bằng cách sử dụng phương thức isset() . Phương thức này sẽ kiểm tra key của mảng đã khai báo có giá trị null hay không. Nếu có, nó trả về false, ngược lại, nó trả về true cho mọi trường hợp. Loại lỗi này xảy ra với mảng khi chúng ta sử dụng khóa của mảng không được đặt.

Làm cách nào để sửa lỗi PHP?

Chỉnh sửa php. .
Đăng nhập vào cPanel của bạn
Chuyển đến Trình quản lý tệp. .
Tìm phần “Xử lý lỗi và ghi nhật ký” trong php. ban đầu. .
Tiếp theo, bạn có thể đặt biến display_errors thành Bật hoặc Tắt để hiển thị lỗi trên trang web của mình hoặc không