web-dev-qa-db-fra.com

erreur de syntaxe, T_ENCAPSED_AND_WHITESPACE inattendu, attend T_STRING ou T_VARIABLE ou T_NUM_STRING

Je regarde ce code depuis des heures maintenant et je ne peux pas comprendre où est mon erreur. Je sais que cette erreur de syntaxe survient généralement en raison d'une accolade manquante ou déplacée ou d'un problème avec les guillemets simples/doubles et je ne suis pas sûr qu'il y en ait un dans mon code. J'essaie seulement de corriger ma syntaxe pour le moment afin que je puisse obtenir le code à compiler complètement. Toute aide serait très appréciée. Voici mon 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>
14
user1083482

Votre problème est que vous ne fermez pas correctement votre HEREDOC. La ligne contenant END; ne doit plus contenir d'espace blanc par la suite .

30
deceze

Je suis tombé sur cette question car j'avais la même erreur. Le mien était dû à un problème légèrement différent et comme je l'ai résolu par moi-même, j'ai pensé qu'il était utile de le partager ici. Code d'origine avec problème:

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

En raison des guillemets doubles, l'index n'est pas correctement déréférencé, ce qui entraîne l'erreur d'affectation. Dans mon cas, j'ai choisi de le réparer comme ceci:

$comment = "$_POST[comment]";

mais la suppression de l'une ou l'autre paire de guillemets fonctionne; c'est une question de style je suppose :)

40
JGurtz

Vous avez des espaces supplémentaires après END; qui provoque la fin de l'hérédoc.

2
Toto

Cela peut être un problème de collage, mais pour autant que je puisse voir dans votre code, vous manquez les guillemets simples autour de la partie HTML que vous faites écho.

Sinon, pourriez-vous publier le code correctement et nous dire quelle ligne est à l'origine de l'erreur?

0
mat