2013-10-15 169 views
-1

这里是我的数据库样本输出错误:PHP:使用IF ELSE语句

**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 "&nbsp;<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 "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; 
    echo $row['fldBldgName']; 
    echo "&nbsp;<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 "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; 
    echo $row['fldBldgName']; 
    echo "&nbsp;<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 "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; 
    echo $row['fldBldgName']; 
    echo "&nbsp;<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 "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; 
    echo $row['fldBldgName']; 
    echo "&nbsp;<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 "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; 
    echo $row['fldBldgName']; 
    echo "&nbsp;<img src='image/warning.png' title='Only 60 s left'><br>"; 
} 

样本场景:

我选择“5 s”为持续时间...

这里是我的程序的输出,: 这一个是错的.... enter image description here

输出应该..

这是一个正确的输出:

因为我将只是在总的持续时间仅添加“5秒” ....其余部分的持续时间的工作,但代替该一个[5秒]

enter image description here

感谢您的帮助..

+0

您应该发布一段尽可能小的代码,我们可以在我们的电脑上运行并尝试查看出了什么问题。 – Veda

+0

'$ someVar> =“60 s”会流下眼泪:当比较数字时,''10s'>'5s''评估为_false _...,请确保比较_numeric types_,而不是字符串...和_refactor this code_,please ...保持这个会让别人哭泣 –

+0

@Veda ...那已经是我的代码的总结... – user2826499

回答

0

按照要求由OP:问题出在方法$get_duration的值evaluted:

$get_duration <= "60 s" 

例如...比较字符串总是会很麻烦:

var_dump('9s' > '4s');//true 
//but: 
var_dump('10s' > '5s');//false! 
var_dump('9s' > '50s');//true! 

这是因为比较字符串是不同的:

'787-9'> '50年代'

如果你看看C处理字符串的方式,可能是最好的理解:'9'=> 57(ASCII),而'5'实际上是53,而从57> 53,两个字符串的比较等同于真。特别是如果你考虑0实际上是48,但s实际上是115.
当然,PHP会发现你实际上在比较'12' > '9',并比较整数val而不是(12 > 9)的情况。但是,为了安全起见,我个人更喜欢将我的变量转换为正确的类型。这样,我确信给定变量包含的是什么类型

比较数字时,比较整数/浮点值,而不是它们的字符串表示。
基本上,将所有"60 s"字符串常量替换为60。正如OP提到的:这解决了问题/。

+0

@EliasVanOotegem ...再次感谢.. :)并顺便说一句..“var_dump('9s'>'4s'); // true”this one,我虽然应该删除“s” – user2826499

+0

@ user2826499:是的,但这只是为了解释大于/小于比较和字符串是危险的!应该,理想情况是'(int)$ get_duration> 60'(比较整数) –

+0

@ EliasVanOotegem..OOHhh我明白了..再次感谢! :) – user2826499

0

我不会去尝试弄清楚你到底在做什么。只要推荐使用Switch命令,而不是加载嵌套的if/elseif语句。

如果我看到你在那里硬编码LRT-2,我认为你可以通过不同的方式来制定你的数据库查询,使事情变得更好。

+0

@JelleFerwerda ...作为现在,该代码是修复.... – user2826499