синтаксическая ошибка, неожиданный 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> 

Ваша проблема в том, что вы не закрываете свой HEREDOC правильно. Строка, содержащая END; не должно содержать пробелов .

Я наткнулся на этот вопрос, поскольку у меня была такая же ошибка. Мой был вызван несколько иной проблемой, и, поскольку я решил это самостоятельно, мне показалось полезным поделиться здесь. Исходный код с вопросом:

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

Из-за заключенных двойных кавычек индекс не разыменован правильно, что приводит к ошибке присваивания. В моем случае я решил исправить это следующим образом:

 $comment = "$_POST[comment]"; 

но отбрасывает либо пару кавычек; это вопрос стиля, я полагаю 🙂

У вас есть дополнительные пробелы после END; которые заставляют heredoc не прекращаться.

Возможно, это проблема с вставкой, но, насколько я вижу из вашего кода, вам не хватает одиночных кавычек вокруг части HTML, которую вы эхо.

Если нет, можете ли вы правильно опубликовать код и сообщить нам, какая строка вызывает ошибку?