2012-01-27 57 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

相關問題