1

わかりました、私はこのコードを何度も調べましたが、問題を見つけることができず、なぜこのエラーが発生するのか、ファイルの終わりは次のとおりです。

function ouputMainSlider() {

    global $USER;

    // Get details
    $query = "SELECT id, bigimage, heading, fullarticle, dateadded FROM news WHERE status = 1 ";
    $query .= "AND (state = '" . $USER->state . "' OR state = 'ALL') AND newstype != 1 and bigimage != '' ";
    $query .= "ORDER BY dateadded DESC LIMIT 10";
    $restresult = mysql_query($query);

    while ($restaurant = mysql_fetch_array($restresult)) :

        // Trim article for preview
        $preview = trim_str($restaurant['fullarticle'], 270);

        ?>

        <li>

            <img alt="<?=fixup($restaurant['heading'])?>" src="images/frontpage/<?=$restaurant['bigimage']?>" width="615" height="309" />
            <a href="#" class="read-more">Read More</a>
            <p>         
                <strong><a href="#"><?=fixup($restaurant['heading'])?></a></strong>
                <em><?=fixup($preview)?></em>               
            </p>

        </li>

    <?php endwhile; ?>

}

?>

その機能を外せば問題はなくなります。

4

1 に答える 1

3

これは、関数<?php endwhile; ?>を閉じる前に、を再操作せずに閉じるためです。内部に後続のコードがないため、PHPパーサーは外部の残りのものをプレーンテキスト出力として認識し、適切に閉じていないことを前提としています。それがファイルの終わりであることが起こり、それがエラーの報告方法です。?>}<?php<?php ?>}

while ($restaurant = mysql_fetch_array($restresult)) :

        // Trim article for preview
        $preview = trim_str($restaurant['fullarticle'], 270);

        ?>

        <li>

            <img alt="<?=fixup($restaurant['heading'])?>" src="images/frontpage/<?=$restaurant['bigimage']?>" width="615" height="309" />
            <a href="#" class="read-more">Read More</a>
            <p>         
                <strong><a href="#"><?=fixup($restaurant['heading'])?></a></strong>
                <em><?=fixup($preview)?></em>               
            </p>

        </li>

    <?php
     endwhile; // Don't close ?> here!

このwhile: / endwhile構文は、主にHTMLとPHPコードを混合する場所をテンプレート化するのに役立ちますが、このような関数内で使用すると、オープングループとクローズド{}グループによって提供される視覚的な手がかりが失われるため、混乱する可能性があります。このように構文を混在させることはお勧めしません。

本当に、<?php ?>関数内で閉じたり開いたりしないことをお勧めしますが、それはスタイルの問題です。代わりに、関数が出力する文字列echoreturnそれらを作成します。

function ouputMainSlider() {
    global $USER;

    // Get details
    $query = "SELECT id, bigimage, heading, fullarticle, dateadded FROM news WHERE status = 1 ";
    $query .= "AND (state = '" . $USER->state . "' OR state = 'ALL') AND newstype != 1 and bigimage != '' ";
    $query .= "ORDER BY dateadded DESC LIMIT 10";
    $restresult = mysql_query($query);

    $html = "";
    while ($restaurant = mysql_fetch_array($restresult)) {
        // Trim article for preview 
        // You can't call functions in the HEREDOC, so call them here first
        $preview = fixup(trim_str($restaurant['fullarticle'], 270));
        $heading = fixup($restaurant['heading']);

        // Build the string with a HEREDOC, insead of directly sending it to the output buffer
        // by closing ?> and reopening <?php
        $html .=<<<HTMLSTRING
        <li>
            <img alt="$heading" src="images/frontpage/{$restaurant['bigimage']}" width="615" height="309" />
            <a href="#" class="read-more">Read More</a>
            <p>         
                <strong><a href="#">$heading</a></strong>
                <em>$preview</em>               
            </p>
        </li>
HTMLSTRING;
// No whitespace before the closing of the HEREDOC!
    }
    // Then echo the HTML output
    echo $html;
}
于 2012-12-08T17:51:38.940 に答える