web-dev-qa-db-ja.com

PHP注入されたHTMLのステートメントを切り替える

<? switch ($var): ?>
  <? case 1: ?>
    It's 1!
  <? break ?>
<? endswitch ?>

私はそのようなことをしたい、つまりPHPテンプレートでswitchステートメントを使用します。これはifステートメントで可能です。上記のコードはPHP 5.3でParse error: syntax error, unexpected T_INLINE_HTML, expecting T_ENDSWITCH or T_CASE or T_DEFAULTを生成します。 PHP docs は、これが可能であることを示唆しています。

これが機能しないことを誰かが確認できますか、それとも、私が間違っていることを教えてもらえますか?

ありがとう。

26
Znarkus

私はあなたの例がうまくいかないはずであるとphpドキュメントで読みました。

Switchステートメントと最初のケースの間の出力(空白を含む)は、構文エラーになります。たとえば、これは無効です

代わりにこれを試してください:

<div>
<?php switch($variable): 
case 1: ?>
    <div>
    Newspage
    </div>
<?php break; ?>
<?php case 2: ?>
    </div>
    Forum
    <div>
<?php break; ?>
<?php endswitch; ?>
</div>

http://php.net/control-structures.alternative-syntax

53
j_freyre

あなたが持っている

?>\n\n<?

になるあなたのスイッチの後

switch($var):
echo "\n\t";
case 1:

スクリプトは、HTMLを装飾したものではなく、PHP HTMLを組み込んだものと考えてください。PHPバイナリが最初にファイルを取得します。

HEREDOCのようなものを使用して、エスケープされていないHTMLをエコーすることもできます。

16
Emyr

私はこのフレンドリーなフォーマットを使用し、テストして機能します:

<? switch($var) : case 1 : ?>

  <div>One</div>

<? break; case 2 : ?>

  <div>Two</div>

<? break; case 3 : ?>

  <div>Three</div>

<? break; endswitch; ?>
5
Davide

PHP 5.6で実行されている新しいスタイルの短いタグでスイッチまたはforeachステートメントを使用すると、同様の問題が発生しました。

私の場合:変更

<?=

  switch ($number_of_columns) {
    case "1":
        echo '<div class="col-sm-12 col-md-12" >';
        break;
    case "2":
        echo '<div class="col-sm-12 col-md-6" >';
        break;
    case "4":
        echo '<div class="col-sm-6 col-md-3" >';
        break;
    default:
        echo '<div class="col-sm-6 col-md-4" >';
    }
?>

 <?php 
      switch ($number_of_columns) {
        case "1":
            echo '<div class="col-sm-12 col-md-12" >';
            break;
        case "2":
            echo '<div class="col-sm-12 col-md-6" >';
            break;
        case "4":
            echo '<div class="col-sm-6 col-md-3" >';
            break;
        default:
            echo '<div class="col-sm-6 col-md-4" >';
        }
    ?>

構文エラーはありませんでした。つまり、構文エラー、予期しない「スイッチ」(T_SWITCH)

0
Daniel