URL 末尾的位称为GET 变量。当用户转到一个末尾有一个的页面时,例如:
example.org/comics/myawesomecomic.php?page=50
服务器转到该页面,并且(通常)服务器端脚本会在将页面输出给用户之前做一些工作。对于 PHP,GET 变量是一个全局变量(与其他变量一样,大变量是 POST 和 COOKIE),php 脚本可以通过获取从服务器传递到脚本的值来检索它,在本例中为 $_GET['page']。
因此,假设您有一个脚本可以处理对漫画故事情节“My Awesome Comic”的所有请求,并且它分为 60 页,那么用户访问任何页面所需要做的就是将 GET 变量更改为页码.您的脚本可能会做一些非常简单的事情,例如获取名为myawesomecomic/ 的目录的内容并获取名为50.html 的文件,然后将其输出给用户。但很有可能,因为你遇到了这个麻烦,你想要一些更复杂的东西,所以它会从数据库中抓取第 50 页并更新所有导航,甚至可能会在右上角抛出一个时尚的50 - 60。
现在,这是最简单的部分,也就是您问题的答案。既然您知道了 GET 变量的工作原理以及服务器脚本对它们的作用,那么您要做的就是按照您的描述进行导航:
$current_page = $_GET['page'];
$next_page = $current_page + 1;
$prev_page = $current_page - 1;
$first_page = 1;
$last_page =
最后一部分将由您自己知道。您可以始终拥有相同数量的页面,或者您可以在拉出当前页面的同时查询数据库,等等。假设您在获取当前页面时确实查询了数据库的总页数。它返回了 60(我们假设,为了避免令人头疼的是 60 是从 1 开始的页数,而不是 0),所以回到导航...
$last_page = 60;
现在您有了第一个、最后一个、上一个和下一个。假设你熟悉 HTML,剩下的(除了让这个看起来漂亮)是:
echo "
<a href='myawesomecomic.php?page=$first_page'>First Page</a>
<a href='myawesomecomic.php?page=$prev_page'>Previous Page</a>
<a href='myawesomecomic.php?page=$next_page'>Next Page</a>
<a href='myawesomecomic.php?page=$last_page'>Last Page</a>
";
还有你的导航。显然,您需要安排它们以适合您的网站,而不是让它们像那样一起运行,使用很酷的箭头等。但即使您不做任何花哨的事情,这些链接也可以工作。
但是!
我刚刚给了你一个非常棒的“我第一次玩 PHP”的版本。我遗漏的东西(你应该多问问或做一些认真的研究):
由于 GET 变量包含在 URL 中,因此不难弄清楚。我可以轻松地将?page=50 更改为?page=1=1,并且根据您获取内容的方式,我可能只是询问了您数据库的所有内容。 从不将用户输入(甚至是 URL)直接抓取到您的变量中。如果你知道它是页码,那么你就知道它是一个数字。在通过脚本和数据库运行之前检查输入以确保它是一个数字。
如果用户输入的数字超出范围,您需要有一个系统。诸如“抱歉,找不到页面”甚至“找不到页面,从头开始”之类的简单内容并将它们发送回第 1 页,无论如何。如果你什么都不输出,它看起来很糟糕,并且你揭示了可以被操纵的部分脚本逻辑。
当您对 GET 变量感到满意时,我建议您放弃它们以使用 mod_rewrite(假设您在 apache 服务器上)。现在不要跳入,但是当你掌握了窍门后,你可以开始制作如下 URL:example.org/comics/myawesomecomic/page50 或 example.org/comics/myawesomecomic/page/50 或者你有什么。真正发生的是该目录中的所有页面都被重定向到同一个脚本,然后该脚本检查 URL 的结尾以确定从数据库中提取的内容。但对于最终用户来说,它看起来只是一个网页。这看起来更干净(我认为),并且在覆盖脚本逻辑方面做得更多。但我想说的是等待它,因为它还会让您面临其他更难以预料的风险,除非您习惯于清理用户输入并处理标准页面错误,例如“找不到页面”。
无论如何,弄清楚诸如在当前日期添加一周和向当前页面添加页码之类的东西完全是我进入 PHP 和 Web 应用程序开发的方式,所以我希望这对我有帮助且简单明了。