PHP:使用IF-ELSE语句输出错误
以下是我的数据库示例:PHP:使用IF-ELSE语句输出错误,php,Php,以下是我的数据库示例: **Netname** **BldgName** **Totalduration** LRT - 2 Araneta Center - Cubao 09:30:00 LRT - 2 Legarda 09:45:00 LRT - 2 Pureza
**Netname** **BldgName** **Totalduration**
LRT - 2 Araneta Center - Cubao 09:30:00
LRT - 2 Legarda 09:45:00
LRT - 2 Pureza 09:50:00
LRT - 2 Santolan 10:00:00
LRT - 2 Recto Station 09:55:00
然后我有一个持续时间的组合框
Duration
5 s
10 s
15 s
30 s
60 s
这是我的密码:
if(($get_ID == "LRT - 2" || $get_ID == "LRT - 1") && $row[fldTotalDuration] == "10:00:00")
{
echo " ";
echo $row['fldBldgName'];
echo " <img src='image/full.png' title='Already full'><br>";
}
else if(($get_ID == "LRT - 2" || $get_ID == "LRT - 1")&& $row['fldTotalDuration'] >= "09:55:00" && $row['fldTotalDuration'] <= "10:00:00" && $get_duration >= "6 s" && $get_duration <= "60 s" )
{
echo " ";
echo $row['fldBldgName'];
echo " <img src='image/near_full.png' title='Only 5 s left'><br>";
}
else if(($get_ID == "LRT - 2" || $get_ID == "LRT - 1")&& $row['fldTotalDuration'] >= "09:50:00" && $row['fldTotalDuration'] <= "09:54:00" && $get_duration >= "11 s"&& $get_duration <="60 s" )
{
echo " ";
echo $row['fldBldgName'];
echo " <img src='image/near_full.png' title='Only 10 s left'><br>";
}
else if(($get_ID == "LRT - 2" || $get_ID == "LRT - 1")&& $row['fldTotalDuration'] >= "09:45:00" && $row['fldTotalDuration'] <= "09:49:00" && $get_duration >= "16 s" && $get_duration <= "60 s")
{
echo " ";
echo $row['fldBldgName'];
echo " <img src='image/warning.png' title='Only 15 s left'><br>";
}
else if(($get_ID == "LRT - 2" || $get_ID == "LRT - 1")&& $row['fldTotalDuration'] >= "09:30:00" && $row['fldTotalDuration'] <= "09:44:00" && $get_duration >= "31 s" && $get_duration <= "60 s")
{
echo " ";
echo $row['fldBldgName'];
echo " <img src='image/warning.png' title='Only 30 s left'><br>";
}
else if(($get_ID == "LRT - 2" || $get_ID == "LRT - 1")&& $row['fldTotalDuration'] >= "09:00:00" && $row['fldTotalDuration'] <= "09:29:00" && $get_duration > "60 s")
{
echo " ";
echo $row['fldBldgName'];
echo " <img src='image/warning.png' title='Only 60 s left'><br>";
}
if($get_ID==“LRT-2”| |$get_ID==“LRT-1”)&&&$row[fldtottalduration]==“10:00:00”)
{
回声“;
echo$row['fldBldgName'];
回声“
”;
}
否则如果($get|u ID==“LRT-2”|$get|u ID==“LRT-1”)和&$row['fldTotalDuration']>=“09:55:00”&&$row['fldTotalDuration']=“6秒”&$get(duration=“09:50:00”&$row['fldTotalDuration']=“11秒”&$get(duration=“09:45:00”&$row['fldtalduration']=“16秒”&$get&=“30:00”&$fldtalduration&&&$get_duration=“09:00:00”&&$row['FLDTottalDuration']“60秒”)
{
回声“;
echo$row['fldBldgName'];
回声“
”;
}
示例场景:
我选择“5秒”作为持续时间
Duration
5 s
10 s
15 s
30 s
60 s
这是我的程序的输出:
这个错了。。。。
输出应为
这是正确的输出:
因为我只会在总持续时间中加上“5秒”……剩余的持续时间是有效的,而不是这个[5秒]
谢谢你的帮助。我不会试图弄清楚你到底在这里干什么。只是建议使用Switch命令,而不是一堆嵌套的if/elseif语句
如果我看到您在那里硬编码LRT-2,我想您也可以通过以不同的方式制定数据库查询来让事情变得更好 根据OP的要求:问题在于计算
$get\u duration
值的方式:
$get_duration <= "60 s"
这是因为字符串的比较方式不同:
“9年代”>“50年代”
如果你看一下C处理字符串的方式,可能最容易理解:“9'=>57(ASCII),而“5”实际上是53,而且由于57>53,两个字符串的比较等于true。特别是如果你认为<代码> 0 >代码>实际上是48,但是<代码> s <代码>实际上是115。Br/>
当然,PHP会发现实际比较'12'>'9'
的情况,而不是比较整数VAL(12>9
)。但是,为了安全起见,我个人更喜欢将变量转换为正确的类型。这样,我就可以确定给定变量包含的类型
比较数字时,请比较整数/浮点值,而不是它们的字符串表示形式。基本上,用
60
替换所有那些“60 s”
字符串常量。正如OP提到的:这解决了问题/您应该发布一段尽可能小的代码,以便我们可以在pc上运行,并尝试查看错误。$someVar>=“60秒将以眼泪结束:'10s'>'5s'
计算结果为假。。。比较数字时,请确保比较数字类型,而不是字符串。。。并重构此代码,请。。。保持这一点会让人cry@Veda...Thats已经是我代码的摘要了…@EliasVanOotegem…我把它改成“60秒”,因为它的输出来自于持续时间的下拉列表…对不起,你的意思是…我应该删除“s”字???@EliasVanOotegem/。问题解决了!。。。你能把它贴出来吗???@EliasVanOotegem…再次感谢…..)顺便说一下..“var_dump('9s'>'4s');//true”这一个,我想我们应该删除“s”?@user2826499:是的,但这只是为了解释大于/小于比较和字符串是危险的!理想情况下,您应该做的是(int)$get\u duration>60
(比较整数)@EliasVanOotegem..哦,我明白了。。再次感谢!:)