如果没有遵循正确的程序?

时间:2009-12-10 21:55:27

标签: php if-statement

我正在开发一个内容管理系统,到目前为止一直很好。

我正在尝试让系统使用维护模式系统。 这是脚本中显示维护内容的代码:

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,但仍显示其他内容。

有什么想法吗?

5 个答案:

答案 0 :(得分:3)

您可以尝试使用其他语法。您可以使用

,而不是打开大括号
<?php if ($maintenance['value'] == "1") : ?>

    <!-- HTML STUFF HERE -->

<?php ELSE: ?>

    <!-- more html stuff here -->

<?php ENDIF; ?>

根据我的经验,PHP解析器可以更好地解析它。

另见the PHP manual for the alternative syntax

答案 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”?如果是这样,为什么不将TRUEFALSE分配给变量,以便保存?无论如何,也许你可以尝试只写这样的表达式:

<?php if ($maintenance['value']) : ?>

如果TRUE包含以下任何值,则评估结果为$maintenance['value']

  • 1
  • 任何整数!= 0
  • “1”
  • 任何字符串!=“0”

答案 4 :(得分:1)

正如其他人所说,你试图在int和字符串之间进行比较。您可以使用“1”或1或“0”或0更改所有内容。另一种更好的方法是使用特定于类型的比较运算符(例如===!==)来匹配价值和类型;并使用布尔术语true和false来使你自己和解释者明白你想要做的事情。

您也可以尝试使用define("MAINTENANCE", true);,以确保该值在脚本中途不会发生变化。尽管如此,除非您为文件写入新值,否则这可能会使更改服务器端设置变得更加困难。虽然在服务器尝试为另一个客户端读取文件时可能会出现问题...