عندما تقوم بالتحقق من قيمة المدة (durationHH
و durationMM
) في الشرط الأول من العبارة الشرطية if
، يجب أن تكون القيمتين أصغر من أو تساوي صفر. إذا كان أحدهما يساوي صفر والآخر فارغ، فإن الشرط الذي يتحقق هو شرط القيمتين فارغتين. وهذا يفسر لماذا تحصل على النتيجة “DurationHH and DurationMM can not be empty.” في هذه الحالتين.
لحل هذه المشكلة، يمكنك استخدام دالة isset
للتحقق من وجود القيم في المتغيرات قبل التحقق من قيمها. يمكنك تعديل الشرط الأول ليصبح كالتالي:
phpif ((!isset($durationHH) || $durationHH <= 0) && (!isset($durationMM) || $durationMM <= 0))
{
echo "DurationHH and DurationMM can not be both zero at the same time.";
echo "
";
echo "DurationHH and DurationMM can not be smaller than 0.";
}
elseif (empty($durationHH) || empty($durationMM))
{
echo "DurationHH and DurationMM can not be empty.";
echo "
";
}
else
{
echo $_POST["durationMM"];
echo ":";
echo $_POST["durationHH"];
}
بهذه الطريقة، ستتأكد من وجود القيم في المتغيرات durationHH
و durationMM
قبل التحقق من قيمتها، وبالتالي لن يتم اعتبارهما فارغتين في الحالات التي تحدث فيها المشكلة.
المزيد من المعلومات
عندما تستخدم الدالة empty()
في PHP، فإنها تعتبر المتغير فارغًا إذا كانت قيمته false
، أو إذا كانت القيمة تعتبر فارغة من وجهة نظر الدالة، مثل القيم 0
أو ""
أو null
أو فارغة بالكامل. في حالتك، عندما يكون durationMM
أو durationHH
يساوي 0
، يعتبرهما الدالة empty()
فارغين.
بالنسبة للحالات التي تحدث فيها المشكلة، يعتبر PHP القيمة 0
فارغة بواسطة الدالة empty()
، وهذا هو السبب في الحصول على رسالة “DurationHH and DurationMM can not be empty.” عندما تكون إحدى القيم تساوي 0
والأخرى غير فارغة.
لحل هذه المشكلة، يمكنك استخدام الدالة isset()
للتحقق من وجود القيم قبل التحقق من قيمتها، كما هو موضح في الكود الذي قمت بتعديله في الرد السابق.