0

ヒアドキュメントの構文に問題があります。最初にコードを示します。

    function format($user_id,$user_note,$image,$dt){

        //this is the problem
      if($image=='NULL'){
     //don't display image
     }

     else {
  echo '<img src="userpics/$image" width="480" height="480">';
}
         return <<<ENDOFRETURN
       <div class ="commentbox">
                         $date
                         </div>
                             <div class="leftpanel">

                           $user_note
                        $image
                                 <div class="date">
                                    $rel
                                 </div>
                             </div>
    ENDOFRETURN;

}

変数は$imageデータベースから取得され、NULL であるか、ファイル名があります。<img>画像が null の場合はタグを表示したくありません。値がある場合は表示したいと思います。この問題を解決する方法を知っていますか? 私はすべてを試してきましたが、まだ何もうまくいきませんでした!! :))

4

6 に答える 6

5

MySQL データベースのデータが の場合、文字列 と比較するのではなくNULL、関数でそれをチェックします。is_null()'NULL'

function format($user_id,$user_note,$image,$dt)
{
  if(!is_null($image)){
     $image = "<img src=\"userpics/$image\" width=\"480\" height=\"480\">";
  }
  return <<<ENDOFRETURN
   <div class ="commentbox">$date</div>
   <div class="leftpanel">
     $user_note
     $image
     <div class="date">$rel</div>
   </div>
ENDOFRETURN;
}

また、他の人が述べたように、ヒアドキュメントの最後をインデントしてはいけません。

編集:コードの他のいくつかを編集し、機能全体を示して、より良いアイデアを提供しました。

于 2011-01-06T14:27:36.493 に答える
4

あなたのコードにはいくつかの問題がありますが、ヒアドキュメントの構文が関係している場合は、 の前のスペースを削除してみてくださいENDOFRETURN;

于 2011-01-06T14:29:50.270 に答える
2

徹底的にするために:

NULLprintechoif、のようなキーワードforです。一方、'NULL' (引用符に注意してください) は文字列です。'if' (引用符に注意してください) と入力した場合と同様に、ifステートメントの先頭ではなく文字列になります。

于 2011-01-06T14:51:25.610 に答える
2

いくつかの問題がありますが、正しい方法は次のようになります。

function format($user_id,$user_note,$image,$dt){

    //this is the problem
    if($image !== NULL){
        $output .= '<img src="userpics/' . $image . '" width="480" height="480">';
    }
    $output .= <<<ENDOFRETURN
    <div class ="commentbox">
                     $date
                     </div>
                         <div class="leftpanel">

                       $user_note
                    $image
                             <div class="date">
                                $rel
                             </div>
                         </div>
ENDOFRETURN;

    return $output;
}

分かりますか:

  • ENDOFRETURN;その前にスペースがありません

  • すべての出力が 1 つの ... return で返されます

于 2011-01-06T14:32:41.050 に答える
1

単純に調整する

{spaces or tab}ENDOFRETURN;

{no spaces/tab}ENDOFRETURN;

rtm - あなたとまったく同じ問題

終了識別子のある行には、セミコロン (;) 以外の文字を含めないでください。これは特に、識別子がインデントされていない可能性があり、セミコロンの前後にスペースやタブがない可能性があることを意味します。また、終了識別子の前の最初の文字は、ローカル オペレーティング システムで定義されている改行でなければならないことを認識することも重要です。これは、Mac OS X を含む UNIX システムでは \n です。終了区切り文字 (セミコロンが続く可能性があります) の後には、改行も続ける必要があります。

この規則が破られ、終了 ID が「クリーン」でない場合、それは終了 ID とは見なされず、PHP は引き続き終了 ID を探します。現在のファイルの終わりの前に適切な終了識別子が見つからない場合、最終行で解析エラーが発生します。

于 2011-01-06T14:28:37.077 に答える
1

上記のように一重引用符で囲まれた echo ステートメントは、意図したとおりに機能しません。変数 $image は、単一引用符で囲まれた文字列では展開されません。代わりに、一重引用符と二重引用符を逆にします

echo "<img src='userpics/$image' width='480' height='480'>";

また、ENDOFRETURN; ヒアドキュメントを閉じるときは、その前にスペースを入れてはいけません。

于 2011-01-06T14:33:21.207 に答える