我一直在盯着这段代码几个小时,我无法弄清楚我的错误在哪里。我知道这个语法错误通常会因为一些丢失或不合适的大括号或单/双引号的问题而出现,我不确定我的代码中是否有任何一个。我现在只是想修复我的语法,所以我可以让代码完全编译。任何帮助将非常感激。这是我的代码:
<!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>
答案 0 :(得分:40)
我偶然发现了这个问题,因为我有同样的错误。我的问题略有不同,因为我自己解决了这个问题,我认为在这里分享很有用。有问题的原始代码:
$comment = "$_POST['comment']";
由于包含双引号,索引不会被正确解除引用,从而导致赋值错误。就我而言,我选择像这样解决它:
$comment = "$_POST[comment]";
但丢弃任何一对引号都有效;我认为这是一种风格问题:)
答案 1 :(得分:29)
您的问题是您没有正确关闭您的HEREDOC。包含END;
must not contain any whitespace afterwards。
答案 2 :(得分:2)
END;
之后有额外的空格导致heredoc没有被终止。
答案 3 :(得分:0)
可能是一个粘贴问题,但就我从你的代码中看到的那样,你错过了你回忆的HTML部分的单引号。
如果没有,你能正确发布代码并告诉我们导致错误的行吗?