【问题标题】:'Load more' on data from database in foreach loop [duplicate]在foreach循环中从数据库中“加载更多”数据[重复]
【发布时间】:2017-06-21 04:07:51
【问题描述】:

我会尽量解释清楚。

我通过 PHP foreach 循环从 MySQL 数据库中获取数据。它遍历 50 多条记录并根据不同的变量显示数据。我想在说 12 条记录后停止循环,然后单击一个按钮以显示下一个 12 条,依此类推。

有没有办法在某个迭代中停止或暂停 foreach 循环,然后单击按钮再次“播放”循环进行 12 次迭代?

下面我发布了这个 foreach 循环的简化示例。

foreach ($view->likeDataSet as $productData){

echo '<p class="pName">' . $productData->getPname() . '</p>';

}

这将加载我在数据库中的产品名称,并继续这样做直到所有记录

任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 如果通过“播放”允许页面刷新,那么可以。如果通过“播放”您希望它不刷新页面,而只是添加更多记录,那么您正在谈论更复杂的 AJAX 解决方案。
  • 你会如何通过页面刷新来做到这一点?如果我能弄清楚,我可以将它包裹在一个 AJAX 函数中,该函数在幕后进行刷新不是吗?
  • 在这种情况下可以选择分页,只检索您想要显示的数据。

标签: php mysql loops foreach pagination


【解决方案1】:

你有两个选择:

  • 页面刷新,您将在其中将一些 GET 参数传递到页面,foreach 循环将根据该参数显示更多记录。

简化示例:

$itemCount = $_GET['showitems'];

$mysqli = new mysqli(sqlhost, user, bassword, db);
$stmt = $mysqli->prepare('SELECT * FROM products LIMIT ?'); //prepare the statement
$stmt->bind_param('i', $itemCount);                         //bind parameters to the statement
$stmt->execute();

$result = $stmt->get_result();

...
your logic to transform the data into the $view->likeDataSet structure 
...

foreach ($view->likeDataSet as $productData){
  echo '<p class="pName">' . $productData->getPname() . '</p>';
}

echo '<a href="yourcript.php?showitems='.($itemCount + 10).'">Get next 10 rows</a>';
  • 更复杂的选项,您将使用 javasript 和 AJAX 修改实际页面内容。因此,您的 php 脚本应该第一次生成整个页面代码,然后只有当您单击“播放”时要添加的附加记录的部分页面,当然还有这个“播放”按钮下的 javascript 函数,它将发出 AJAX 请求并将数据放入代码中

【讨论】:

  • 好的,太好了!不幸的是,我不能用mysql_* 库支持任何答案,所以你能快速切换它以显示正确的mysqli_ 绑定吗?还是 PDO?
  • 我习惯于在 SQL 语句中使用变量之前对变量进行类型检查和转义,就像在这个例子中一样,很抱歉之前的简化。我理解您要求展示学习姿势的正确方法;-)
  • 别担心!我们只是想确保未来的访问者看到良好的数据库访问最佳实践! +1
【解决方案2】:

你应该看看DataTables,假设你可以在你的应用程序中使用jQuery。它可以一次获取所有结果,并允许您对整个列表进行分页、过滤等操作,或者与服务器端代码一起使用以块的形式提取数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多