syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING

145,469

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.

Share:
145,469
user1083482
Author by

user1083482

Updated on August 04, 2022

Comments

  • user1083482
    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>