这段php代码是个坏主意吗?

这段php代码是个坏主意吗?,php,javascript,netbeans,Php,Javascript,Netbeans,我在php文件中编写了以下while循环。这个文件正是我想要它做的。但是,我的代码编辑程序(Netbeans IDE 7.0.1)不断指示以下错误:“参数列表后缺少”。错误附加到javascript标记内的行。我如何创建var Topcaption有问题吗?该代码在IE、FF和Chrome中似乎运行良好。谢谢你提供的任何建议 if($totalRows\u Top\u Slides!=0){ mysql_data_seek($Top_幻灯片,0); $i=1; $j=100; 而($row=my

我在php文件中编写了以下while循环。这个文件正是我想要它做的。但是,我的代码编辑程序(Netbeans IDE 7.0.1)不断指示以下错误:“参数列表后缺少”。错误附加到javascript标记内的行。我如何创建var Topcaption有问题吗?该代码在IE、FF和Chrome中似乎运行良好。谢谢你提供的任何建议

if($totalRows\u Top\u Slides!=0){
mysql_data_seek($Top_幻灯片,0);
$i=1;
$j=100;
而($row=mysql\u fetch\u数组($Top\u幻灯片)){
?>
var Topcaption=“”;
别担心


Netbeans只是不知道如何解释这种混合的代码。在Aptana to中,我碰巧遇到了这种情况。

我觉得一切都很好。有可能它在您声明的Topcaption变量中看到了一些不喜欢的东西,因为它也在读取php符号,这对于一个变量来说是无效的。

Netbeans无法处理JavPHP文件中的脚本,即使它可以很好地处理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>';
}
if($totalRows\u Top\u Slides!=0){
mysql_data_seek($Top_幻灯片,0);
回音“\n”;
对于($i=1,$j=100;$row=mysql_fetch_assoc($Top_幻灯片);$i++,$j--){
echo“var Topcaption$i=\”{$row['caption']}\”;\n;
$Top_图像=“”;
}
回声';
}

正如您所看到的,StackOverflow语法分析器也更喜欢这个版本。

我已经将您的示例代码粘贴到我的Ubuntu上的NetBeans版本中,它看起来只是NetBeans 7.0.1中的一个bug。要修复

作为补充说明,为了理智起见,我建议将代码更改为:

<?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个。

注意!

如果$row['caption']基于用户输入,那么您的代码就存在XSS漏洞

还请注意,htmlspecialchars不会在脚本标记内工作(它们可能工作,但不会有任何好处,因为htmlspecialchars(以及类似函数)的目的是防止攻击者注入html标记(通过转换、&等…)。但是,在脚本标记内部,攻击者不需要插入html标记即可执行XSS攻击


考虑到这一点。

是否转义
$row['caption']
为了确保它没有任何双引号,并且不会以反斜杠结尾?是的,它会以这种方式进入数据库。Thankshp代码看起来不错,您可以尝试使用heredoc,这样netbeans就不会试图将其解释为有错误的javascript。另一方面,您的javascript代码是一个非常糟糕的主意……我会说是的,可能是我,但是我发现还不清楚你想要实现什么,用php构建javascript听起来会让人头疼,当你可以使用数组时,你似乎在创建很多全局js变量,非常确定你在php中的camelCase变量和在js中的一样,你应该避免在标记中设置样式,尽可能删除任何at不是html远离HTMLhanks对于Tom的建议,他们很有意义。谢谢,这很有意义。bfrohs,很好地捕捉到了脚本生成感谢你的建议。在这种情况下,没有用户输入。