0

この質問を簡単に説明するのは少し難しいので、説明が長くなります。ユーザーは、コメントが有用かどうか (単純に「はい」または「いいえ」) で投票できます。これを行うと、投票はデータベース -> テーブル 'user_vote' に送信されます。

テーブルuser_voteには、user_id と container の 2 つの列があります。すべてのユーザーは、このテーブルに 1 行しかありません。彼が新しい投票を行うと、フィールド コンテナが更新されます。たとえば、ユーザーがID 205のコメントに投票し、彼はyesに投票し、 ID 300のコメントに彼はnoに投票したとします。テーブルuser_voteは次のようになります。

user_id->111;

コンテナ->205-はい、300-いいえ

ユーザーが特定のコメントに投票したかどうかを確認する必要があるこのコードまで、これは正常に機能しています。ここのコードは部分的に機能しています - 問題は次のとおりです:

ユーザーは 3 回投票し、コメントのIDが$split[0]と一致する場合、 $textを 1 回書き込み、2 セットのボタンを生成し、コメントのIDが一致しない場合、3 セットのボタンを生成します。 ( elseifの後の部分は正常に動作しています)。

何が間違っているのか、正しい方法でコードを書くにはどうすればよいですか?

<div class="zuta_strana_komentar_korisno" data-id="<?php echo $cmm['id_comment'] ?>">
    <?php if(isset($glas) && !empty($glas)) : 
    $br = explode(',', $glas->container);
    foreach($br as $br) :                                  
    $split = explode('-', $br);
    if($split[0] == $cmm['id_comment']) : ?>
    <?php 
    if($split[1] == 'yes') :
    $text = 'koristan.';
    else :
    $text = 'nekoristan.';
    endif;
    ?>
    <p>Ovaj komentar vam je bio <?php echo $text ?></p>
    <?php else :?>
    <p>Da li vam je ovaj komentar bio od pomoći?</p>
    <button role="yes">Da</button><button role="no">Ne</button>
    <?php 
    endif;
    endforeach;             
    elseif($this->session->userdata('is_logged_in') == TRUE && empty($glas)) : ?>
    <p>Da li vam je ovaj komentar bio od pomoći?</p>
    <button role="yes">Da</button><button role="no">Ne</button>
    <?php endif ?>
    </div>
4

3 に答える 3

1

データベースを根本的に不適切に設計しています。優れたデータベース設計では、フィールドにコンマ区切りのリストを使用して情報を保存することはありません。カンマ区切りのリストにデータを格納することにより、基本的にすべてのデータベースのクエリ機能が無効になります。テーブルを使用してください。

テーブルを作成することをお勧めします: userscomments、およびvotes

userstable contains id, username... 他のフィールドの中で

commentsテーブルには、、、...id他のフィールドが含まれていますbodyuser_id

votesテーブルにはidcomment_iduser_idyes_or_no... が含まれています

次に、 SQL 結合を適切に使用する方法を理解します。

于 2012-08-14T22:01:20.207 に答える
0

あなたがしなければならないのは、変更することだけです

$br = explode(',', $glas->container);
foreach($br as $br) :                                  

$br_lines = explode(',', $glas->container);
foreach($br_lines as $br) :                                  

ただし、最初に PHP ロジックを HTML から分離する必要があります。目が出血したいほどひどいように見えます。

于 2012-08-14T10:57:02.530 に答える
0

このコードを試してください:

<?php if(isset($glas) && !empty($glas)) {
    $br = explode(',', $glas->container);
    foreach($br as $b) {                                  
       $split = explode('-', $b);
       if($split[0] == $cmm['id_comment']) {
       ?>
       <p>Ovaj komentar vam je bio <?php echo ($split[1] == 'yes')?'koristan.':'nekoristan.'; ?></p>
       <?php } else {?>
       <p>Da li vam je ovaj komentar bio od pomoći?</p>
       <button role="yes">Da</button><button role="no">Ne</button>
       }
    }
}
于 2012-08-14T21:16:22.927 に答える