0

以下のスクリーンショットとコードを使用して、「削除ボタン」をウォール投稿の所有者にのみ表示しようとしています。私はMichael Grigsbyとしてログインしており、スクリーンショットからわかるように、最初のウォール投稿は「削除ボタン」を隠していますが、私が所有すべきではないMike Wyatt投稿に関しても残りは表示されています。

なぜこれが引き起こされているのかわかりません。2 つの可能性があります。jQuery で壁の投稿をループする必要があるか、SQL ステートメントが正しく記述されていません。なぜこれがこのように機能しているのかについてのアイデアはありますか?

ここに画像の説明を入力

PHP および jQuery コード:

<?php   $this->load->helper('date');
        $userid = $this->session->userdata('userid');
        $query  = $this->db->query("SELECT * FROM churchMembers WHERE cMuserId = '{$userid}'");
        $row = $query->row();
        if ($query->num_rows() != 0) {
        $membersChurchId = $row->cMchurchId;
        $query2 = $this->db->query("SELECT wp.idwallPosts, wp.entryData, wp.entryCreationDateTime, u.firstname, u.lastname, u.userid, u.defaultImgURI FROM users u
                                   INNER JOIN wallPosts wp ON wp.postingUserid = u.userid
                                   WHERE wp.wpChurchId = '{$membersChurchId}' ORDER BY wp.idwallPosts DESC LIMIT 200");
foreach ($query2->result() as $row) { ?>
    <?php // the following php is the bootstrapper for the wall
        if ($userid != $row->userid) { ?>
            <script type="text/javascript">
                $(document).ready(function() {
                    $("#delPost").remove();
                });
            </script>
<?php } ?>
4

2 に答える 2

3

私はこれを見ています:

$("#delPost").remove();

id="delPost"...そして、おそらくすべてのアイテムにあると思います。属性に関するよくある誤解idは、属性を再利用できるが再利用できないというものです。ページごとに 1 つの要素しか存在できませんid="delPost"( HTML を検証するとエラーが明らかになります)。

とにかく、このデモで示されているように、スクリプトは最初のものだけを読んでいます。各 ID は一意である必要があります。代わりに切り替えてロジックを再考することもできますが、そのループでは、1 つの要素が非表示になるとすぐに、セレクターがあまりないため、すべてclassが非表示になるため、とにかくあまり意味がありません。特定の(セレクターに一致するすべての要素に適用され、そのスクリプトのループ/繰り返しは冗長です)。

これには多くの方法がありますが、私が提案するのは次のとおりです。javascript でそれらを隠したり削除したりする代わりに、PHP コードでそれらをまったく出力しないでください。

于 2012-07-29T22:18:49.337 に答える
3

#delPostを使用していることを意味しますid="delPost"。ただし、HTML では ID が一意である必要があります。class="delPost"代わりにandを使用することをお勧めします.delPost

于 2012-07-29T22:18:52.010 に答える