【问题标题】:syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING [duplicate]语法错误,意外的 T_ENCAPSED_AND_WHITESPACE,需要 T_STRING 或 T_VARIABLE 或 T_NUM_STRING [重复]
【发布时间】:2012-01-14 01:28:20
【问题描述】:

我已经盯着这段代码看了好几个小时了,我不知道我的错误在哪里。我知道这个语法错误通常是由于一些缺少或不合适的花括号或单/双引号的一些问题而出现的,我不确定我的代码中是否有任何地方。我现在只是想修复我的语法,以便让代码完全编译。任何帮助将非常感激。这是我的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<title>Add to and Read from the Database</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
</head> 
<body>

<?php
function print_form() {
echo <<<END
         <form action="$_SERVER[PHP_SELF]" method="post">

    <h3>Please put your comments below.</h3>

<input type="hidden" name="stage" value="process" >
<p>Name:</p>
<input type="text" size="30" name="WholeName" />
<p>Comment:</p>
<input type="text" size="200" name="Comment" />

<input type ="submit"  value ="Submit" >
</form>
END;    

    }
function process_form() {

print "<p>adding comment...</p>";

$Name = $_POST['WholeName'];
$Comment = $_POST['Comment'];

    if( preg_match("^[a-zA-Z]+$", $Name)) {
        if( preg_match("^[a-zA-Z0-9]_\-\'[.?!]+$", $Comment)) {
            $sql = "insert into comments1 values ( 
           '$Name', 
           '$Comment')";
           $result = mysql_query($sql) or die("Mysql query failed");
      } else {
        print "invalid name";
        }
  } else {
print "invalid characters";
 }

}

$db = mysql_connect("", "", "");
if (!$db) {
   print "Error - Could not connect to mysql";
   exit;
}  

$er = mysql_select_db("");
if (!$er) {
  print "Error - Could not connect to comments1 database";
  exit;
}

if (isset($_POST['stage']) && ('process' == $_POST['stage'])) {
   process_form();
} else {
    print_form();
}

?>

</body>
</html>

【问题讨论】:

  • 最好说明报告错误的确切位置(即行号和列号)。
  • 这确实是“过于本地化”的问题
  • 请注意,这样可以省去很多麻烦:使用检查代码的良好 IDE 可以轻松追踪此类错误。
  • FWIW,有问题的行是$Name = $_POST['WholeName'];codepad.viper-7.com/NEJqgK
  • 它告诉我错误发生在第32行。您能推荐一个好的IDE供我使用吗?

标签: php parsing syntax


【解决方案1】:

我偶然发现了这个问题,因为我遇到了同样的错误。我的问题是由于一个稍微不同的问题,因为我自己解决了它,所以我认为在这里分享很有用。有问题的原始代码:

$comment = "$_POST['comment']";

由于封闭的双引号,索引未正确取消引用导致分配错误。就我而言,我选择这样修复它:

$comment = "$_POST[comment]";

但删除任何一对引号都有效;我想这是风格问题:)

【讨论】:

  • 在我的情况下,它是一个流浪的`反引号。 Geany 的语法高亮没有注意到它。但乔的语法荧光笔抓住了它。最初你的回答有帮助,但我一直在与一个假想的敌人作战;-)
【解决方案2】:

您的问题是您没有正确关闭 HEREDOC。包含END;must not contain any whitespace afterwards的行。

【讨论】:

  • 并且它在END;之前也不能包含任何空格,因为我刚刚在尝试格式化我的代码以提高可读性时发现。
【解决方案3】:

END; 之后有多余的空格导致 heredoc 未终止。

【讨论】:

    【解决方案4】:

    可能是粘贴问题,但据我从您的代码中可以看出,您正在回显的 HTML 部分周围缺少单引号。

    如果没有,您能否正确发布代码并告诉我们是哪一行导致了错误?

    【讨论】:

      猜你喜欢
      • 2011-11-07
      • 2014-07-03
      • 2012-03-23
      • 2017-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      相关资源
      最近更新 更多