web-dev-qa-db-ja.com

PHP HTMLコード間のコード内の条件ステートメント

PHPの条件ステートメントを使用して少し問題があります。これは私が書こうとしているコードのタイプです。これはプロファイルページであり、プロファイルを持つユーザーのみが見ることができます(私はそれをチェックするためにセッション変数を使用しています):

<?php if(check if user is logged in) ?>
<display users profile in html>
<?php else ?>
<display an error>

しかし、これは機能しません。また、ifの最後に:を付けてendifステートメントを使用することにより、短縮表記を使用してみましたが、機能しませんでした。 (以前のプロジェクトでは、:メソッドはforeachendforeachで機能したため、試してみると思いました)

何か案は ?

33
0xff0000

代替制御構造構文endifを忘れた可能性があります:

<?php if(check if user is logged in): ?>
<display users profile in html>
<?php else: ?>
<display an error>
<?php endif; ?>

あなたが書いたように中括弧を省略することはできません。 通常のステートメント が後に続く場合のみ可能です。

63
Gumbo

PHPには、if()ブロック(および一般的なブロック)の2つの表記スタイルがあります。

まず、if()ブロックの最後にendif;を明示的に記述するという複雑な表記があります。次のようになります。

if(whatever):
   do something
else:
   do something else
endif;

ifおよびelse行の最後のコロンは重要です。それ以外の場合、PHPは、他の表記法(下記)を使用していると見なすためです。

次に、中括弧表記があり、CまたはPerlスタイルのコードに似ており、次のようになります。

if(whatever) {
   do something
} else {
   do something else.
}

このスタイル表記では、ブロックが1行だけになる場合は、中括弧のペアをオフのままにすることができます。 (私は個人的に、このようにそれらを省略することは悪い習慣だと思いますが、多くの人がそれを誓います、そしてそれは完全に有効な構文です。しかし、私は見ましたPHP単一行で混乱するPHPコードとHTMLを切り替えるときにブロックします。これが、1行だけを記述している場合でも、常に中かっこを使用することを好む理由です)。

あなたの場合の問題は、2つの表記法が混在していることです。あなたは単語表記を使おうとしていますが、行にコロンがないので、PHPは中括弧表記を意味していると考えます。しかし、中括弧表記は中括弧を省略できるので、PHPは、コードが意図したとおりに機能しない場合でも、コードを有効な構文と見なしています。

あなたの解決策は、片方の構文を確実に使用できるように整頓することです。例に示すように、各ブロックの開始と終了に中括弧({および}})を追加するか、コロンとendif;行を追加します。

したがって、コードは次の2つの例のいずれかのようになります。

<?php if(check if user is logged in): ?>
    <display users profile in html>
<?php else: ?>
    <display an error>
<?php endif; ?>

または...

<?php if(check if user is logged in) { ?>
    <display users profile in html>
<?php } else { ?>
    <display an error>
<?php } ?>

お役に立てば幸いです。

13
Spudley

中括弧{および}を使用します。

<?php if(check if user is logged in) { ?>
<display users profile in html>
<?php } else { ?>
<display an error>
<?php } ?>
6
Ruel

あなたの最初の考えは正しかった。 PHPドキュメント のように、これを行うには2つの方法があります。

<?php if($loggedin): ?> 
<p>User is logged in.</p>
<?php else: ?>
<p>User is not logged in.</p>
<?php endif; ?>

または:

<?php if($loggedin){ ?> 
<p>User is logged in.</p>
<?php }else{ ?>
<p>User is not logged in.</p>
<?php } ?>
1
You

テンプレートを条件付きでレンダリングする別の方法は、includeを使用することです

if($condition)
{
    include 'page1.php';
}else{
    include 'page2.php';
}
0
NS23

条件を区切るためにブラケットを入れてみてください。

<?php if(check if user is logged in) { ?>
<display users profile in html>
<?php } else { ?>
<display an error>
<?php } ?>
0
Aaron W.

ブラケットを使用するのは、phpインタープリターにとってこれが複数行にわたるためです。

<?php if(check if user is logged in)  { ?>
<display users profile in html>
<?php } else { ?>
<display an error>
<?php } // else ?>
0
The Surrican