2009-10-21 11 views
5

यह काम करना चाहिए, इसलिए मैं वास्तव में परेशान हूं कि यह क्यों काम नहीं कर रहा है।PHP फ़ाइल को एक फ़ाइल में पास करना?

मैं यह देखने के लिए जांच कर रहा हूं कि कोई उपयोगकर्ता प्रत्येक व्यवस्थापक पृष्ठ के शीर्ष पर $ सत्र कक्षा विधि का उपयोग कर लॉग इन कर रहा है या नहीं। हालांकि, मैं उपयोगकर्ता द्वारा लॉग इन किया गया है या उपयोगकर्ता के किस स्तर पर है, इस पर निर्भर करता है कि मैं हेडर फ़ाइल को गतिशील रूप से समायोजित करना चाहता हूं।

तो मैं $session->is_logged_in() जांचता हूं और फिर मैं आगे बढ़ता हूं और $logged = true नामक चर को परिभाषित करता हूं; बाद में उपयोग करने के लिए। मैं फिर उपयोग करने के लिए $role_level नामक एक नए var में एक नया उपयोगकर्ता ऑब्जेक्ट बनाने और $user->role_level स्टोर करने के लिए $user->find_by_id($session->id) विधि का उपयोग करता हूं।

यह सब पृष्ठ के शीर्ष के पास हो रहा है। पेज प्रपत्र प्रसंस्करण इत्यादि के आगे, include("../_layouts/header.php") कमांड है। फिर, header.php फ़ाइल में, मैं if(!$logged) { ... } else { ... } जैसे छोटे चेक का उपयोग करता हूं।

Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 119 
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 131 
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 138 

यह कैसे हो सकता है: हालांकि ...

मैं निम्न त्रुटियों मिल रहा है? मैं header.php शामिल करने से पहले फ़ाइल में वर्र्स को परिभाषित कर रहा हूं! क्या वह काम नहीं करना चाहिए?

एफवाईआई, सब कुछ ठीक काम कर रहा था जब तक कि मैंने header.php फ़ाइल में $logged का उपयोग करने का प्रयास नहीं किया।

+1

'$ लॉग' हर मामले में सेट है? कोड में कोई संभावित तरीका नहीं है कि यह सेट होने में विफल हो सकता है? यदि आप '$ log = "" जोड़ते हैं;' स्क्रिप्ट के शीर्ष पर (परिभाषा से पहले), क्या होता है? –

+0

यह एक बार मेरे साथ हुआ जब मैंने एक समारोह में एक फ़ाइल शामिल की। जब तक आप वैरिएबल को पैरामीटर के रूप में पास नहीं करते हैं या उन्हें वैश्विक रूप से परिभाषित नहीं करते हैं, वे शामिल फ़ाइल में उपलब्ध नहीं हैं। बस एक tidbit। – nalply

उत्तर

4

वेरिएबल शामिल फ़ाइलों को प्रचारित करते हैं, इसलिए यह होना चाहिए कि चर शामिल नहीं है जब आप कॉल को कॉल करते हैं: ऐसा करने का प्रयास करें, फिर पता लगाएं कि चर उस बिंदु पर क्यों सेट नहीं है।

उदाहरण के लिए, यदि आपने "अगर" ब्लॉक या किसी फ़ंक्शन के अंदर $ लॉग को परिभाषित किया है, तो यह इसके बाहर प्रचार नहीं करेगा: आपको इसे बाहरीतम दायरे में परिभाषित करना होगा (उसी स्तर पर जिसे आप कॉल करते हैं शामिल कथन)। और आपको इसे इस मामले के लिए परिभाषित करना होगा कि उपयोगकर्ता लॉग इन नहीं है, न केवल उस स्थिति के लिए जब उपयोगकर्ता लॉग इन होता है। यदि चर को गलत में प्रारंभ नहीं किया गया है, तो चेक (! $ लॉग) चेतावनी जारी करेगा। $ लॉग = झूठ कहो; आपके काम की शुरुआत में।

+0

आप दोनों के लिए धन्यवाद। $ लॉग वैरिएबल फ़ाइल के शीर्ष पर $ log = false के रूप में सेट किया गया है; - यह बहुत भ्रमित है। – rhodesjason

+0

यह किसी प्रकार का गड़बड़ होना चाहिए क्योंकि यह अब काम कर रहा है। सबको धन्यवाद। – rhodesjason

1

यह काम करता है बहुत ही सरल कुछ, जैसे

// file1.php 
$var = "foobar"; 

// file2.php 
include("file1.php"); // or require("file1.php"); 
die($var); 

का प्रयास करें? शायद यह आपके कोड के बाहर एक समस्या है।

1

सिर्फ एक राय ... वैश्विक अंतरिक्ष में निष्पादित करने के लिए कोड को शामिल करने और परिभाषित किए जाने वाले किसी अन्य वैश्विक चर के आधार पर, अपनी फ़ाइल को कहीं भी शामिल करें और header.php के अंदर कोड उचित कार्यों में व्यवस्थित किया जाए। फिर जहां आप header.php से आउटपुट चाहते हैं, उचित फ़ंक्शन को $ log के साथ तर्क के रूप में कॉल करें। यह आपके कोड को अधिक समेकित और परीक्षण करने में आसान बनाने में मदद करेगा (जैसे यूनिट परीक्षणों में)।

+0

मुझे यकीन नहीं है कि मैं अनुसरण करता हूं लेकिन मुझे आपकी बातों में दिलचस्पी है। मैं एक सत्र में उपयोगकर्ता डेटा संग्रहीत कर रहा हूं इसलिए मुझे उपयोगकर्ता की भूमिका/अनुमतियों के आधार पर हेडर HTML को बदलने में सक्षम होना चाहिए। जब header.php $ सत्र चर को कॉल करने में असमर्थ लग रहा था तो मैंने $ लॉग घोषित करने का प्रयास किया। ऐसा लगता है कि एक गड़बड़ी हुई जिसने मुझे या तो करने से रोका, इसलिए अब मैं शायद $ सत्र-> आदि पर कॉल करने के लिए वापस जा सकता हूं। आप क्या सुझाव दे रहे थे? – rhodesjason

+0

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

+0

... तो हो सकता है कि आपके पास 'फ़ंक्शन getPageHeader ($ bIsLoggedIn) हो सकता है {$ bIsLoggedIn पर आधारित सामग्री करें और HTML को स्ट्रिंग के रूप में वापस करें; } '। जहां आप आउटपुट दिखाना चाहते हैं, तो आप getPageHeader को प्रतिबिंबित कर सकते हैं ($ लॉग); '। यह वैश्विक चर, आदि से कोड को डीक्यूल करेगा, और इसे पुन: प्रयोज्य और यूनिट टेस्टेबल बना देगा। यह सिर्फ सुरक्षित और टूटा जाने की संभावना कम है। – grantwparks

1

if (!logged) के बजाय, if (empty($logged)) आज़माएं। इससे उन मामलों में नोटिस उत्पन्न नहीं होंगे जहां चर सेट नहीं किया गया है।

संबंधित मुद्दे