2013-03-07 57 views
0

我有一個自動遞增的ID字段的mysql表。當我環路輸出到頁面的,我開始用下面的,所以我可以指回到它通過錨在url每次迭代輸出:增加下一個/ prev鏈接的id號

// after query and while loop 
<a name="'.$row['id'].'"></a> 

我希望做的是有在每次迭代中下一個/上一個風格鏈接,搶$ ID,由一個遞增它並解析一個鏈接,如果有下一個或上一個$ ID,這樣的事情:

// query then loop 
while ($row = mysql_fetch_array($result)) { 

// increment $id to create var for NEXT link 
$n = intval($row['id']); 
$next = $n++; 

// decrement $id to create var for PREV link 
$p = intval($row['id']); 
$prev = $p--; 

// output PREV link 
if($prev > intval($row['id'])) { 
    echo '<a href="page.php#'.$prev.'">Previous</a> | '; 
} else { 
    echo 'Previous | '; 
} 

// output NEXT link 
if($next < intval($row['id'])) { 
    echo '<a href="page.php#'.$next.'">Next</a>'.PHP_EOL; 
} else { 
    echo 'Next'.PHP_EOL; 
} 

但使用上述回報沒有。有人能指引我朝着正確的方向嗎?

在此先感謝!

+2

'$ next = ++ $ n;'和'$ prev = - $ p;'。而且,你們兩個人如果比較不正確,他們將無法工作。假設你的$ row ['id']是5,那麼$ prev將是4,並且條件'if(4> 5)'給出了錯誤 – varnie 2013-03-07 19:48:33

回答

0
You are using post increment and decrement but you need to pree increment and decimeter 
Example 
$x=5; 
$y=$x++; 
echo $y; //Output will be 5 

// increment $id to create var for NEXT link 
    $n = intval($row['id']); 
    $next = ++$n; 


    // decrement $id to create var for PREV link 
    $p = intval($row['id']); 
    $prev = --$p; 
0

需要將其更改爲 -

$next = $n+1; 
$prev = $p-1; 
// adds/subtracts 1 from $n/$p, but keeps the same value for $n/$p 

$next = ++$n; 
$prev = --$p; 
// adds/subtracts 1 from $n/$p, but changes the value for $n/$p to ++/-- 

看到http://www.php.net/manual/en/language.operators.increment.php

當你

$next = $n++; 
$prev = $p--; 

直到執行代碼後,纔會發生增加/減少

此外,您的比較運算符(<>)需要翻轉。嘗試 -

// increment $id to create var for NEXT link 
$n = intval($row['id']); 
$next = $n+1; 

// decrement $id to create var for PREV link 
$p = intval($row['id']); 
$prev = $p-1; 

// output PREV link 
if($prev < $p) { 
    echo '<a href="page.php#'.$prev.'">Previous</a> | '; 
} else { 
    echo 'Previous | '; 
} 

// output NEXT link 
if($next > $n) { 
    echo '<a href="page.php#'.$next.'">Next</a>'.PHP_EOL; 
} else { 
    echo 'Next'.PHP_EOL; 
} 

注 -
if($prev < intval($row['id'])) & if($next > intval($row['id']))總是返回TRUE。
你應該檢查的是如果0 < $prev < intval($row['id'])intval($row['id']) < $next < max id

+0

我應該提到它是按ID DESC排序的(實際上是由date_added DESC ,但這是一個不同的故事),所以我改變了>和<,它的工作原理非常好,除了當Prev和Next沒有任何鏈接時,它仍然顯示鏈接,所以最終的if語句仍然給我一些悲傷。 – robotsmeller 2013-03-07 20:45:56

+0

您需要獲取第一個和最後一個id,而不是針對$ row ['id']'進行檢查。我這樣做的方式是做一個最小/最大查詢 - 「SELECT MIN(id)AS min,MAX(id)as max FROM table' - 然後我在if - 'if if($ prev> $ min) '&if($ next <$ max)' – Sean 2013-03-08 03:03:38