2013-03-07 23 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