1

作業中のギャラリー ページがあり、GET パラメータ page=2 を使用して次の画像セットを正しくロードできないようです。

私は6つの画像と次と前のボタンを備えたテーブルを使用しています。ただし、ページ1から[次へ]をクリックすると、合意された7から12ではなく、画像8から13が読み込まれます。

コードは次のとおりです。

<?php 
echo "<table width=\"490\" border=\"1\" align=\"center\">";
if(isset($_GET['page'])){
//Read Page, Set Start image, End image
$cur_page=abs($_GET['page']);
//if the page is page1, then set the defaults
if($cur_page==1){
    $prev_page=0;
    $next_page=2;
    $start_img=0;
    $last_img=6;
    }
    //if the page is not page1, calculate the defaults
    else{
        $prev_page=$cur_page-1;
        $next_page=$cur_page+1;
        $start_img=(($cur_page-1)*6)+1;
        $last_img=$start_img+5;
        }
}else{
//Page=1 start image=1 end image=6
$cur_page=0;
$prev_page=1;
$next_page=2;
$start_img=0;
$last_img=6;
}
//Do the sql query for the images
$sql="SELECT * FROM images LIMIT $start_img, 6";
$result = mysql_query($sql, $conn) or die(mysql_error());
//Set a counter variable to iterate the image display
$count=0;

//Begin the table that displays the images.
while ($newArray = mysql_fetch_array($result)) {
$count++;
//Print the odd-numbered column first
if($count%2==1){
    echo "<tr><td width=\"50%\"><a href=\"$newArray[Pic_Address]\">$newArray[Pic_Address]</a></td>";
//Print the even-numbered column next
}else{
    echo "<td width=\"50%\"><a href=\"$newArray[Pic_Address]\">$newArray[Pic_Address]</a></td></tr>";
}
}
//print the next and previous Links
echo "<tr>";
if($prev_page==0){echo "<td align=\"center\">Prev</td>";}else{echo "<td align=\"center\"><a href=\"index.php?page=$prev_page\">Prev</a></td>";};
echo "<td align=\"center\"><a href=\"index.php?page=$next_page\">Next</a></td>";

echo "</tr>
</table>";

//Printscreen to test the page-load variables.

echo "  <p align=\"center\">
    current page=$cur_page <br>
    prev_page=$prev_page <br>
    next_page=$next_page <br>
    start_img=$start_img <br>
    last_img=$last_img <br>
    </p>
    ";
?>
4

2 に答える 2

3

問題は次の行にあります。

$start_img=0;
$last_img=6;

&

$start_img=(($cur_page-1)*6)+1;
$last_img=$start_img+5;

ID 0これらの行は、page=1 の場合、 からまでの合計 7 枚の画像をロードし、page = ID 62 の場合、コードは$statr_img = ((2-1)*6)+1=になり、0 からカウントしているため、実際には 8 番目の画像になり7ます。 13枚目の画像。ID 7$last_img = 7+512ID 12

アップデート:

これが更新された完全なコードです。if/else は必要ありません。もちろん、$_GET をサニタイズする必要があります。

$cur_page = $_GET["page"];
$prev_page=$cur_page-1;
$next_page=$cur_page+1;
$start_img=(($cur_page-1)*6);
$last_img=$start_img+5;

上記のコードからの Page =1,2,3 ($cur_page は 1 または 2 または 3)
の結果: Page=1、結果:

$prev_page = 1-0 = 0    
$next _page = 1+1 = 2
$start_img = ((1-1)*6) = 0*6 = 0
$last_img = 0+5 = 5

ページ=2、結果:

$prev_page = 2-0 = 1
$next _page = 2+1 = 3
$start_img = ((2-1)*6) = 1*6 = 6
$last_img = 6+5 = 11

ページ=3、結果:

$prev_page = 3-0 = 2
$next _page = 3+1 = 4
$start_img = ((3-1)*6) = 2*6 = 12
$last_img = 12+5 = 17

また、<table>for レイアウトの使用は強くお勧めしません。CSS と DIV を調べてください。CSS で同じデザインを暗示している場合は、このコードを調べてください。

//continued from above $var calculating code + your MySql code

//Set a counter variable to iterate the image display
$count=0;

while ($newArray = mysql_fetch_array($result)) {
    $count++;
    echo "<div id=\"table\">\r\n";
    // Print the odd-numbered column first
    // if ID is 0,2,4 then Images are 1,3,5 OR odd
    if($count%2==0){
        echo "<div id=\"row\">\r\n<div class=\"cell\">\r\n<a href=\"$newArray[Pic_Address]\">$newArray[Pic_Address]</a></div><!--//cell-->\r\n";
    } else { // IDs are 1,3,5 OR Images are 2,4,6 OR even
        echo "<div class=\"cell\"\r\n><a href=\"$newArray[Pic_Address]\">$newArray[Pic_Address]</a></div><!--//cell-->\r\n</div><!--//row-->\r\n";
    } //else ends
 // while ends

//print the next and previous Links
echo "<div id=\"links\">\r\n";

if($prev_page != 0)
    echo "<a href=\"index.php?page=$prev_page\">";
echo "Prev"
if($prev_page != 0)
        echo "</a>\r\n";
echo "<a href=\"index.php?page=".$next_page."\">Next</a>\r\n";
echo "</div><!--//links-->\r\n"

echo "</div><!--//table-->\r\n"

したがって、ページ構造は次のようになります。

+----------------table-----------------+
| +---------------row----------------+ |
| | +----cell------+------cell-----+ | |
| | |    img       |     img       | | |
| | +--------------+---------------+ | |
| +---------------row----------------+ |
| | +----cell------+------cell-----+ | |
| | |    img       |     img       | | |
| | +--------------+---------------+ | |
| +---------------row----------------+ |
| | +----cell------+------cell-----+ | |
| | |    img       |     img       | | |
| | +--------------+---------------+ | |
| +----------------------------------+ |
| +--------------links---------------+ |
| |    Prev                Next      | |
| +----------------------------------+ |
+--------------------------------------+

もちろんFloat、それぞれの CSS の魔法のプロパティを確認する必要がありますDiv。それはあなたにお任せします(Google Css Float) .

于 2012-07-09T14:33:18.833 に答える
1

最初の画像のインデックスは 1 ではなく 0 です。

if($cur_page==1){ 
   $prev_page=0; 
   $next_page=2; 
   $start_img=0; 
   $last_img=5; 
} 
//if the page is not page1, calculate the defaults 
else{
    $prev_page=$cur_page-1; 
    $next_page=$cur_page+1; 
    $start_img=($cur_page-1)*6; 
    $last_img=$start_img+5; 
} 

start_img に 1 を追加しないでください。

また、1 つだけが満たされるため、2 つの else 条件は必要ありません。

于 2012-07-09T14:35:54.773 に答える