ti-enxame.com

erro de sintaxe, inesperado T_ENCAPSED_AND_WHITESPACE, esperando T_STRING ou T_VARIABLE ou T_NUM_STRING

Estou encarando esse código há horas e não consigo descobrir onde está o meu erro. Eu sei que esse erro de sintaxe geralmente surge por causa de alguma chave inglesa ausente ou fora do lugar ou por algum problema com aspas simples/duplas e não tenho certeza de que exista uma em qualquer lugar do meu código. Só estou tentando corrigir minha sintaxe agora para que eu possa compilar completamente o código. Qualquer ajuda seria muito apreciada. Aqui está o meu código:

<!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>
14
user1083482

Seu problema é que você não está fechando seu HEREDOC corretamente. A linha que contém END; não deve conter nenhum espaço em branco posteriormente .

30
deceze

Eu me deparei com essa pergunta porque tinha o mesmo erro. O meu era devido a um problema um pouco diferente e, como eu o resolvi sozinho, achei útil compartilhar aqui. Código original com problema:

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

Por causa das aspas duplas, o índice não é desreferenciado adequadamente, levando ao erro de atribuição. No meu caso, escolhi corrigi-lo assim:

$comment = "$_POST[comment]";

mas soltar qualquer par de aspas funciona; é uma questão de estilo, suponho :)

40
JGurtz

Você tem espaços extras após END; que fazem com que o heredoc não seja encerrado.

2
Toto

Pode ser um problema de colagem, mas até onde posso ver no seu código, você está faltando aspas simples na parte HTML que está ecoando.

Caso contrário, você poderia postar o código corretamente e nos dizer qual linha está causando o erro?

0
mat