0

これにタイトルを付ける良い方法が本当に見つからなかったので、誤解を招く場合は申し訳ありませんが、私がやろうとしているのは、プレーヤーが獲得するバッジを持っていて、バッジをクリックできるようにしたいということです。 jquery を使用してロードする別の説明を取得します。すでに部分的に機能していますが、問題は最後のバッジの情報しか取得できないことです。私はそれがなぜこれを行うのか知っています (私は、php がページで最初に読み込まれ、配列である必要があると思います。または、本当にばかげているように聞こえるかもしれません) これまでの私のコードは次のとおりです。

    <table id="table-profile" width="78%">
  <tr>
    <td><h3><?php echo "$usernameprofile";?>'s Badges (work in progress!!!!!!!) |  <a href="#">View All</a></h3></td>
  </tr>
  <tr>
    <td><?  
 $sqlbadges = mysql_query("SELECT * FROM membersbadges WHERE username='$usernameprofile' LIMIT 8 
 ");
 $checkbadges = mysql_num_rows($sqlbadges);
 if($checkbadges == "0"){
     echo "User is currently badgeless";
 }else{
?>
<table width="100%">
<?php
$tableCount = 0;
    $tableRowOpen = false;
    while($rowbadge = mysql_fetch_assoc($sqlbadges)) { 
    $bid = $rowbadge['badgeid'];

    $getbadge = mysql_query("SELECT * FROM badges WHERE id='$bid'");
while($rowbadge2 = mysql_fetch_assoc($getbadge)){
$badgeid = $rowbadge2['id'];    
$badgename = $rowbadge2['name'];
$badgedesc = $rowbadge2['description'];
$badgereward = $rowbadge2['reward'];
$badgerequirements = $rowbadge2['requirements'];
$badgepic = $rowbadge2['image'];
$date = strftime("%b %d, %Y", strtotime($rowbadge2['date']));

}
        if($tableCount == 0){
            echo "<tr>";
            $tableRowOpen = true;
        }
        echo"<td width='25%'>";
        echo  "<badge".$badgeid.">
<img src=\"http://my.iheff.net/images/badges/".$badgepic.".png\" border=2 alt=\"
        " . $row["name"] . "\" height=40px width=40px></a></badge".$badgeid.">" ;

        echo"<br/><br/></td>";
        if($tableCount + 1 == 4){
            $tableCount = 0;
            echo "</tr>";
            $tableRowOpen = false;
        }
        else{
            $tableCount++;
        }

    }
    if($tableRowOpen){
        echo "
</tr>
";
    }
    echo"
    <table id='badgeinfo".$badgeid."' style='display:none' width='80%' border='0' cellspacing='5' cellpadding='10'>
  <tr>
    <th colspan='2' scope='col'>".$badgename."</th>
    </tr>
  <tr>
    <td>Description:</td>
    <td>".$badgedesc."</td>
  </tr>
  <tr>
    <td>Reward:</td>
    <td>+".$badgereward." Experience</td>
  </tr>
</table>
    ";
?>
</table>
<?
 }
 ?></td>
  </tr>

</table>

<script>
$("badge<?php echo "$badgeid"?>").click(function () {
$("#badgeinfo<?php echo "$badgeid"?>").toggle("slow");
});    
</script>

厄介なコードで申し訳ありません。私は PHP の達人には程遠いです。しかし、私はどんな助けにも感謝します。ありがとう!

ページが実際にどのように表示されるかを確認したい場合は、次のサンプル ページをご覧ください。http://my.iheff.net/profile.php?id=1637

4

1 に答える 1

1

ループを閉じるのwhileが速すぎるようです。(すべてのレコードをループして割り当てますが、レンダリングはしません。)したがって、すべてのバッジ レンダリング ロジックをこのループ内に配置します。

while($rowbadge2 = mysql_fetch_assoc($getbadge)){
    $badgeid = $rowbadge2['id'];    
    $badgename = $rowbadge2['name'];
    $badgedesc = $rowbadge2['description'];
    $badgereward = $rowbadge2['reward'];
    $badgerequirements = $rowbadge2['requirements'];
    $badgepic = $rowbadge2['image'];
    $date = strftime("%b %d, %Y", strtotime($rowbadge2['date']));

    // render the row here
}

Javascript の問題を修正するには、ループ内に JavaScript を追加できますが、バッジタグに属性を追加することをお勧めします。

echo  "<badge".$badgeid." data-type='badge' data-id='".$badgeid."'">"

そうすれば、JavaScript の単一の (静的) ブロックを使用して、クリック イベントを作成できます。

// select all the badge tags
$("[data-type=badge]").each(function() {
    // get the id for the current badge
    var thisId = $(this).attr('data-id');
    $(this).click(function() {
        $("#badgeinfo" + thisId).toggle("slow");
    });
});
于 2012-09-14T03:16:19.580 に答える