我在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。
预览像这样
如果我输入16:00结果成功,但如果我输入19:00它仍然成功。
有人可以帮我解决这个问题吗?
先谢谢
答案 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;