我正在开发一个内容管理系统,到目前为止一直很好。
我正在尝试让系统使用维护模式系统。 这是脚本中显示维护内容的代码:
if ($maintenance['value'] == "1") {?>
<div id="content">
<div id="errmsg">
<?php echo $maintenance['notes']; ?>
</div>
</div>
<? } else {?>
<h1><?php echo $title; ?></h1>
<hr /><br />
<div id="content">
<?php echo $contents;
if (!$content) {
include ('includes/error/404.php');}?>
</div>
<? } ?>
我可以验证$ maintenance ['value']变量是否正常工作,但脚本的这一部分无法正常工作。该值当前设置为1,但仍显示其他内容。
有什么想法吗?
答案 0 :(得分:3)
您可以尝试使用其他语法。您可以使用
,而不是打开大括号<?php if ($maintenance['value'] == "1") : ?>
<!-- HTML STUFF HERE -->
<?php ELSE: ?>
<!-- more html stuff here -->
<?php ENDIF; ?>
根据我的经验,PHP解析器可以更好地解析它。
答案 1 :(得分:1)
您的else
声明之后会出现额外的}。
答案 2 :(得分:1)
如何扭转这种做法?
if (!isset($maintenance['value'])) { ?>
// echo normal non-maintenance stuff
<?php } else { ?>
// display maintenance stuff
<?php
}
通过这种方式,您可以知道是否正在设置maintenance
变量。希望,或许echo "<pre>" . print_r(get_defined_vars(),true) . "</pre>";
可以看到原因。
另外,仅仅因为我在if/else
语句中首次运行时通常是残暴和失忆,你确定在实时代码中使用比较而不是赋值运算符吗?
根据OP的以下评论编辑后发帖:
可能不起作用,数据库中的值是1或0.我应该在OP中更清楚。
如果您知道$ maintenance ['value']是布尔值,1或0,那么为什么不使用这些知识并制作:
if ($maintenance['value'] == "0") { ?>
// echo normal non-maintenance stuff
<?php } elseif ($maintenance['value'] == "1") {
// display maintenance stuff
<?php } else {
echo "<pre>" . print_r(get_defined_vars(),true) . "</pre>";
}
然后你确切地知道发生了什么。当然,虽然不是,但为什么。这可能就是你的问题了。
答案 3 :(得分:1)
我是第二个Cassy提出的符号。我的评论:
我不确定PHP如何真正处理数据类型,但我刚检查this site并根据此情况,即使$maintenance['value']
包含整数1
,您的表达式也应评估为true (您将其与字符串"1"
进行比较。)
$maintenance['value']
可以容纳的另一个值是什么? “0”?如果是这样,为什么不将TRUE
和FALSE
分配给变量,以便保存?无论如何,也许你可以尝试只写这样的表达式:
<?php if ($maintenance['value']) : ?>
如果TRUE
包含以下任何值,则评估结果为$maintenance['value']
:
答案 4 :(得分:1)
正如其他人所说,你试图在int和字符串之间进行比较。您可以使用“1”或1或“0”或0更改所有内容。另一种更好的方法是使用特定于类型的比较运算符(例如===
或!==
)来匹配价值和类型;并使用布尔术语true和false来使你自己和解释者明白你想要做的事情。
您也可以尝试使用define("MAINTENANCE", true);
,以确保该值在脚本中途不会发生变化。尽管如此,除非您为文件写入新值,否则这可能会使更改服务器端设置变得更加困难。虽然在服务器尝试为另一个客户端读取文件时可能会出现问题...