Correct source code, but I got parse error: syntax error, unexpected '}'
Correct source code, but I got parse error: syntax error, unexpected '}'
现在我正在尝试建立一个网站的本地镜像。我有这个网站的整个数据库和源代码。
网站在服务器上运行顺利,但是当我尝试在本地访问网站的 login.php 时,出现解析错误:语法错误,意外的'}'。
我查看了login.php的源码,语法应该没有问题。我也尝试了不同版本的 php,但一次又一次地出现相同的语法错误。谁能帮我找出问题所在?
login.php中php部分的源代码:
<?php
if ($form->Value("email") != "")
?>
<script>document.getElementById('email').value = "<?php echo $form->Value("email"); ?>"</script>
<?
if ($form->Value("pass") != "")
?>
<script>document.getElementById('pass').value = "<?php echo $form->Value("pass"); ?>"</script>
<?
$fields = array("email", "pass");
for ($i=0 ; $i<count($fields) ; $i++) {
if ($form->Error($fields[$i]) != "") {
?>
<script>DisplayMsg(document.getElementById("<?php echo $fields[$i]; ?>"), "<?php echo $form->Error($fields[$i]); ?>", false);</script>
<?php
}//Parse error here: syntax error, unexpected '}'
else {
?>
<script>DisplayMsg(document.getElementById("<?php echo $fields[$i]; ?>"), "", true);</script>
<?php
}
}
?>
我正在使用 XAMPP 来设置我的本地环境。
我是 php 的新手,如果我需要 post 更多信息,请告诉我
将 php 代码放入 html 页面的方式不太可读。您可以试试这种格式:
<?php for ($i=0 ; $i<count($fields); $i++): ?>
<?php if ($form->Error($fields[$i]) != ""): ?>
<script>DisplayMsg(document.getElementById("<?php echo $fields[$i]; ?>"), "<?php echo $form->Error($fields[$i]); ?>", false);</script>
<?php endif; ?>
<?php endfor; ?>
这也将避免花括号出现问题。
这可能是因为您在本地测试时禁用了 short_open_tag。此设置控制 <? ?>
等标签在解析期间是否被解释为 PHP。
结果是这个块:
<?
$fields = array("email", "pass");
for ($i=0 ; $i<count($fields) ; $i++) {
if ($form->Error($fields[$i]) != "") {
?>
永远不会作为 PHP 执行。
因此,右大括号在此处使用时不会关闭任何内容:
<?php
}//Parse error here: syntax error, unexpected '}'
else {
?>
这就是为什么在一种情况下出现解析错误而在另一种情况下却没有。
此处的语法错误是由于 if 块的开始和结束大括号位于不同类型的开始 php 标记中。例如下面会抛出类似的语法错误:
<?php
if (TRUE) {
?>
<script> ..... </script>
<? //Short open tag, differnet from <?php in previous block
}
?>
虽然这不会抛出任何语法错误:
<?php
if (TRUE) {
?>
<script> ..... </script>
<?php
}
?>
现在我正在尝试建立一个网站的本地镜像。我有这个网站的整个数据库和源代码。 网站在服务器上运行顺利,但是当我尝试在本地访问网站的 login.php 时,出现解析错误:语法错误,意外的'}'。 我查看了login.php的源码,语法应该没有问题。我也尝试了不同版本的 php,但一次又一次地出现相同的语法错误。谁能帮我找出问题所在?
login.php中php部分的源代码:
<?php
if ($form->Value("email") != "")
?>
<script>document.getElementById('email').value = "<?php echo $form->Value("email"); ?>"</script>
<?
if ($form->Value("pass") != "")
?>
<script>document.getElementById('pass').value = "<?php echo $form->Value("pass"); ?>"</script>
<?
$fields = array("email", "pass");
for ($i=0 ; $i<count($fields) ; $i++) {
if ($form->Error($fields[$i]) != "") {
?>
<script>DisplayMsg(document.getElementById("<?php echo $fields[$i]; ?>"), "<?php echo $form->Error($fields[$i]); ?>", false);</script>
<?php
}//Parse error here: syntax error, unexpected '}'
else {
?>
<script>DisplayMsg(document.getElementById("<?php echo $fields[$i]; ?>"), "", true);</script>
<?php
}
}
?>
我正在使用 XAMPP 来设置我的本地环境。 我是 php 的新手,如果我需要 post 更多信息,请告诉我
将 php 代码放入 html 页面的方式不太可读。您可以试试这种格式:
<?php for ($i=0 ; $i<count($fields); $i++): ?>
<?php if ($form->Error($fields[$i]) != ""): ?>
<script>DisplayMsg(document.getElementById("<?php echo $fields[$i]; ?>"), "<?php echo $form->Error($fields[$i]); ?>", false);</script>
<?php endif; ?>
<?php endfor; ?>
这也将避免花括号出现问题。
这可能是因为您在本地测试时禁用了 short_open_tag。此设置控制 <? ?>
等标签在解析期间是否被解释为 PHP。
结果是这个块:
<?
$fields = array("email", "pass");
for ($i=0 ; $i<count($fields) ; $i++) {
if ($form->Error($fields[$i]) != "") {
?>
永远不会作为 PHP 执行。
因此,右大括号在此处使用时不会关闭任何内容:
<?php
}//Parse error here: syntax error, unexpected '}'
else {
?>
这就是为什么在一种情况下出现解析错误而在另一种情况下却没有。
此处的语法错误是由于 if 块的开始和结束大括号位于不同类型的开始 php 标记中。例如下面会抛出类似的语法错误:
<?php
if (TRUE) {
?>
<script> ..... </script>
<? //Short open tag, differnet from <?php in previous block
}
?>
虽然这不会抛出任何语法错误:
<?php
if (TRUE) {
?>
<script> ..... </script>
<?php
}
?>