PHP/HTML - وظيفة ISSET
سؤال
أنا جديد إلى حد ما على PHP وأقوم بإنشاء موقع ويب لشركتي. أنا أستخدم بعض التعليمات البرمجية الموجودة التي حصلت عليها ولكن لا يبدو أنها تجعلها تعمل بشكل صحيح - أي مساعدة ستكون موضع تقدير كبير!
لدي متغير ، $ id, ، والذي يحدد نوع فئة المنتج لعرضه على الصفحة. أحتاج أولاً إلى التحقق من أن متغير المعرف قد تم تعيينه ، وإذا لم يكن الأمر كذلك ، فإن المتغير الافتراضي إلى الفئة 0.
الرمز الذي لدي كما يلي:
setdefault($id, 0);
function setdefault(&$var, $default="")
{
if (!isset($var))
{
$var = $default;
}
}
لذلك مع العنوان www.website.com/browse.php ، أتوقع أن يكون افتراضيًا إلى $ id = 0 ؛ باستخدام العنوان www.website.com/browse.php؟id=3 ، أتوقع أن يعين $ id إلى 3 وعرض المنتجات ذات الصلة. ومع ذلك ، على الرغم من إعداد $ id ، إلا أنه لا يزال افتراضيًا إلى 0. هل هناك شيء غير صحيح بشكل واضح مع الكود الخاص بي؟
المحلول
ربما تتوقع أن تستخدم PHP $ _post و $ _get كمتغيرات عالمية. اعتادت PHP إعدادها بهذه الطريقة ، مرة أخرى في اليوم ، ولكن الإصدارات الأحدث تتطلب منك الرجوع صراحة هذه المتغيرات.
يمكنك تجربة هذا:
setdefault($_GET['id'], 0);
function setdefault(&$var, $default="")
{
if (!isset($var))
{
$var = $default;
}
}
أو حتى أكثر ببساطة (باستخدام المشغل الثلاثية):
$id = array_key_exists('id', $_GET) ? $_GET['id'] : 0;
نصائح أخرى
أولاً ، إذا كان هذا هو php 5.xi نوصي بشدة بأن لا تمرر المتغيرات بالرجوع إليها باستخدام &. ما قيل. ستكون دعوة وظيفة ISSET صحيحة دائمًا في الحصول على الوظيفة. لكنك ستتلقى تحذيرًا متغيرًا غير محدد على SetDefault ($ ID ، 0) ؛
جرب هذا بدلا من ذلك.
$id = isset($id) ? $id : 0;
إذا لم يتم تعيين $ ID ، فإن المكالمة إلى SetDefault ($ id ، 0) ستقوم بإنشاء تحذير. وظيفة مثل setDefault لا تعمل في PHP. استخدم هذا بدلاً من ذلك.
if (!isset($id)) $id = 0;
إذا كنت تفعل ذلك لمتغيرات الصفيف ، مثل $ _get و $ _post ، يمكنك القيام بذلك:
function getuservar($A, $index, $default = '') {
if (!isset($A[$index])) return $default;
if (get_magic_quote_gpc()) return stripslashes($A[$index]);
return $A[$index];
}
$clean_id = getuservar($_GET, 'id', 0);
يعد نموذج الإرجاع هذا أفضل لأنك تتوقف عن استخدام صفيف $ _get على الفور واستخدم المتغيرات التي يتم تنظيفها فقط في بقية الكود. تقوم بتنظيف المتغيرات الخارجية مرة واحدة ولا تلمس المتغيرات الخارجية مرة أخرى في الكود الخاص بك. $ a يمكن أن يكون $ _get ، $ _post ، $ _request أو $ _cookie.
كما أنه يتعامل مع أشياء Magic_quote المزعجة لك حتى تعرف البيانات الموجودة في المتغير هو النص الذي أرسله المستخدم. فقط تذكر تنظيفه مرة أخرى عند إرساله إلى المستخدم أو إلى قاعدة البيانات.
كيف هو $id
يجري تعيين؟ إذا register_globals
هو خارج (وهو خارج افتراضيا في PHP 4.2 وأحدث) ، تحتاج إلى النظر في $_GET['id']
أو $_POST['id']
بدلا من ذلك (أو $_REQUEST['id']
, ، ولكن هناك أسباب لتجنب ذلك).
الرمز المطلوب تعيينه $id
إلى وقت ما من سلسلة الاستعلام (browse.php?id=3
) ستحتاج أيضا إلى إدراج. قد تفكر في register_globals
الإعدادات التي لدى PHP التي ستنشئ متغيرات تلقائيًا عند تضمينها في سلسلة الاستعلام. لا تعيد تمكين هذه الميزة ، لعدة سنوات حتى الآن ، تبين أنها فكرة سيئة حقًا.
يجب فحص أي متغير تقوم بسحبه من سلسلة الاستعلام للنوع/السلامة قبل استخدامه. لذلك على سبيل المثال ، يمكنك سحب المتغير من $_GET
Super Global ، تحقق لمعرفة ما إذا كان الرقم ، إذا لم يكن ذلك بعد ذلك ، قم بتعيين الافتراضي:
if (!is_numeric($_GET['id']) {
setdefault($_GET['id'], 0);
}