Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用选定记录的codeigniter分页_Php_Mysql_Codeigniter - Fatal编程技术网

Php 使用选定记录的codeigniter分页

Php 使用选定记录的codeigniter分页,php,mysql,codeigniter,Php,Mysql,Codeigniter,我是codeigniter的新手。希望能帮助解决codeigniter分页的问题 我已从视图中选择了一些记录,并使用$\u POST将其传递给我的控制器。 控制器将使用$\u POST变量从模型中选择记录。 然后,记录将以分页方式显示在同一视图中。 步骤1-3正常,视图显示正确信息 在我的视图中按分页按钮时。这将调用同一控制器,但$\u POST info将为空。因此,我的视图不会根据需要与所选记录一起显示。 希望能帮上忙 我将代码简化如下:- 控制器: 型号: 看法 查看小工具 谢谢。分页类使

我是codeigniter的新手。希望能帮助解决codeigniter分页的问题

我已从视图中选择了一些记录,并使用$\u POST将其传递给我的控制器。 控制器将使用$\u POST变量从模型中选择记录。 然后,记录将以分页方式显示在同一视图中。 步骤1-3正常,视图显示正确信息

在我的视图中按分页按钮时。这将调用同一控制器,但$\u POST info将为空。因此,我的视图不会根据需要与所选记录一起显示。 希望能帮上忙

我将代码简化如下:-

控制器:

型号:

看法

查看小工具


谢谢。

分页类使用GET请求,只需使用页面的记录偏移量修改URL即可。例如,对于每页显示50条记录的列表,第2页为/some/url/50,第3页为/some/url/100

您可以:

更改3以使用POST或GET并调用可以标识要选择的记录的URL,或 扩展pagination类以输出一个表单,该表单在每次更改页面并使每个页面链接都是POST from而不仅仅是一个链接时从2重新发送相同的POST数据。 我认为1可能是最好的选择。它是SEF,可以添加书签,总体来说是一种更干净的方式

例如,您可以像通常一样使用表单,但也可以使用/some/unique/url直接转到结果


然后每个分页链接将调用/some/unique/url/50,其中50是记录偏移量分页类使用偏移量而不是页码。

听起来像是一个方法问题。为什么要使用POST数据筛选数据?分页库生成查询字符串以确定数据库查询结果的偏移量。为什么你不能用$\u GET代替$\u POST

我想可以将分页配置“base_url”设置为:

$this->load->helper('url');
$this->load->library('pagination');

$config['base_url'] = current_url().'?'.http_build_query($_POST);
$config['total_rows'] = 200;
$config['per_page'] = 20;

$this->pagination->initialize($config);

echo $this->pagination->create_links();
然后在控制器中,使用$this->input->get\u post,而不是$this->input->post。这里要小心,将完整的post数据直接传递到模型中进行处理很少是安全的。最好使用CI的输入类来防止XSS攻击

更新:

为了使用CI的输入类,而不是直接使用$\u POST或$\u GET,我通常将表单数据保存在排序名称空间中,即:

<input type="text" name="search[criteria1]" />
<input type="text" name="search[criteria2]" />
<input type="text" name="search[criteria3]" />

因为我指定了$this->input->get\u post,它将首先检查查询字符串参数;如果它不存在,则返回post数据。这将允许您在表单中使用POST,但仍然通过带有分页类的查询字符串传递相同的数据。但是,表单实际上应该使用GET方法,因为您将这些参数作为查询发送,而不是将某些内容发送到服务器。关于这个细节,我只花了0.02美元。

我建议您编辑如下内容:

$config['base_url']=site_url('site/users_area/arg1/arg2') ;
然后$\u从url或jst使用中获取它

$val1 = $this->uri->segment(3);
$val1 = $this->uri->segment(4);
并更改您的uri_段

$config['uri_segment'] = '3';to
$config['uri_segment'] = '5'.

取决于通过url传递的参数的数量,你们能举例说明你们的文件以及你们如何在它们之间传递数据吗?谢谢,这应该是可行的。请给出同一问题的CI输入类示例。在所有这些之后,是否不接受?至少投我一票,希希@landons,我使用了你的解决方案,当我点击第二页/下一页时,它起了作用。但是,当我单击第一个/上一个页面时,我发现一个错误,它没有显示任何内容。你能帮助我吗?
<input type="text" name="search[criteria1]" />
<input type="text" name="search[criteria2]" />
<input type="text" name="search[criteria3]" />
...
public function some_resource()
{
    $this->load->model('Some_model');
    $search_criteria = $this->input->get_post('search');
    if ($search_criteria)
    {
        // make sure here to remove any unsupported criteria
        // (or in the model is usually a bit more modular, but
        // it depends on how strictly you follow MVC)
        $results = $this->Some_model->search($search_criteria);
    }
    else
    {
        // If no search criteria were given, return unfiltered results
        $results = $this->Some_model->get_all();
    }

    $this->load->view('some_view', array(
        'results'         => $results,
        'pagination_base' => current_url().'?'.http_build_query($search_criteria)
    ));
}
...
$config['base_url']=site_url('site/users_area/arg1/arg2') ;
$val1 = $this->uri->segment(3);
$val1 = $this->uri->segment(4);
$config['uri_segment'] = '3';to
$config['uri_segment'] = '5'.