【问题标题】:How to write PHP code to go through records one at a time?如何编写 PHP 代码一次遍历一个记录?
【发布时间】:2011-09-28 23:35:42
【问题描述】:

所以我是 php/mysql 的新手。我正在使用一个非常小的数据库(只有 10 条记录的单个表)进行测试,因为我只是想学习。

我在 php 页面上显示以下结果:select * from mytable where city = "atlanta"

它有效.. 结果显示在我的页面上。现在,我想知道,如何在这条记录下放置一个链接,上面写着“显示下一个结果”,然后单击它,它只是在我的数据库中拉出一个包含下一个结果的新页面?

这需要完整的分页脚本还是有简单的方法?

谢谢!

【问题讨论】:

  • next result 是什么意思?另一个城市(例如San Diego)或选择所有atlantas 返回的下一个城市?如果是后者,你如何开始只拉一个城市?您可以在更新中发布您的 php 脚本和数据库结构吗?

标签: php mysql pagination


【解决方案1】:

最简单的方法是包含一个整数 $_GET 变量,即行号 + 1。

<a href="index.php?id=<?php echo ($id + 1) ?>" />

那么对于您的 PHP 脚本,您需要获取该值,如果未提供,则使用默认值 (0)。

<?php
    if(!isset($_GET['id']))
        $id = 0;
    else
        $id = $_GET['id'];
?>

不要忘记绑定你的整数,这样你就不会得到无效的结果。在您的情况下,请确保$id 不低于0 或高于9。像这样简单的东西

    if($id < 0) $id = 0;

    if($id > 9) $id = 9;

应该可以。这紧跟在前面的代码示例之后。

那么对于您的查询,只需执行

$sql = "select * from mytable where city = 'atlanta' LIMIT {$id}, 1";

注意这里的LIMIT 子句有两个参数。首先,您当前的$id 号码告诉查询从哪里开始查找结果集中。第二个参数告诉它从一开始它应该采取多少个结果。在这种情况下,我们总是想要一个,所以我们将其保留为 1

当然,您应该对这个查询进行参数化,但是因为听起来您只是在学习 SQL,所以这没什么大不了的。如果这是一个公共站点,您将需要这样做。

您还可以使用 mysql_num_rows 或等效的 PDO 来获取适用行的总数,然后确定 $id + 1 是否大于总行数(意味着您在最后一条记录上),如果是, 不显示下一条记录的链接。

完整代码

<?php
    if(!isset($_GET['id']))
        $id = 0;
    else
        $id = $_GET['id'];

    if($id < 0) $id = 0;

    if($id > 9) $id = 9;

    $sql = "select * from mytable where city = 'atlanta' LIMIT {$id}, 1";

    $result = mysql_fetch_assoc($sql);
?>

Display your result here

<?php if( ( $id + 1 ) < mysql_num_rows($result) ) :

<a href="index.php?id=<?php echo ($id + 1) ?>" />

<?php endif; ?>

【讨论】:

  • $id = (int) $_GET['id']; 从 GEt 转换整数是一件好事,尤其是对于初学者
  • 很好的解决方案,但是我强烈建议使用 PDO(我更喜欢)或 mysqli 而不是即将被弃用的 mysql 扩展。使用准备好的语句是一个好习惯——越早开始越好(初学者问题)。
  • 在我的测试中必须更加努力地完成这项工作,但是.. 非常值得。我从中学到了很多。效果很好!非常感谢您提供的出色示例和解释!
  • @regilero 绝对忘记考虑浮点输入,你在那里绝对正确。很高兴我们能提供帮助,希望您的 PHP 学习能走得更远。正如 middus 和我建议的那样,一定要研究 PDO 或 mysqli,因为虽然基本 mysql 非常适合初学者,但它存在大量安全问题并且很快就会被弃用。
  • 谢谢!今晚解决了!
【解决方案2】:

你看的是php中的分页。网上教程太多了。here就是你能看到的一个

【讨论】:

    【解决方案3】:

    一个完整的分页脚本? :) 不,就是这样

    $items_per_page = 1;
    $page = max( 1, (int) $_GET['page'] );
    $offset = ($page-1) * $items_per_page;
    $limit = $items_per_page;
    
    $sql = "SELECT * FROM `table` LIMIT {$offset}, {$limit}"
    

    现在只需使用

    调用您的脚本
    http://localhost/index.php?page=1
    http://localhost/index.php?page=2
    http://localhost/index.php?page=3
    etc
    

    【讨论】:

    • 哇!你们很好! :) 非常感谢。我现在要玩所有的回复......因为我的目标只是学习......我想了解你在这里写的内容。我会回叫的。再次感谢!
    • 这个工作就像一个冠军!哇!!非常感谢!!我现在要检查其他解决方案......但我不敢相信你完成了这么几行。谢谢!!!
    【解决方案4】:

    现在,我想知道,如何在此记录下放置一个链接,上面写着“显示下一个结果”并点击它

    您必须为您的链接提供下一个数据库条件键值。

    例如 您的主页是:

    从 db 中选择:atlanta

    Link=>下一个条目(这里必须提供下一个条件。你的真实条件是 where city = "atlanta" 所以下一个你必须知道)

    正确的做法是在这个例子中创建 sql question

    $sql = "SELECT * FROM mytable WHERE id='<?=$_POST['id']?>'";
    

    这样就可以打印链接了

    <a href='?id=<?=db["id"]+1?>'>Next Entry</a>
    

    【讨论】:

    • 谢谢!其他人让我继续前进,这给了我需要的“下一个链接”信息。
    【解决方案5】:

    我能想到的最简单的方法(如果您不想使用成熟的分页脚本)是获取数组中行的 ID(可能使用array_keys()),跟踪当前活动的键(通过 $_GET) 然后使用一些简单的逻辑来确定 id 数组中的前一个和下一个值是什么,并使用它们来构建导航链接。

    【讨论】:

      猜你喜欢
      • 2021-10-13
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      • 2016-09-16
      • 2020-10-22
      相关资源
      最近更新 更多