0

私のイメージを mySQL データベースから適切に整列させるのに問題があります。私が抱えている問題は、基本的に CMS からこのページに 24 枚の画像をロードしたいということです。1行あたり4つの画像を持つように設計されたテーブルに画像をロードしています。問題: 最初の行には 2 つの画像があり、2 番目には 1 つの画像があり、3 番目には 3 つの画像があり、4 番目には 1 つの画像があり、5 番目には 3 つの画像があり、6 番目と 7 番目には行ごとに 1 つの画像があります。行ごとに 4 つの画像を取得できません。誰でも助けてもらえますか?

<!-- IMAGE GALLERY -->

    <h2 class="text1">Image Gallery</h2>
    <p>Click any image to open up a larger version</p>
    <div class="gallery">
        <?php
            $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 
            $query = "SELECT * FROM cmhimage ORDER BY id DESC";
            $data = mysqli_query($dbc, $query);
            ?><table><?php 
            $level = 1;
            while ($row = mysqli_fetch_array($data)) { 
                $description = $row['capt'];
                $photo = $row['file'];
                $count = 1;
                $level = $level + $count;

                if (($level == 4) || ($level == 8) || ($level == 12) || ($level == 16) || ($level == 20) || ($level == 24)){
                    echo '<tr>';
                }

                 // Display the data
                echo '<td><table><tr><td><a href="manage/image/' . $photo . '" target="_blank"><img class="imgcontain" src="manage/image/' . $photo .'" border="0"/></a></td></tr></td><br/>';  
                echo '<td><tr><td><p class="caption">' . $description .'</p></tr></td></table></td>';  
                if (($level == 4) || ($level == 8) || ($level == 12) || ($level == 16) || ($level == 20) || ($level == 24)){
                    echo '</tr>';   
                    }

            }
            mysqli_close($dbc);

        ?>
       </table>

これが問題の場合の CSS は次のとおりです。

.gallery {
width: 525px;
}
.imgcontain {
padding-right:15px; 
float: left;
width: 110px;
height: 110px
}
.caption {
font:bold 78% arial,helvetica,sans-serif; 
text-align:center; 
position: relative;
right: 10px;
color:#056063;
} 
4

2 に答える 2

0

これを試して

<h2 class="text1">Image Gallery</h2>
<p>Click any image to open up a larger version</p>
<div class="gallery">
    <?php
        $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 
        $query = "SELECT * FROM cmhimage ORDER BY id DESC";
        $data = mysqli_query($dbc, $query);
        ?>
    <table><tr>
        <?php 
        $level = 1;
        while ($row = mysqli_fetch_array($data)) { 
            $description = $row['capt'];
            $photo = $row['file'];
            $count = 4; //items per row

            if (($level > $count) && $level%$count==1){
                echo '
        </tr>
        <tr>';
            }

             // Display the data
//part of code from mercsen
echo '<td>';
echo ' <table>';
echo '  <tr>';
echo '    <td>';
echo '       <a href="manage/image/' . $photo . '" target="_blank"><img class="imgcontain" src="manage/image/' . $photo .'" border="0"/></a>';
echo '   </td>';
echo '   <td>';
echo '     <p class="caption">' . $description .'</p>';
echo '   </td>';
echo '  </tr>';
echo ' </table>';
echo '</td>';
            $level++;
        }
        mysqli_close($dbc);

    ?>
       </tr>
   </table>
于 2013-01-13T16:42:15.800 に答える
0

多くの問題があります。まずコードがほとんど読めない

この構造では、最初の tr は代わりに表示されません

 if (($level == 4) || ($level == 8) || ($level == 12) || ($level == 16) || ($level == 20) || ($level == 24))

試す

if($level == 1 || $level % 4 == 0)

そして代わりに

echo '<td><table><tr><td><a href="manage/image/' . $photo . '" target="_blank"><img class="imgcontain" src="manage/image/' . $photo .'" border="0"/></a></td></tr></td><br/>';
echo '<td><tr><td><p class="caption">' . $description .'</p></tr></td></table></td>'; 

これを試して

echo '<td>';
echo ' <table>';
echo '  <tr>';
echo '    <td>';
echo '       <a href="manage/image/' . $photo . '" target="_blank"><img class="imgcontain" src="manage/image/' . $photo .'" border="0"/></a>';
echo '   </td>';
echo '   <td>';
echo '     <p class="caption">' . $description .'</p>';
echo '   </td>';
echo '  </tr>';
echo ' </table>';
echo '</td>';

if (($level == 4) || ($level == 8) || ($level == 12) || ($level == 16) || ($level == 20) || ($level == 24)){
                    echo '</tr>';   
                    }

最初のもののように。

コードをフォーマットしてみてください。このスペースを使用すると、多くのセルと行が閉じていないことがわかります。

編集: while が始まる前に $count = 1 を入れてください! while の最後の行では、次のようになります。

$count++;
于 2013-01-13T13:29:43.297 に答える