2011-12-06 82 views
10

我一直在這個代碼小時盯着現在,我無法揣摩出我的錯誤是。我知道這個語法錯誤通常是由於某些缺失或不合適的大括號或單/雙引號引起的問題而出現的,我不確定在我的代碼中是否有任何地方。我只是試圖修復我的語法,所以我可以讓代碼完全編譯。任何幫助將非常感激。這裏是我的代碼:語法錯誤,意想不到的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> 
+9

這是很好的做法,狀態正是被報告錯誤(即行號和列號)。 – Gian

+0

這的確是「太本地化」的問題 –

+0

只是說明自己節省了大量的頭髮拉:這樣的錯誤可以很容易地通過使用一個很好的IDE,檢查你的代碼進行跟蹤。 – Oldskool

回答

25

您的問題是你沒有正確關閉您的HEREDOC。該行包含END;must not contain any whitespace afterwards

+2

我根本不會拿到這最後一行。非常感謝你。這解決了它。 – user1083482

+0

我一直都在。 – Ragamffn

+0

它必須不包含前'END任何空格;'要麼,因爲我剛剛發現試圖格式化我的代碼可讀性時。 – limeygent

0

可能是粘貼的問題,但據我可以看到你的代碼,你錯過了周圍的HTML部分單引號你回聲-ING。

如果沒有,你能正確地張貼代碼,並告訴我們行導致該錯誤?

2

END;導致沒有結束定界符後有多餘的空格。

35

我無意中發現了這個問題,因爲我有同樣的錯誤。我的原因是由於一個稍微不同的問題,因爲我自己解決了這個問題,我認爲在這裏分享是有用的。有問題的原代碼:

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

由於封閉雙引號的,指數不會解除引用正確導致分配錯誤。在我的情況下,我選擇像這樣修復它:

$comment = "$_POST[comment]"; 

但是丟掉任一對引號都行;這是一個風格問題,我想:)

+1

在我的情況下,這是一個流浪的反作用。 Geany的語法熒光筆沒有注意到它。但喬的語法熒光筆吸引了它。最初你的答案幫助,但我真的戰鬥假想敵一直;-) –

+0

謝謝,我不知道這 – 2015-04-12 09:24:22

相關問題