2010-01-29 34 views
11

Trong một trang php Tôi đã mã sau:index Không xác định: Lỗi trong php script

if($_REQUEST['c']!="") // I get error on this line itself. Why? 
{ 
$pidis=(int)($_REQUEST['c']); 
} 

tôi tiếp tục nhận được lỗi index Không xác định.

Trên Googling, tôi quản lý để hiểu rằng nếu trang truy cập mà không có thông số (trong URL) mà chúng tôi đang cố gắng truy cập, chúng tôi có thể nhận được lỗi/cảnh báo này. Tôi tin rằng nếu một tham số không được xác định trong URL, nó sẽ chỉ trả về rỗng thay vì đưa ra thông báo lỗi/cảnh báo.

Tôi biết rằng nó có thể ngăn chặn các lỗi và cảnh báo bằng cách thêm

error_reporting(E_ALL^E_NOTICE);

Nhưng tôi không muốn làm điều này.

Trang này hoạt động tốt trên máy chủ web của công ty chúng tôi nhưng không hoạt động trên máy chủ web của khách hàng của chúng tôi.

Tại sao điều này lại xảy ra?

Cách giải quyết vấn đề này?

+0

Thẻ 'không request' là sai những gì tôi đã thực sự loại là:' $ _REQUEST'. Tại sao TAG '$ _REQUEST' được chuyển thành 'không phải' yêu cầu'' khi chúng tôi đăng? –

Trả lời

25

Bạn nhận được lỗi đó vì bạn đang cố gắng so sánh $_REQUEST['c'] với nội dung nào đó khi $_REQUEST['c'] không tồn tại.

Giải pháp là sử dụng isset() trước khi so sánh. Điều này sẽ loại bỏ cảnh báo, vì việc so sánh sẽ không xảy ra nếu $_REQUEST['c'] không tồn tại.

if(isset($_REQUEST['c']) && $_REQUEST['c']!="") 
{ 
$pidis=(int)($_REQUEST['c']); 
} 

Đây là một lỗi E_NOTICE cấp, và mức độ của bạn error reporting sẽ ảnh hưởng đến việc lỗi xuất hiện hay không. Máy chủ của khách hàng của bạn đã bật báo cáo lỗi cấp E_NOTICE, đó là lý do tại sao nó hiển thị ở đó.

Bạn nên luôn phát triển bằng cách sử dụng E_ALL để bạn có thể nắm bắt loại lỗi này trước khi chuyển mã của mình sang các máy chủ khác.

1

PHP đang gửi thông báo (không phải là lỗi: đó chỉ là thông báo) khi bạn đang cố gắng sử dụng biến không tồn tại hoặc yếu tố mảng không tồn tại.

Đây chỉ là để giúp bạn, và bạn không nên che giấu các thông báo đó: chúng ở đây để giúp bạn - ví dụ, để giúp bạn phát hiện lỗi chính tả trong các tên biến.

Trước khi sử dụng chỉ số mảng, nếu nó không phải luôn luôn hiện diện, bạn nên kiểm tra xem nó ở đây, sử dụng isset:

if (isset($_REQUEST['c']) && $_REQUEST['c']!="") { 
    // ... 
} 
5

Thay vì isset() bạn cũng có thể sử dụng: array_key_exists().

Sự khác biệt giữa hai phương pháp là isset() cũng kiểm tra xem giá trị của biến có là null hay không.Nếu đó là null thì isset trả lại false trong khi array_key_exists() trả về luôn true nếu khóa tồn tại (không có giá trị nào có giá trị). Ví dụ:

$array = array('c' => null); 

var_dump(isset($array['c']))); // isset() returns FALSE here 
var_dump(array_key_exists($array['c']); //array_key_exists() returns TRUE 

Tùy thuộc vào ngữ cảnh, điều quan trọng là phải phân biệt điều này. Trong trường hợp của bạn, tôi không nghĩ rằng nó quan trọng không quan trọng, như (tôi đoán) một tham số yêu cầu sẽ không bao giờ là null (ngoại trừ một ghi đè nó theo cách thủ công).

5

Một giải pháp khác là sử dụng như sau:

$pidis = isset($_REQUEST['c']) ? $_REQUEST['c'] : ''; 

Bạn cũng có thể, nếu bạn muốn trả về một giá trị khác hơn là trống rỗng, bằng cách đặt một giá trị mặc định trong tập cuối cùng của dấu nháy đơn, ví dụ

$pidis = isset($_REQUEST['c']) ? $_REQUEST['c'] : 'Default Value'; 

hoặc trả lại một kiểu biến khác nhau, ví dụ một số nguyên:

$pidis = isset($_REQUEST['c']) ? $_REQUEST['c'] : 34; 
Các vấn đề liên quan