2012-01-27 28 views
1

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

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; 
    } 
+1

你转义'$ row ['caption']'确保它没有任何双引号,并且不会以反斜杠结尾? – 2012-01-27 18:15:33

+0

是的,它以这种方式进入数据库。谢谢 – user1028866 2012-01-27 18:19:35

+0

php代码看起来不错,你的猫尝试使用heredoc,所以netbeans不会试图将它解释为带有错误的javascript。另一方面,你的JavaScript代码是非常糟糕的主意...... – 2012-01-27 18:20:33

回答

1

我已将您的示例代码粘贴到我在Ubuntu上的NetBeans版本中,并且它看起来像是NetBeans 7.0.1中的一个错误。修复,upgrade to 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

+0

谢谢,这很有道理。 – user1028866 2012-01-27 18:53:53

+0

bfrohs,很好的抓住那个脚本生成 – 2012-01-29 16:08:00

2

不要担心,

Netbeans的只是不知道如何解释的代码组合。它发生在Aptana我身上。

0

一切看起来都很好。有可能是因为它正在读取对变量无效的php符号,所以它看到的东西与您正在声明的Topcaption变量不一样。

0

Netbeans无法在PHP文件中处理JavaScript,即使它在PHP文件中处理HTML也很好。您可以放心地忽略错误。如果您想摆脱错误,请将JavaScript放在.js中,并将其链接到它,而不是从HTML标记中。

+0

谢谢Martijn。 – user1028866 2012-01-27 18:23:01

0

特别是代码没有问题,但所有混合标记都混淆了语法检查器。我不喜欢像这样的理由混合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的句法分析器也喜欢这个版本好了很多。

0

注意!

如果$ row ['caption']是基于用户输入的,您的代码就有XSS漏洞。因为htmlspecialchars(和类似的函数)的目的是为了防止攻击者注入html标签(通过使用它们,所以它们可能会起作用,但是不会有任何好处,因为htmlspecialchars转换<,>,&,等等)。但是,里面SCRIPT标签,攻击者不需要为了执行XSS攻击注入HTML标签。

考虑把这个。

+0

感谢您的建议打哈欠。在这种情况下,没有用户输入。 – user1028866 2012-01-27 19:28:46

相关问题