2011-03-08 49 views
0

我使這個PHP腳本,但Dreamweaver指出(作爲解析的代碼寫),這個字符串是不正確的。PHP - 這個PHP語法有什麼問題?

在它完美的任何情況下,但也許我錯了出頭:

for($i=1; $i<=$npagine; $i++) { 
?> <a <? if($i==$index) { ?> class="paginas" <? } else { ?> class="pagine" <? } ?> href="index.php?<?=$splitter_zone?>&index=<?=$i?>"><?=$i?></a> <? 
} 

任何想法?

+1

問題出在Dreamweaver上,而不是你的代碼。我建議使用除Dreamweaver之外的其他代碼編寫PHP代碼 - 這非常糟糕。 – 2011-03-08 17:48:09

+0

它看起來好像dreamweaver對php和html模板的混合有一些問題。 – 2011-03-08 17:49:46

+0

我很驚訝Dreamweaver仍然生成這樣的代碼,還是舊版本? – Adam 2011-03-08 17:56:42

回答

3

該代碼看起來沒問題。然而,你的代碼是非常難以閱讀 - 我幾乎能理解Dreamweaver中窒息吧:)

這裏有一個簡單的建議:

for($i=1; $i<=$npagine; $i++) 
    { 
    $class = ($i == $index ? "paginas" : "pagine"); 
    echo "<a class='$class' href='index.php?$splitter_zone&index=$i'>$i</a>"; 
    } 
1

不知道,但你使用的是短標籤爲PHP。它不像所有的安裝都支持它。 short_open_tag必須打開才能使用短標籤。

<?php 
// bla 
?> 

not 

<? 
//bla 
?> 
+0

批處理腳本用「<?替換PHP短打開標記? PHP的「http://stackoverflow.com/questions/684587/batch-script-to-replace-php-short-open-tags-with-php – Adam 2011-03-08 17:55:03

0

的PHP和HTML是罰款(fsvo 「精」;對於一兩件事,關閉smart-tags!)。 Dreamweaver不知道如何正確突出顯示它。

0
for($i=1; $i<=$npagine; $i++) { 
    $class=$i==$index?"paginas":"pagine"; 
    echo"<a class='{$class}' href='index.php?{$splitter_zone}&index={$i}>{$i}</a>\r\n"; 
} 
+0

只是一個問題:爲什麼{$ class}而不是$類? – markzzz 2011-03-08 18:02:42

1

這是不妥的第一件事是,你應該使用<?php打開你的PHP代碼,而不是僅僅<?。短表已被棄用,並且可能無法正常工作。

此外,不推薦使用打印輸出的簡寫形式<?=。您應該使用<?php print<?php echo。 (是的,我知道它使代碼更長...不要抱怨!;-))

這可能是什麼打破了你的程序。新的PHP安裝將會縮短PHP標籤的格式。就這麼簡單。

但是,當我在這裏...你有第二個問題是混合進出PHP和PHP的可怕混合。你應該清理你的代碼,這樣你就不必擁有太多的PHP小部分。這樣做使得在PHP中使用HTML和你的大括號來跟蹤你的標籤幾乎是不可能的。幾乎可以保證會導致錯誤,並且在兩年後回到錯誤修復時很難閱讀。

爲了解決這個問題,我建議編寫代碼更是這樣的:

<?php 
for($i=1; $i<=$npagine; $i++) { 
    if($i==$index) {$class='paginas';} else {$class='pagine';} 
    .... //output your HTML here, without the if() condition embedded in it. 
} 
?> 

你可以簡化甚至進一步使用三元運算符。

切換到長格式PHP標籤<?php積極地阻止PHP和HTML之間的過度切換,所以您可能希望藉此機會以更易讀的形式重新編寫代碼。

在這種情況下,使用printecho來輸出整個HTML標記沒有任何問題,而不是切換到HTML模式來打印它。

所以,你最終可能會以這樣的代碼:

<?php 
for($i=1; $i<=$npagine; $i++) { 
    $class = ($index == $i) ? 'paginas' : 'pagine'; 
    print "<a class='{$class}' href='index.php?{$splitter_zone}&index={$i}>{$i}</a>"; 
} 
?> 

更簡單,更容易閱讀,我相信你會同意。

我要做的最後一點是我總是建議避免使用單字符變量名稱,如$i。嘗試使用更具描述性的內容來描述您使用的內容。這似乎是無害的,但想象一下,試圖搜索一個大型程序$i找到一個錯誤。你會得到很多錯誤的點擊。

+0

'<?='不再被棄用。 – 2017-04-23 02:14:56

+0

確實。感謝您的評論。然而,<?'開始標記*仍然被棄用。 – Spudley 2017-04-23 06:31:26