syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
Solution 1
Your problem is that you're not closing your HEREDOC correctly. The line containing END;
must not contain any whitespace afterwards.
Solution 2
I stumbled on this question as I had the same error. Mine was due to a slightly different problem and since I resolved it on my own I thought it useful to share here. Original code with issue:
$comment = "$_POST['comment']";
Because of the enclosing double-quotes, the index is not dereferenced properly leading to the assignment error. In my case I chose to fix it like this:
$comment = "$_POST[comment]";
but dropping either pair of quotes works; it's a matter of style I suppose :)
Solution 3
You have extra spaces after END;
that cause the heredoc not terminated.
user1083482
Updated on August 04, 2022Comments
-
user1083482 almost 2 years
I have been staring at this code for hours now and I cannot figure out where my mistake is. I know this syntax error usually comes up because of some missing or out of place curly brace or some issue with single/double quotes and I'm not sure there is one anywhere in my code. I am only trying to fix my syntax right now so I can get the code to completely compile. Any help would be much appreciated. Here is my code:
<!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>