PHPの「if」ステートメント内にHTMLを埋め込むことはできますか?


120

HTMLがPHPのifステートメントが実行される前にHTMLがPHPのifステートメントの前に表示されると考えているため、可能であれば、PHPのifステートメント内にHTMLを埋め込みたいと思います。

データベースのテーブルにアクセスしようとしています。データベース内のすべてのテーブルをリストするHTMLでプルダウンメニューを作成し、プルダウンからテーブルを選択したら、送信ボタンを押します。

isset関数を使用して、送信ボタンが押されたかどうかを確認し、PHPでループを実行して、データベースのテーブルの内容を表示します。したがって、この時点で完全なテーブルがありますが、このテーブルでさらにクエリを実行したいと思います。したがって、ifステートメント内でより多くのHTMLを実行しようとしている理由です。最終的に、テーブルのコンテンツを更新(1つ以上のコンテンツを1行または複数行)または削除(1つ以上の行)しようとしています。私がやろうとしているのは、テーブルの検索を容易にするためにテーブルの列に対応する別のプルダウンを作成し、テーブルのコンテンツを更新または削除するかどうかに対応するラジオボタンを作成することです。


3
ソリューションについてはこちらをご覧くださいphp.net/manual/en/control-structures.alternative-syntax.php
PUK

回答:


371
<?php if($condition) : ?>
    <a href="http://yahoo.com">This will only display if $condition is true</a>
<?php endif; ?>

リクエストに応じて、ここにelseifとelseがあります(ドキュメントでも確認できます)。

<?php if($condition) : ?>
    <a href="http://yahoo.com">This will only display if $condition is true</a>
<?php elseif($anotherCondition) : ?>
    more html
<?php else : ?>
    even more html
<?php endif; ?>

とても簡単です。

HTMLは、条件が満たされた場合にのみ表示されます。


「...([ドキュメント] [1]でも確認できます)」これらのドキュメントについて、どこで正確に話しますか?
gmeben 2013年

39

はい、

<?php
if ( $my_name == "someguy" ) {
    ?> HTML GOES HERE <?php;
}
?>

15

はい。

<?  if($my_name == 'someguy') { ?>
        HTML_GOES_HERE
<?  } ?>

6
一部のサーバーにはlibxmlまたはpdo_mysqlがインストールされていませんが、それらを使用したソリューションを推奨できます。
混乱

2
これはジョンの答えに対するコメントにすぎなかったと思います。
Rimas Kudelis

3
うーん。フォーマットされたコードをコメントにどのように埋め込むかを教えてください。
混乱

3

次の2つの理由により、PHPのクローズ/オープンタグの使用はあまり良い解決策ではありません。プレーンHTMLでPHP変数を印刷できず、コードが非常に読みにくくなります(次のコードブロックは終了ブラケット}で始まりますが、リーダーは以前は何だったかわからない)。

ヒアドキュメント構文を使用することをお勧めします。これは、他の言語(bashなど)と同じ概念です。

 <?php
 if ($condition) {
   echo <<< END_OF_TEXT
     <b>lots of html</b> <i>$variable</i>
     lots of text...
 many lines possible, with any indentation, until the closing delimiter...
 END_OF_TEXT;
 }
 ?>

END_OF_TEXTは区切り文字です(基本的にはEOF、EOTなどの任意のテキストです)。二重引用符で囲まれているかのように、それらの間のすべてがPHPによって文字列と見なされるため、変数を印刷できますが、引用符をエスケープする必要がないため、html属性の印刷に非常に便利です。

終了デリミタは行の先頭で開始する必要があり、セミコロンはその直後に他の文字(END_OF_TEXT;)なしで配置する必要があることに注意してください。

単一引用符(')で囲まれた文字列の動作を示すヒアドキュメントは、nowdocと呼ばれます。nowdoc内では解析は行われません。ヒアドキュメントと同じように使用しますが、開始区切り文字を一重引用符で囲みます- echo <<< 'END_OF_TEXT'


これを思い出させてくれてありがとうございます。ヒアドキュメントは、複数の条件を持つより複雑なHTMLに非常に役立ち、属性と引用符をエスケープするよりもはるかに簡単です。
UTCWebDev 2016

2

したがって、条件が必要な値と等しい場合、phpドキュメントは「include」を実行し、includeはそのドキュメントを現在のウィンドウに追加します。次に例を示します。

`

<?php
$isARequest = true;
if ($isARequest){include('request.html');}/*So because $isARequest is true then it will include request.html but if its not a request then it will insert isNotARequest;*/
else if (!$isARequest) {include('isNotARequest.html')}
?>

`



0

私はこれが古い投稿であることを知っていますが、htmlとphpを混在させないことを示唆する答えが1つだけあることは本当に嫌いです。コンテンツを混ぜる代わりに、テンプレートシステムを使用するか、基本的なテンプレートシステムを自分で作成する必要があります。

PHPで

<?php 
  $var1 = 'Alice'; $var2 = 'apples'; $var3 = 'lunch'; $var4 = 'Bob';

  if ($var1 == 'Alice') {
    $html = file_get_contents('/path/to/file.html'); //get the html template
    $template_placeholders = array('##variable1##', '##variable2##', '##variable3##', '##variable4##'); // variable placeholders inside the template
    $template_replace_variables = array($var1, $var2, $var3, $var4); // the variables to pass to the template
    $html_output = str_replace($template_placeholders, $template_replace_variables, $html); // replace the placeholders with the actual variable values.
  }

  echo $html_output;
?>

HTML(/path/to/file.html)

<p>##variable1## ate ##variable2## for ##variable3## with ##variable4##.</p>

この出力は次のようになります。

Alice ate apples for lunch with Bob.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.