如何在PHP上进行六次比较?

时间:2015-06-04 02:54:49

标签: php time

我在PHP上比较3时有问题。

因此用户只需输入一个时间()。但它必须与从数据库加载的3个不同时间进行比较。

像这样的代码

    if(isset($_POST[SUBMIT])) {


        $waktu = strtotime($_POST[WAKTU]); //$waktu variabel input set  hh:mm

     /*Get Time Setting From mysql*/

     $sql4 = "SELECT * FROM promo_time";
     $hasil4 = mysqli_query($sql4);
     $data4 = mysqli_fetch_assoc($hasil4);


     $jam1_A = strtotime($data4[WAKTU_PROMO1_A]);
     $jam1_B = strtotime($data4[WAKTU_PROMO1_B]);

     $jam2_A = strtotime($data4[WAKTU_PROMO2_A]);
     $jam2_B = strtotime($data4[WAKTU_PROMO2_B]);

     $jam3_A = strtotime($data4[WAKTU_PROMO3_A]);
     $jam3_B = strtotime($data4[WAKTU_PROMO3_B]);

if(($waktu >= $jam3_A) || ($waktu <= $jam3_B)){

          if(($waktu >= $jam2_A) || ($waktu <= $jam2_B)) {

               if(($waktu >= $jam1_A) || ($waktu <= $jam1_B)) {


                  echo "Success";


               }
               else {

                   echo "erro 3";   

                }


          }
          else {

            echo "Error 2";  
          }


     }//endif
     else {

         echo "Error 1";     

     }




    }

如果我使用OR运算符,代码结果总是显示“Succes”。 但是,如果我使用AND运算符,则代码结果始终为Error 1。

预览像这样 enter image description here

如果我输入16:00结果成功,但如果我输入19:00它仍然成功。

有人可以帮我解决这个问题吗?

先谢谢

3 个答案:

答案 0 :(得分:0)

感谢vp_arth。这应该是正确的逻辑

$jam1_bool = $waktu > $jam1_A && $waktu < $jam1_B;
$jam2_bool = $waktu > $jam2_A && $waktu < $jam2_B;
$jam3_bool = $waktu > $jam3_A && $waktu < $jam3_B;

if (!$jam1_bool)
    echo "Error 1";
if (!$jam2_bool)
    echo "Error 2";
if (!$jam3_bool)
    echo "Error 3";
if($jam1_bool && $jam2_bool && $jam3_bool)
    echo "Success";

答案 1 :(得分:0)

你的逻辑错了。例如,如果当前时间是16:00

(16:00>=01:00) || (16:00<=04:14) is true, because (16:00>=01:00) is true

(16:00>=07:12) || (16:00<=10:12) is true, because (16:00>=07:12) is true

(16:00>=15:10) || (16:00<=18:11) is true, because (16:00>=15:10) is true

在这种情况下,您将获得“成功”。至于19:00

(19:00>=01:00) || (19:00<=04:14) is true, because (19:00>=01:00) is true

(19:00>=07:12) || (19:00<=10:12) is true, because (19:00>=07:12) is true

(19:00>=15:10) || (19:00<=18:11) is true, because (19:00>=15:10) is true

因此,它应该是“成功”。

我想你想要完成的是:

$boo1 = (($waktu >= $jam1_A) || ($waktu <= $jam1_B));
$boo2 = (($waktu >= $jam2_A) || ($waktu <= $jam2_B));
$boo3 = (($waktu >= $jam3_A) || ($waktu <= $jam3_B));
$boo12= (($boo1)&&($boo2));
$boo23= ($boo2)&&($boo3));
$boo13= (($boo1)&&($boo3));
$booAll = ($boo1)&&($boo2)&&(boo3);

if(booALL)
  echo "success"
else if (($boo23==true)&&($boo1==false))
  echo "error 1";
else if (($boo13==true)&&($boo2==false))
  echo "error 2";
else if (($boo12==true)&&($boo3==false))
  echo "error 3";
else
  echo "other errors"

其他错误就像$ boo1 = true,$ boo2 = false,$ boo3 = false。这意味着当前时间要么不在jam2A~jam2B没有堵塞3A~jam3B,你还应该把这个错误视为错误4,应该有7种类型的错误(包括一个全错错误)。

答案 2 :(得分:0)

a >= 1 || a <= 2适用于所有数字a。使用&&

像这样:

$in1 = $waktu >= $jam1_A && $waktu <= $jam1_B;  
$in2 = $waktu >= $jam2_A && $waktu <= $jam2_B;
$in3 = $waktu >= $jam3_A && $waktu <= $jam3_B;
$result = ($in1 || $in2 || $in3) ? 'Success' : 'Error';
echo $result;