web-dev-qa-db-ja.com

構文エラー、予期しない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>
14
user1083482

問題は、HEREDOCを正しく閉じていないことです。 END;を含む行には、その後に空白を含めることはできません

30
deceze

私は同じエラーがあったので、この質問につまずいた。鉱山はわずかに異なる問題が原因だったと私は自分自身私にそれを解決するため、ここで共有することが有用であると思いました。問題のある元のコード:

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

そのため囲む二重引用符で、インデックスが適切に割り付けエラーにつながる逆参照されていません。私の場合、次のように修正することを選択しました。

$comment = "$_POST[comment]";

ただし、いずれかの引用符のペアを削除しても機能します。それは私が推測するスタイルの問題です:)

40
JGurtz

あなたはヒアドキュメントが終了していない原因というEND;の後に余分なスペースを持っています。

2
Toto

貼り付けの問題かもしれないが、私の知る限り、あなたのコードから見ることができるように、あなたがしているエコー-INGのHTML部分の周りの単一引用符を逃しています。

そうでない場合、コードを正しく投稿して、エラーの原因となっている行を教えてください。

0
mat