这个php代码是个坏主意吗



我在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攻击。

考虑到这一点。

相关内容

  • 没有找到相关文章

最新更新