【发布时间】:2014-02-20 22:28:14
【问题描述】:
今天早上在编辑突然无法运行的 CRON 编辑器时,我发现了一个我无法真正解释的奇怪现象。希望这里有人可以启发我。
假设有人可以在没有任何上下文的情况下回答这个问题,我的问题本质上是“为什么 0 == * 评估为真?”
详情
我们将所有活动 CRON 作业的详细信息存储在 MySQL 表中。分钟、小时、天和月字段的类型为varchar,默认为“*”。在编辑 CRON 作业时,我们有一个应该从获取的行中选择当前值的选择,下面标记为 $CRON,下面是一个示例。
数组 ( [CRONID] => 10 [分钟] => 21 [小时] => 6 [天] => * [月] => * [工作日] => * [文件] => CRON_Prop_44.php [ Status] => 1 [CreateBy] => 128 [CreateDate] => 2014-02-20 [ChangeBy] => 128 [ChangeDate] => 2014-02-20)
破碎的选择
以下将生成一个选择,其中星期日作为选定选项。 Inspector 显示 option value="*" 和 option value="0" 都被选中。
<select name="Weekday">
<option value="*" <?php if ($CRON['Weekday'] == "*" ) { echo "selected";} ?> >* - Every day</option>
<?php
$x = 0;
while ($x < 7) {
switch ($x) {
case 0:
$dayname = "Sunday";
break;
case 1:
$dayname = "Monday";
break;
case 2:
$dayname = "Tuesday";
break;
case 3:
$dayname = "Wednesday";
break;
case 4:
$dayname = "Thursday";
break;
case 5:
$dayname = "Friday";
break;
case 6:
$dayname = "Saturday";
break;
}
?>
<option value="<?php echo $x; ?><?php if ($CRON['Weekday'] == $x ) { echo "selected";} ?> ><?php echo $dayname; ?></option>
<?php
$x++;
}?>
周日也被选中的事实让我相信0 == * 是真的。通过添加=== 比较运算符而不是==,我可以按预期工作,但我不明白为什么。是开关的问题吗?选项值=“0”?或者,正如标题所暗示的那样,0 == * 是真的?
(某种)功能选择
我觉得上面前人的代码有点乱,所以我目前正在做以下。尽管如此,将=== 更改为== 只会选择星期日。
<select name="Weekday">
<option value="*" <?php if ($CRON['Weekday'] == "*" ) { echo "selected";} ?> >* - Every day</option>
<?php
$days = array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
$x = 0;
while ($x < 7) {
echo '<option value="' . $x . '" ' . (($CRON['Weekday'] == $x) ? 'selected' : "") . '>' . $days[$x] . '</option>';
$x++;
}
?>
</select>
如果你坚持到这篇文章的结尾,请告诉我我错过了什么?
【问题讨论】:
标签: php mysql sql cron character