2010-01-29 18 views
11

एक php पृष्ठ में करने में त्रुटि मैं कोड निम्नलिखित है:अपरिभाषित सूचकांक: PHP स्क्रिप्ट

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

मैं अपरिभाषित सूचकांक त्रुटि मिलती रहती है।

गुगलिंग पर मैं समझने में कामयाब हूं कि यदि कोई पृष्ठ पैरामीटर (यूआरएल में) के बिना पहुंच है, जिसे हम एक्सेस करने का प्रयास कर रहे हैं तो हम इस त्रुटि/चेतावनी प्राप्त कर सकते हैं। मेरा मानना ​​है कि अगर यूआरएल में एक पैरामीटर परिभाषित नहीं किया गया है तो उसे त्रुटि/चेतावनी संदेश देने के बजाए खाली वापस जाना चाहिए।

मुझे पता है कि यह

error_reporting(E_ALL^E_NOTICE);

जोड़कर त्रुटियों और चेतावनी को दबाने के लिए संभव है लेकिन मैं यह करने के लिए नहीं करना चाहती।

यह वही पृष्ठ हमारी कंपनी के वेब सर्वर पर ठीक काम करता है लेकिन हमारे क्लाइंट वेब सर्वर पर काम नहीं करता है।

ऐसा क्यों हो रहा है?

इस समस्या को हल करने के लिए कैसे करें?

+0

टैग' नहीं request' झूठी क्या मैं वास्तव में प्रकार था है। जब हम पोस्ट करते हैं तो '$ _REQUEST' TAG को 'अनुरोध' अनुरोध में परिवर्तित क्यों नहीं किया जाता है? –

उत्तर

25

आपको वह त्रुटि मिल रही है क्योंकि आप $_REQUEST['c'] की तुलना करने की कोशिश कर रहे हैं जब $_REQUEST['c'] मौजूद नहीं है।

समाधान इसकी तुलना करने से पहले isset() का उपयोग करना है। यह चेतावनी को हटा देगा, क्योंकि $_REQUEST['c'] मौजूद नहीं होने पर तुलना नहीं होगी।

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

यह एक E_NOTICE स्तर त्रुटि है, और त्रुटि दिखाई देता है या नहीं error reporting के अपने स्तर को प्रभावित करेगा। आपके क्लाइंट के सर्वर में E_NOTICE स्तर त्रुटि रिपोर्टिंग चालू है, यही कारण है कि यह वहां दिखाई देता है।

E_ALL का उपयोग करके हमेशा विकसित करना एक अच्छा विचार है ताकि आप अपने कोड को अन्य सर्वरों पर ले जाने से पहले इस तरह की त्रुटि को पकड़ सकें।

1

यह जांचने के लिए isset($_REQUEST['c']) का उपयोग करें कि यह पहले मौजूद है या नहीं।

1

PHP नोटिस दे रहा है (जो कोई त्रुटि नहीं है: यह केवल एक नोटिस है) जब आप किसी चर का उपयोग करने की कोशिश कर रहे हैं जो मौजूद नहीं है, या कोई सरणी तत्व मौजूद नहीं है।

यह आपकी मदद करने के लिए है, और आपको उन नोटिसों को मुखौटा नहीं करना चाहिए: उदाहरण के लिए, वे आपकी मदद करने के लिए यहां हैं - उदाहरण के लिए, वे चर नामों में टाइपों का पता लगाने में आपकी सहायता के लिए हैं।

कि सरणी सूचकांक का उपयोग कर, अगर यह हमेशा मौजूद नहीं है से पहले, आप अगर यह यहाँ है परीक्षण करना चाहिए, isset का उपयोग कर:

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

इसके बजाय isset() की आप भी उपयोग कर सकते हैं: array_key_exists()

दोनों विधियों के बीच अंतर यह है कि isset() यह भी जांचता है कि चर का मान null है या नहीं।यदि यह null है तो issetfalse देता है जबकि array_key_exists() कुंजी true देता है यदि कुंजी मौजूद है (कोई माटर जो मान नहीं है)। उदा .:

$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 

संदर्भ के आधार पर, इसे अलग करना महत्वपूर्ण है। आपके मामले में मुझे नहीं लगता कि इससे कोई फर्क नहीं पड़ता, जैसा कि (मुझे लगता है) एक अनुरोध पैरामीटर कभी भी null नहीं होगा (सिवाय इसके कि इसे मैन्युअल रूप से ओवरराइट करता है)।

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

भी कर सकते हैं, तो आप, खाली के अलावा किसी अन्य मान देने के लिए एकल उद्धरण के अंतिम सेट के भीतर एक डिफ़ॉल्ट मान रखकर पसंद करते हैं, उदाहरण के लिए:

5

एक अन्य समाधान निम्न का उपयोग करने के लिए है

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

या एक अलग वैरिएबल प्रकार एक पूर्णांक लौटने के लिए, उदाहरण के लिए: `$ _REQUEST`:

$pidis = isset($_REQUEST['c']) ? $_REQUEST['c'] : 34; 
संबंधित मुद्दे