2016-07-09 10 views
0
<img id="post_like_btn_<?php echo $post_info['id']; ?>" class="post_like_btn" 
<?php $like_result = data_like($dbc, $user_info['id']); 
    while($like_info = mysqli_fetch_assoc($like_result)){ 
    if($post_info['id'] == $like_info['post_id']) 
     { echo 'src="img/like/like_active.png"'; 
     } else{echo 'src="img/like/like_dark.png"'}?>> 

私は好きなテーブルに投稿IDがあるときに同様のボタンのアイコンイメージを変更するが、テーブルに値がないときはelseコマンドが機能しない画像が表示されません。私は '& &!== null'を追加しようとしましたが、それでも動作しません。以下は共通であることからもif文phpやhtmlでのバグ

while($like_info = mysqli_fetch_assoc($like_result)){ 
    if($post_info['id'] == $like_info['post_id']) 
     { echo ' src="img/like/like_active.png"';} 
    else{echo ' src="img/like/like_dark.png"';} 
}?>> 

+0

条件がfalseの場合、 'else'部分を表示しますか? –

答えて

0

ユーザのlikesテーブルにデータがない場合は、whileループに何も繰り返しはありません。つまり、条件が実際に実行されることはありません。

また、別の問題に気付く価値があります:あなたのwhileループがすべての投稿のすべての結果に対して繰り返すようです。あなたのユーザーが他の投稿(表示されているもの以外)を好きなら、あなたのelse句は複数回実行され、imgタグ内の複数のsrc属性(ほとんどまたはすべてがlike_dark.pngを参照しています)を与えます。

理想的には、表示されている投稿IDのユーザーの好きなものについてだけデータベースクエリを検索することです。そうすれば、ループは全く必要ありません。whileループ。結果が見つかったかどうかを確認するだけです。その場合はlike_active.pngを出力し、そうでない場合はlike_dark.pngを出力します。

何らかの理由でクエリを変更できない場合(またはページに複数の投稿を表示する際に複数のクエリを避けたい場合)は、ループごとに各レコードを調べ、ブール変数を設定する必要があります現在の投稿IDと同じように見える場合はtrueになります。 whileのループの後で、if条件のブール変数をチェックして、src属性のみを出力します。そうすれば、反復処理したレコードの数にかかわらず、1つのsrc属性のみが出力されます。

+0

あなたは非常に、それは今働いています:) –

0

は、whileループの閉じ括弧が欠落し SRC =

"IMG /のような/のように" あなたはif文の外にそれを削除することもできますし、 activeとdark.pngの状態を切り替えるだけです。

+0

何も起こっていませんが、不足している括弧を追加すると、配列に情報があるときにうまくいきますが、同様のテーブルが空で、何も返されない場合は何も返されませんので、条件と関係があると思います。 –