我在php文件中编写了以下while循环。该文件正是我想要它做的。然而,我的代码编辑程序(Netbeans IDE 7.0.1)一直在指示以下错误:"参数列表后缺少)"。该错误附加在javascript标记内的行中。我如何创建var Topcaption有问题吗?该代码在IE、FF和Chrome中似乎运行良好。谢谢你能提供的任何建议!
if ($totalRows_Top_Slides != 0) {
mysql_data_seek($Top_Slides,0);
$i = 1;
$j = 100;
while ($row = mysql_fetch_array($Top_Slides)) {
?>
<script type="text/javascript">
var Topcaption<?php echo $i;?> = "<?php echo $row['caption'];?>";
</script>
<?php
$Top_images .= "<img id="Topimage" . $i . "" class="slide_out" style="z-index: " . $j . "" src="" . $row['file_folder'] . $row['file'] . "" width="280" height="170" alt="" />";
$i = $i + 1;
$j = $j - 1;
}
别担心,
Netbeans只是不知道如何解释这种混合代码。我在Aptana遇到了这种情况。
我已经将您的示例代码粘贴到我在Ubuntu上的NetBeans版本中,它只是NetBeans 7.0.1中的一个错误。要修复此问题,请升级到NetBeans 7.1。
顺便说一句,为了理智起见,我建议将您的代码更改为:
<?php
mysql_data_seek($Top_Slides,0);
$i = 1;
$j = 100;
echo '<script type="text/javascript">';
while ($row = mysql_fetch_array($Top_Slides)) {
echo 'var Topcaption'.$i.' = "'.$row['caption'].'";';
$Top_images .= "<img id="Topimage" . $i . "" class="slide_out" style="z-index: " . $j . "" src="" . $row['file_folder'] . $row['file'] . "" width="280" height="170" alt="" />";
$i = $i + 1;
$j = $j - 1;
}
echo '</script>';
?>
这样,您将只有1个脚本标记,而不是100个。
我觉得一切都很好。它可能在您声明的Topcaption变量中看到了不喜欢的东西,因为它也在读取对变量无效的php符号。
Netbeans不能处理PHP文件中的JavaScript,尽管它可以很好地处理PHP文件中的HTML。您可以放心地忽略该错误。如果您想消除这个错误,请将javascript放在.js中,并从HTML标记链接到它。
代码没有任何问题,但所有这些混合标记都会混淆语法检查器。出于这样的原因,我不喜欢把PHP和静态输出混合在一起,我会把它重写为:
if ($totalRows_Top_Slides != 0) {
mysql_data_seek($Top_Slides,0);
echo "<script type="text/javascript">n";
for ($i = 1, $j = 100; $row = mysql_fetch_assoc($Top_Slides); $i++, $j--) {
echo "var Topcaption$i = "{$row['caption']}";n";
$Top_images .= "<img id="Topimage" . $i . "" class="slide_out" style="z-index: " . $j . "" src="" . $row['file_folder'] . $row['file'] . "" width="280" height="170" alt="" />";
}
echo '</script>';
}
正如您所看到的,StackOverflow语法解析器也更喜欢这个版本。
注意
如果$row['caption']是基于用户输入的,那么您的代码就存在XSS漏洞。
还要注意,htmlspecialchar在SCRIPT标记中不起作用(它们可能起作用,但没有任何好处,因为htmlspecialchars(以及类似函数)的目的是防止攻击者注入html标记(通过转换<、>、&等)。但是,在SCRIPT标签中,攻击者不需要注入html标记来执行XSS攻击。
考虑到这一点。