2009-08-03 31 views
3

我想用heredoc語句替換HTML代碼。然而,我在過去的line.I得到一個解析錯誤敢肯定,我沒有留在定界符結束標記line.Following任何前導空格或縮進是代碼的一部分:heredoc語句有問題

$table = <<<ENDHTML 
    <div style="text-align:center;"> 
    <table border="0.5" cellpadding="1" cellspacing="1" style="width:50%; margin-left:auto; margin-right:auto;"> 
    <tr> 
    <th>Show I.D</th> 
    <th>Show Name</th> 
    </tr> 
    ENDHTML; 
    while($row = mysql_fetch_assoc($result)){ 
      extract($row); 
      $table .= <<<ENDHTML 
      <tr> 
       <td>$showid2 </td> 
       <td>$showname2</td> 
      </tr> 
    ENDHTML;   
    } 
    $table .= <<<ENDHTML 
    </table> 
    <p><$num_shows Shows</p> 
    </div> 
    ENDHTML; 
    echo $table; 
    ?> 

哪裏有問題? 除了上面我還有一個相關的問題。作爲一種編碼習慣,整個使用PHP代碼更好還是使用heredoc語法更好。我的意思是,在PHP模式下,腳本在HTML和PHP代碼之間來回跳動。 那麼,哪個是首選的方法?

+0

代碼需要一些預先的標籤,很難說這是最後一行... :) – falstro 2009-08-03 14:25:10

+0

老實說這種格式,你可能會碰到很多的問題較少,如果你使用單引號。你仍然可以獲得所有的新行和標籤空間,並且不會遇到HEREDOC的問題。 – 2009-08-03 14:29:09

回答

1

夥計們,最後我成功地解決了分析錯誤(phew !!)。我只是重寫了代碼,它工作。下面是代碼:

$table = <<<ABC 
    <div style="text-align:center;"> 
    <table border="0.5" cellpadding="1" cellspacing="1" style="width:50%; margin-left:auto; margin-right:auto;"> 
    <tr> 
    <th>Show I.D</th> 
    <th>Show Name</th> 
    <th>Show Genre</th> 
    </tr> 
ABC; 
    while($row = mysql_fetch_assoc($result)) 
    { 
     extract($row); 
$table .= <<<ABC 
     <tr> 
     <td>$showid2 </td> 
     <td>$showname2</td> 
     <td>$showtype2_label</td> 
     </tr> 
ABC; 
    } 
$table .= <<<ABC 
    </table> 
    <p>$num_shows Shows</p> 
    </div> 
ABC; 

echo $table; 
1

<p><$num_shows Shows</p>

那是$num_shows前多餘的 '<' 字?

+0

我剛剛在這裏添加了錯誤。儘管它不在原始代碼中。 – 2009-08-03 14:28:43

+0

即使它在那裏,我想也不會產生解析錯誤。 – fresskoma 2009-08-03 14:31:21

2

如果此代碼正是您正在使用的,那麼除了第一個$ table = < < < ENDHTML行之外,在左側還有一些空格。結束heredoc需要完全左對齊,左邊沒有空格,製表符或其他字符。

+0

在我的代碼編輯器中,一切都完美地處於左側。它只顯示左邊的空格在這裏上帝..我會把我的頭髮分開:( – 2009-08-03 14:30:31

0

這不會造成問題嗎?

</tr> 
ENDHTML; 

你應該:

ENDHTML;

編輯: 格式化失敗...和裏希C.說,在此期間同:(我只是爲了表明第一ENDHTML;在它前面的空格

0

編輯:改爲轉播和背部,目前循環工作對我來說...

while($row = mysql_fetch_assoc($result)){ 
    extract($row); 
    $table .= <<< ENDHTML 
    <tr> 
     <td>$showid2</td> 
     <td>$showname2</td> 
    </tr> 
ENDHTML; 
} 
6

PHP manual about the Heredoc syntax

結束標識符必須開始在行的第一列。

而在漂亮的紅色警告稍後箱:

這是要注意的是結束標識符的行必須包含任何其它字符非常重要,除了可能一個分號(;)。這意味着特別是標識符可能不縮進,並且在分號之前或之後可能沒有任何空格或製表符。

所以你需要編寫代碼,這樣符合語法規範:

$table = <<<ENDHTML 
    <div style="text-align:center;"> 
    <table border="0.5" cellpadding="1" cellspacing="1" style="width:50%; margin-left:auto; margin-right:auto;"> 
    <tr> 
    <th>Show I.D</th> 
    <th>Show Name</th> 
    </tr> 
ENDHTML; 
    while($row = mysql_fetch_assoc($result)){ 
       extract($row); 
       $table .= <<<ENDHTML 
       <tr> 
         <td>$showid2 </td> 
         <td>$showname2</td> 
       </tr> 
ENDHTML; 
    } 
    $table .= <<<ENDHTML 
    </table> 
    <p><$num_shows Shows</p> 
    </div> 
ENDHTML; 
    echo $table; 

這是給你,如果你真的想使用它。