如何解决IE8中的<<< _ END php标签出现问题
| 我正在设计一个相当简单的报告系统。现在使用php(以及后来的一些Jquery)让用户登录并计算总数并发布到数据库。当我在IE8中测试该页面时,我的问题就开始了。它在第75行的echo <<<_END
语句中存在重大问题。除此之外,任何人都知道在PHP中编码嵌套HTML的替代方法。任何帮助表示赞赏。
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"
\"http://www.w3.org/TR/html4/strict.dtd\">
<HTML>
<HEAD>
<link rel=\"stylesheet\" type=\"text/css\" href=\"OPSstyle.css\" />
</HEAD>
<BODY>
<div id=\"wrapper\">
<div id=\"bodyContent\">
<div id=\"header\">
<img id=\"logo\" src=\"OPS_logo.gif\" alt=\"OPS Logo\"/>
<p>OPS ASSESSMENT</p>
</div>
<div id=\"leftNav\">
<p>To begin please login</p>
<a href=\"loginusers.php\">Test Login</a><br/>
<a href=\"sqltest.php\">Form Test</a><br/>
</div>
<div id=\"content\">
<?php
//Connects to database
require_once \'login.php\';
$db_server = mysql_connect($db_hostname,$db_username,$db_password);
if(!$db_server) die(\"Unable to connect to MySQL: \" .mysql_error());
mysql_select_db($db_database)
or die (\"unable to select database: \" .mysql_error());
//deletes record
if(isset($_POST[\'delete\']) && isset($_POST[\'AssessmentID\']))
{
$AssessmentID = get_post(\'AssessmentID\');
$query2 = \"DELETE FROM assessmentscores WHERE AssessmentID=\'$AssessmentID\'\";
if(!mysql_query($query2,$db_server))
echo \"Delete Failed: $query(br />\" .
mysql_error() . \"<br /><br />\";
}
//Inserts record
if (isset ($_POST[\'AssessmentID\'])&&
isset($_POST[\'Date\']) &&
isset($_POST[\'Inspector\']) &&
isset($_POST[\'PlantAssist\']) &&
isset($_POST[\'Safety_Total\'])
)
{
$AssessmentID = get_post(\'AssessmentID\');
$Date = get_post(\'Date\');
$Inspector = get_post(\'Inspector\');
$PlantAssist =get_post(\'PlantAssist\');
$Safety_Total = get_post(\'Safety_Total\');
;
$query = \"INSERT INTO opsassessment.assessmentscores(AssessmentID,Date,Inspector,PlantAssist,`Safety_Total`) VALUES\" .
\"(\'$AssessmentID\',\'$Date\',\'$Inspector\',\'$PlantAssist\',\'$Safety_Total\')\";
if (!mysql_query($query,$db_server))
echo \"INSERT failed: $query<br />\" .
mysql_error() . \"<br /><br />\";
}
echo <<<_END
<form action = \"sqltest.php\" method=\"post\"><pre>
AssessmentID <input type=\"text\" name=\"AssessmentID\" /><br>
Date <input type=\"text\" name=\"Date\" /><br>
Inspector <input type=\"text\" name=\"Inspector\" /><br>
PlantAssist <input type=\"text\" name=\"PlantAssist\" /><br>
Safety_Total <input type=\"text\" name=\"Safety_Total\" /><br>
<input type=\"submit\" value=\"ADD RECORD\" /><br>
</pre></form>
_END;
$query = \"SELECT * FROM assessmentscores\";
$result = mysql_query($query);
if (!$result) die(\"Database access failed: \" .mysql_error());
$rows = mysql_num_rows($result);
for($j = 0; $j < $rows; ++$j)
{
$row= mysql_fetch_row($result);
echo <<<_END
<pre>
AssessmentID: $row[0]
Date: $row[1]
Inspector: $row[2]
PlantAssist: $row[3]
Safety_Total: $row[4]
</pre>
<form action=\"sqltest.php\" method=\"post\">
<input type =\"hidden\" name=\"delete\" value =\"yes\" />
<input type = \"hidden\" name=\"AssessmentID\" value = \"$row[0]\" />
<input type =\"submit\" value=\"DELETE RECORD\" /></form>
_END;
}
mysql_close($db_server);
function get_post($var)
{
return mysql_real_escape_string($_POST[$var]);
}
?>
</div>
<a href=\"form1.php\">Login Form</a><br><br>
<a href=\"testOPS.php\">OPS Assessment</a>
</div>
</body>
</html>
解决方法
Heredoc标识符必须在其一行上,并且必须是此行上唯一的内容(包括缩进等)。删除前导空格,并确保换行符在
_END;
之后是直接的。
但是,根据您的情况,我建议您只保留PHP模式以输出纯HTML
例如代替
echo <<<_END
<form action = \"sqltest.php\" method=\"post\"><pre>
AssessmentID <input type=\"text\" name=\"AssessmentID\" /><br>
Date <input type=\"text\" name=\"Date\" /><br>
Inspector <input type=\"text\" name=\"Inspector\" /><br>
PlantAssist <input type=\"text\" name=\"PlantAssist\" /><br>
Safety_Total <input type=\"text\" name=\"Safety_Total\" /><br>
<input type=\"submit\" value=\"ADD RECORD\" /><br>
</pre></form>
_END;
这个
?>
<form action = \"sqltest.php\" method=\"post\"><pre>
AssessmentID <input type=\"text\" name=\"AssessmentID\" /><br>
Date <input type=\"text\" name=\"Date\" /><br>
Inspector <input type=\"text\" name=\"Inspector\" /><br>
PlantAssist <input type=\"text\" name=\"PlantAssist\" /><br>
Safety_Total <input type=\"text\" name=\"Safety_Total\" /><br>
<input type=\"submit\" value=\"ADD RECORD\" /><br>
</pre></form>
<?php
它通常更具可读性,并且许多IDE都能够识别它,并将“其他内容”突出显示为html。
, 正如评论者所说,HEREDOC(<<<和_END;)位与服务器端PHP有关,浏览器对此一无所知。
HEREDOC标签的一个主要的,容易忘记的黄金法则是,封闭标签永远都不会被破坏!否则会破裂。
这里有关于他们的读物:
http://www.php.net/manual/zh-CN/language.types.string.php#language.types.string.syntax.heredoc
如果它确实有问题,并且确实是这样做的(尽管,没有理由这样做)-请记住它只是一个输出块,因此您可以用以下方法替换它:
$out = \"blah blah\";
$out .= \"more blah blah\";
$out .= \"more blah blah\";
$out .= \"more blah blah\";
$out .= \"more blah blah\";
echo $out;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。