0

我正在尝试做一些事情,当您打开 index.php?bodyonly=1 之类的东西时,php 只返回 body html 标记内的内容。但是,当我尝试以下代码时:

<?php if !isset($_GET["bodyonly"]): ?><html>
    <head>
        <title>TEST</title>
    </head>

    <body>

        <p>Up!</p>

        <?php endif; ?><p>Down!</p><?php if !isset($_GET["bodyonly"]): ?>
    </body>
</html><?php endif; ?>

我收到错误 500,但没有任何反应。如果我尝试使用 if(isset...){ echo ... } 的替代方法,事情就会发生,但我必须做很多我不想做的其他更改。

愿意开导我吗?:)

4

1 回答 1

3

在所有类型的 PHP 语法中,条件都需要用括号括起来。

<?php if (!isset($_GET["bodyonly"])): ?><html>
    <head>
        <title>TEST</title>
    </head>

    <body>

        <p>Up!</p>

        <?php endif; ?><p>Down!</p><?php if (!isset($_GET["bodyonly"])): ?>
    </body>
</html><?php endif; ?>

另外,您是否考虑过为您的代码使用更现代的结构?花括号和将 PHP 作为一种编程语言而不是 HTML 包装器使用使得很容易看到有条件运行的内容。

<?php

$status="Up";
// $status="Down";

$header="<html>\n\t<head>\n\t\t<title>TEST</title>\n\t</head>\n\n  <body>\n";
$footer="  </body>\n</html>\n";

if (!isset($_GET["bodyonly"])) {
  print $header;
}

printf("\t<p>%s</p>\n", $status);

if (!isset($_GET["bodyonly"])) {
  print $footer;
}

或者,为了好玩,甚至:

<?php

$status="Up";
// $status="Down";

$header="<html>\n\t<head>\n\t\t<title>TEST</title>\n\t</head>\n\n  <body>\n";
$footer="  </body>\n</html>\n";

print isset($_GET["bodyonly"]) ? "" : $header;

printf("\t<p>%s</p>\n", $status);

print isset($_GET["bodyonly"]) ? "" : $footer;

或者(这只是变得愚蠢):

<?php

$status="Up";
// $status="Down";

$header=""; $footer="";

if (!isset($_GET["bodyonly"])) {
  $header="<html>\n\t<head>\n\t\t<title>TEST</title>\n\t</head>\n\n  <body>\n";
  $footer="  </body>\n</html>\n";
}

print $header . sprintf("\t<p>%s</p>\n", $status) . $footer;

查看php.net的语法说明。

于 2012-06-12T01:00:28.453 回答