2011-12-06 59 views
10

我一直在这个代码小时盯着现在,我无法揣摩出我的错误是。我知道这个语法错误通常是由于某些缺失或不合适的大括号或单/双引号引起的问题而出现的,我不确定在我的代码中是否有任何地方。我只是试图修复我的语法,所以我可以让代码完全编译。任何帮助将非常感激。这里是我的代码:语法错误,意想不到的T_ENCAPSED_AND_WHITESPACE,期待T_STRING或T_VARIABLE或T_NUM_STRING

<!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> 
+9

这是很好的做法,状态正是被报告错误(即行号和列号)。 – Gian

+0

这的确是“太本地化”的问题 –

+0

只是说明自己节省了大量的头发拉:这样的错误可以很容易地通过使用一个很好的IDE,检查你的代码进行跟踪。 – Oldskool

回答

25

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

+2

我根本不会拿到这最后一行。非常感谢你。这解决了它。 – user1083482

+0

我一直都在。 – Ragamffn

+0

它必须不包含前'END任何空格;'要么,因为我刚刚发现试图格式化我的代码可读性时。 – limeygent

0

可能是粘贴的问题,但据我可以看到你的代码,你错过了周围的HTML部分单引号你回声-ING。

如果没有,你能正确地张贴代码,并告诉我们行导致该错误?

2

END;导致没有结束定界符后有多余的空格。

35

我无意中发现了这个问题,因为我有同样的错误。我的原因是由于一个稍微不同的问题,因为我自己解决了这个问题,我认为在这里分享是有用的。有问题的原代码:

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

由于封闭双引号的,指数不会解除引用正确导致分配错误。在我的情况下,我选择像这样修复它:

$comment = "$_POST[comment]"; 

但是丢掉任一对引号都行;这是一个风格问题,我想:)

+1

在我的情况下,这是一个流浪的反作用。 Geany的语法荧光笔没有注意到它。但乔的语法荧光笔吸引了它。最初你的答案帮助,但我真的战斗假想敌一直;-) –

+0

谢谢,我不知道这 – 2015-04-12 09:24:22

相关问题