سؤال

ارسال_عنوان_الرمز البريدي

ليس إلزاميا وسيظل يعمل حتى لو كان فارغا:

if (!is_null($_POST['personal_info_first_name']) && 
    !is_null($_POST['personal_info_surname']) && 
    !is_null($_POST['personal_info_email']) && 
    !is_null($_POST['personal_info_telephone']) && 
    !is_null($_POST['dispatch_address_country']) && 
    !is_null($_POST['dispatch_address_first_name']) &&
    !is_null($_POST['dispatch_address_surname']) && 
    !is_null($_POST['dispatch_address_address']) && 
    !is_null($_POST['dispatch_address_town']) && 
    !is_null($_POST['dispatch_address_postcode']) && 
    !is_null($_POST['dispatch_address_county']) && 
    (   ($_POST['payment_method'] == "Pay by credit card.") ||
        (
            ($_POST['payment_method'] == "Pay by new credit card.") && 
            !is_null($_POST['card_number']) && 
            !is_null($_POST['expiration_date']) && 
            !is_null($_POST['security_code'])
        )
    )
)

ما يعطي?

هل كانت مفيدة؟

المحلول

"dispatch_address_postcode ليس إلزاميا وسيظل يعمل حتى لو كان فارغا..."

مجرد إلقاء نظرة على هذه الجملة مرة أخرى.إذا لم يكن الحقل إلزاميا ، فلا بأس تماما إذا تم تشغيل الرمز إذا كان الحقل فارغا.إذا لم يكن الحقل إلزاميا ، فلا تختبره على أنه إلزامي.

المشكلة الحقيقية هي على الرغم من, is_null الاختبارات فقط إذا كان المتغير هو null.لن تكون القيم المنشورة أبدا null, ، إذا كانت فارغة ، فستكون كذلك '' (سلسلة فارغة).كل ما تبذلونه !is_null الاختبارات سوف دائما كن true, ، وسوف تحصل على تحذير إذا لم يتم تعيين المتغير (شيء كنت لا تريد أن يحدث).سيكون الاختبار الأكثر ملاءمة هو !empty.

حتى الاختبارات الأكثر ملاءمة ستشمل اختبارا إذا بدت القيمة صالحة(هل يبدو البريد الإلكتروني كعنوان بريد إلكتروني, هل يحتوي الهاتف على أرقام س على الأقل?).يجب عليك أيضا حلقة من خلال الحقول لجعل التعليمات البرمجية الخاصة بك أكثر قابلية للقراءة ، لا نهاية لها متداخلة والسلاسل if الظروف ليست فرحة للنظر في.

$mandatoryFields = array('foo' => 'email', 'bar' => 'telephone');

foreach ($mandatoryFields as $field => $rule) {
    if (empty($_POST[$field]) || !validateByRule($_POST[$field], $rule)) {
        raiseHell();
    }
}

نصائح أخرى

يبدو أنك تحاول التأكد من تقديم جميع متغيرات النشر.هل ترغب في المساعدة في ذلك؟

باستخدام! فارغة () قد لا تكون الإجابة على سؤالك المحدد، ولكن بالتأكيد سيساعد على ما يبدو أنك تحاول القيام به.

فارغة () إرجاع TRUE إذا لم يتم تعيين مفتاح $ _Post، إذا كانت صفيف فارغة، أو حتى إذا كانت سلسلة فارغة، فذلك باستخدام! فارغة () هي وسيلة جيدة للتأكد من أن المستخدم قد شغلفي المعلومات.

حاول كتابة بنفسك is_valid وظيفة واستخدام ذلك بدلا من is_null.

على سبيل المثال (وهذا ليس شاملا بأي حال من الأحوال):

function is_valid(&$array, $key, $required=false) {
    if(!array_key_exists($array))
        return false;
    $value = trim($array[$key]);
    if(empty($value) && $required)
        return false;
    return true;
}

استخدام مثل ذلك:

if(is_valid($_POST, 'personal_info_first_name', true) && ...)

giveacodicetagpre.

استخدام array_key_exists('card_number', $_POST) && !empty($_POST['card_number'])

تحرير: يرجى النظر في هذا قبل تحويل الرسائل القصيرة.سأترك هذا هنا للعمل "ما لا يجب القيام به".سأحذفها لأنها سيئة، ولكن بعد ذلك سوف يتعلم أحد من أخطائي.

لا تفعل هذا - اقرأ التعليقات للحصول على معلومات رائعة حول سبب هذا الأمر سيئا

إجابتي ستكون مختلفة بشكل ملحوظ، لكنني رجل مختلف تماما ...

أنا فقط وجدت أن هذا سيعمل.بدلا من كل هذا الجهاز والأشياء، فقط قم بتعيين المتغيرات برمجيا!أعتقد أن لدي بعض إعادة صياغة للقيام ... Y'know على كل رمزي ...

giveacodicetagpre.

إذا كنت تستخدم هذا الرمز، فلا يهم ما هو فارغ وما هو غير موجود ضمن الأمر لأن أي شيء فارغ لن يتم إجراؤه فقط.ثم يمكنك استخدام رمز الرموز الأفضل (وربما رمز أسرع) للتحقق من أي شيء مطلوب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top