我希望解决以下问题:
page results.php显示用户列表(sql查询结果)。此页面还将所有user_id存储到数组$ _SESSION ['user_ids']。当我点击查看用户的详细信息时,user_view.php会显示该用户的详细信息。
我希望在点击(上一页|下一页)链接时在user_view.php页面中更改用户详细信息。
我取得的成就:
prev
link和user_view.php?next = 1用于next
链接。在results.php页面中设置了以下变量
$_SESSION['user_ids']=$user_ids; // $user_ids is an array with ids
$_SESSION['first_value']=reset($user_ids);
$_SESSION['last_value']=end($user_ids);
正在执行检查后的user_view.php页面中的
$id_view=$_SESSION['user_id']; // This is to view the first user details and is set after clicking "view" for a user in results.php page
$user_ids=$_SESSION['user_ids']; // array
if (isset($_GET['prev']))
{
if ($_GET['prev'] == "1")
{
if (current($_SESSION['user_ids'])==$_SESSION['first_value'])
{
$id_view = $_SESSION['user_value'];
}
else
{
$id_view = prev($_SESSION['user_ids']);
}
}
}
if (isset($_GET['next']))
{
if ($_GET['next'] == "1")
{
if (current($_SESSION['user_ids'])==$_SESSION['last_value'])
{
$id_view = $_SESSION['user_value'];
}
else
{
$id_view = next($_SESSION['user_ids']);
}
}
}
// GET THE DETAILS OF THE USER WITH ID $id_view
$result=mysql_query("SELECT * FROM $tbl_name WHERE user_id='$id_view'",$db);
上面的代码根本不起作用...当我点击prev
时,数组被清除,$ id_view没有任何值。
我想要的是什么: 当我点击prev | next链接并在该页面中显示详细信息时,更改$ id_view值。
你们能帮助我吗?
答案 0 :(得分:3)
通常,在分页时,两件事情的做法不同。首先,服务器被告知转到某个索引,而不是告诉服务器“下一步”或“返回”。这有两个目的。首先,它更简单,更容易测试 - is it going to the right index? Then it works.
。其次,它允许用户在分页中为当前位置添加书签。
接下来,大多数情况下,除非有充分的理由不(例如,每次运行时查询需要半分钟),页面通常会根据使用情况显示DB中的LIMIT(或等效)。它可能会使查询稍微复杂一些,但总体上更简单。
您的查询可能如下所示:
SELECT * FROM $tbl_name WHERE user_id IN (
SELECT USER_ID FROM SOME_OTHER_TABLE LIMIT $index, 1
);
next
和prev
未存储在序列化数组中,这正是数组在刷新之间存储在$ _SESSION中的方式。
// serialization loses index!
$a = array(1,2,3);
echo next($a); // 2
echo current($a); // 2
// !! resets the index !!
echo current(unserialize(serialize($a))); // 1
而不是next
和prev
,您可能需要考虑:
$index = $_SESSION['paginatino_index'];
if (isset($_GET['prev']))
{
if ($_GET['prev'] == "1")
{
$index = ( $index > 1 )? $index - 1: 0;
}
}
// this will never exist simultaneously with $_GET['prev'] unless the user
// does something very bad.
elseif (isset($_GET['next']))
{
if ($_GET['next'] == "1")
{
$count = count( $_SESSION['user_ids'] ) - 1;
$index = ( $index < $count - 1 )? $index + 1: $count;
}
}
// caution! will not work with associative arrays.
$id_view = $_SESSION['user_ids'][ $index ];
有一段时间我想保持每个页面都有书签,但这导致了一个非常复杂的URL,我想避免这种情况。所以我序列化了一个数据对象并将其存储在数据库中,并在个人会话中存储了一个并行版本。如果会话存在,分页工作如下。如果会话不存在,则将数据对象反序列化并存储在会话中。结果?我只能使用search_id=1
存储十五个极长参数,从而生成参数search_id=1&page=2
。我觉得这很聪明,但我从未想要过骄傲......