我有一个PHP代码:
if($billing_total>$limit_to_send){
echo '<script type="text/javascript">
window.onload = function() {
alert("Sorry, you do not have enough credit");
}
</script>';
当我打印此消息时,它将在PHP页面的开头打印,如下所示:
<script type="text/javascript">
window.onload = function() {
alert("Sorry, you do not have enough credit");
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-----------------------------------------------------------
这导致浏览器中我页面的标题(徽标)向下移动一行。
页面看起来很糟糕,因为那里的所有项目都会向下移动一行。
我希望你能清楚。请问任何解决方案?
=============================================== ============================
感谢所有人......
解决方案:
$alert_message=<script type="text/javascript">
window.onload = function() {
alert("Sorry, you do not have enough credit");
}
</script>
在$alert_message
代码之前的HTML代码中的某处打印body
^ _ ^
答案 0 :(得分:2)
确保您永远不会在DTD (doctype declaration)之前输出任何内容。
有关详细信息,请参阅this question ...
doctype声明必须是html页面的第一个元素,它来自浏览器决定如何处理其余的html代码。在此之前输出任何内容可能会使您的浏览器进入quirks mode,因此您无法确定浏览器将如何呈现您的网页。
如何避免这种情况?
echo
命令在到达其行时执行,并且看起来其余的html代码在此之后。
你可以
echo '<script ...
执行$errorhtml = '<script ...
并输出该字符串(如果不为空),在头部或正文中的特定位置生成php的代码。< / LI>
答案 1 :(得分:1)
将die()
附加到if代码块中,或者让php在正文或头部的某处打印脚本。
答案 2 :(得分:1)
这表明您的应用程序设计不当。我建议你改成它:
$errors = array();
if($billing_total>$limit_to_send){
$errors[] = 'Sorry, you do not have enough credit';
}
然后在您的HTML文件上,在<body>
标记关闭之前,读取您的数组并显示任何错误
<?php if(is_array($errors)): ?>
<script type="text/javascript">
<?php foreach($errors as $error): ?>
alert('<?php echo $error; ?>');
<?php endforeach; ?>
</script>
<?php endif; ?>