我正在编写包含HTML和PHP命令的代码。当我尝试在浏览器上运行代码时,收到此消息:
解析错误:语法错误,第21行的C:\ WAMP \ www \ urr00001 \ SummerProject \ projectquestionnaire.php中的意外$结尾。
我不明白第21行是错误的。我假设" echo<<< _END ... _END"必须输出多行HTML时必须使用构造。但浏览器并不喜欢这样。我的代码如下所示。我该如何纠正这种情况呢?
<?php //questionnaire.php
if (isset($_POST['name'])) $name = $_POST['name'];
else $name = "(Not entered)";
echo <<<_END
<html>
<head>
<title>Questionnaire</title>
</head>
<body>
Your name is: $name<br>
<form method="post" action="questionnaire.php">
What is your name?
<input type="text" name="name">
<input type="submit">
</form>
</body>
</html>
_END;
?>
答案 0 :(得分:1)
确认后,_END;
之前有空格(删除它们)
使用此:(完全贴出)
<?php //questionnaire.php
if (isset($_POST['name'])) $name = $_POST['name'];
else $name = "(Not entered)";
echo <<<_END
<html>
<head>
<title>Questionnaire</title>
</head>
<body>
Your name is: $name<br>
<form method="post" action="questionnaire.php">
What is your name?
<input type="text" name="name">
<input type="submit">
</form>
</body>
</html>
_END;
?>
警告强> 请注意,除了分号(;)之外,具有结束标识符的行必须不包含其他字符,这一点非常重要。这尤其意味着标识符可能没有缩进,并且在分号之前或之后可能没有任何空格或制表符。认识到结束标识符之前的第一个字符必须是本地操作系统定义的换行符也很重要。这是在UNIX系统上的\ n,包括Mac OS X.结束分隔符后面还必须跟一个换行符。 如果此规则被破坏且结束标识符不是&#34; clean&#34;,则不会将其视为结束标识符,PHP将继续查找。如果在当前文件结束之前未找到正确的结束标识符,则将在最后一行产生解析错误。 Heredocs不能用于初始化类属性。从PHP 5.3开始,此限制仅对包含变量的heredoc有效。
允许:(无空格)
</html>
_END;
?>
不允许:( 1个或多个空格)
</html>
_END;
^--// that's a space, and you have many.
?>
答案 1 :(得分:0)
这只是一个意见,但我更愿意在代码中看到这一点:
**<?php //questionnaire.php
if (isset($_POST['name'])) $name = $_POST['name'];
else $name = "(Not entered)";
?>**
<html>
<head>
<title>Questionnaire</title>
</head>
<body>
Your name is: **<?php echo $name;?>**<br>
<form method="post" action="questionnaire.php">
What is your name?
<input type="text" name="name">
<input type="submit">
</form>
</body>
</html>
因为它让其他人知道(特别是那些知道HTML但不知道PHP的人)正是使用PHP的地方以及文件只有HTML的地方,让他们一眼就能看到它。顺便说一下,你的文件仍然会被命名为.php。当然,如果您的项目需要&#34; echo&lt;&lt;&lt; _END ... _ END;&#34;然后你必须使用它。