标签: codeigniter-2

Codeigniter - 具有多个Where条件的批量更新

首先,update_batch上的Codeigniter文档不存在.kenjis非常友好地提供一些文档并将其提交到存储库.希望他们很快就拉下来.

有谁知道如何在Codeigniters update_batch命令中添加多个条件?

我想要的用途:

$where = array(
    'title',
    'name'
); 

$this->db->update_batch('mytable', $data, $where);
Run Code Online (Sandbox Code Playgroud)

当我尝试这段代码时,我得到了以下错误:

A Database Error Occurred
One or more rows submitted for batch updating is missing the specified index.

Filename: C:\wamp\www\wheel\system\database\DB_active_rec.php

Line Number: 1451
Run Code Online (Sandbox Code Playgroud)

由kenjis更新批处理文档:

$this->db->update_batch();
Run Code Online (Sandbox Code Playgroud)

根据您提供的数据生成更新字符串,然后运行查询.您可以将数组对象传递给函数.以下是使用数组的示例:

$data = array(
    array(
        'title' => 'My title' ,
        'name' => 'My Name 2' ,
        'date' => 'My date 2'
    ),
    array(
        'title' => 'Another title' ,
        'name' => 'Another Name 2' ,
        'date' => 'Another date …
Run Code Online (Sandbox Code Playgroud)

activerecord codeigniter codeigniter-2

15
推荐指数
2
解决办法
2万
查看次数

如何在codeigniter中使用重定向显示验证错误?

我一直处理一个问题.如何在函数中使用重定向设置验证错误?这是我控制器中的代码:

function send()
{
    $this->form_validation->set_rules('e-mail', 'Email', 'trim|required|valid_email');
    $this->form_validation->set_rules('cellphone', 'Cellphone Number', 'trim|required|is_natural');
    $this->form_validation->set_message('required', '%s is required.');
    $this->form_validation->set_message('valid_email', '%s is not a valid Email Address');
    $this->form_validation->set_message('is_natural', '%s can only contain numbers.');
    $this->form_validation->set_error_delimiters('<li>', '</li>');

    if($this->form_validation->run() == FALSE)
    {
        redirect ('/');
    }
    else
    {
        echo '<pre>';
        print_r($_POST);
        echo '<pre>';
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我在视图文件中使用的代码:

<? if (validation_errors())
{   
echo '<div id="validation_errors" title="Error:">';
echo '<div class="response-msgs errors ui-corner-all"><span>Errors:</span><br /><ul>';
echo validation_errors();
echo '</ul></div>';
echo '</div>';
}
?>
Run Code Online (Sandbox Code Playgroud)

validation codeigniter validationerror codeigniter-2

15
推荐指数
2
解决办法
3万
查看次数

我可以将数据传递给Codeigniter输出类而不显示它吗?

我正在努力让用户能够生成发票和其他表格数据的PDF副本.为此,我将dompdf包装到一个可以与CI一起使用的库中,并创建了一个方法,该方法将根据CI的返回值生成PDF output->get_output().包装器类似于Github上的这个包装器.

问题是,我无法找到一种方法来将视图(以及PDF所需的HTML/CSS)转换为CI的输出类load->view(),而不是写入浏览器.

我唯一的另一个选择是使用curl来请求页面,但这似乎很愚蠢,因为我可以从输出缓冲区得到它.我只是不希望HTML发送到浏览器,因为我设置标题告诉浏览器期望PDF.

要清楚,这就是我想要完成的事情(按照我想要完成的顺序):

  1. 做我通常做的一切准备视图显示
  2. 将视图加载到CI输出类,但不显示它
  3. 将返回值传递output->get_output()给我的dompdf库
  4. 设置适当的标题
  5. 执行我的dompdf方法,将PDF发送到浏览器

我没有看到基于输出类文档执行第2步的任何方法.

是否可以在不显示输出类的情况下获取视图?如果是这样,怎么样?我正在使用CI 2.0.3.

编辑

非常有帮助的Anthony Sterling指出,我可以通过设置第三个参数告诉它返回一个字符串而不是将视图渲染为TRUE来从loader类中得到我想要的东西.例如:

$lotsaHtml = $this->load->view('fooview', $somearray, TRUE);
Run Code Online (Sandbox Code Playgroud)

这在我的特定实例中会更好,因为我不需要加载部分.然而,这仍然是一个有效的(我认为)有趣的问题,知道我是否可以从OB得到相同的东西也是很方便的,也许如果我确实有一堆偏.那些可以连接起来,但是很糟糕.

看起来我应该能够让输出类不呈现任何东西(否则,为什么get_output()存在?)所以我可以用它知道的所有东西做其他事情.我找不到让这种情况发生的方法.

编辑2

一些伪(但不远离现实)的代码说明我希望做什么,通过展示我做了什么,然后解释我实际想做什么.

假设我genpdf($id)在使用名为invoice的模型命名的控制器中有一个公共方法inv:

public function genpdf($invoiceId) {
    $this->load->library('dompdflib');
    $this->pagedata['invoice_data'] = $this->inv->getInvoice($invoiceId);
    $html = $this->load->view('pdfgen', $this->pagedata, TRUE);
    $this->dompdflib->sendPdf($html);
}
Run Code Online (Sandbox Code Playgroud)

这几乎与我现在使用的代码相同.在那里,我要求加载器解析并将pdfgen视图的结果作为字符串给我,我将其传递给我的dompdf包装器中的函数,该函数设置标头并将PDF发送到浏览器.

只是通过获取输出缓冲区本身(在正确设置标头/等之后),这似乎很容易做到.

或者我只需要append_output()在每次加载部分时连续调用输出类?

加载过多模型的多个方法需要一起工作才能生成这些(它们是作为事后的想法进行的),所以我希望只收集它并直接从输出类中检索它.可能是我必须逐渐谈谈 …

php codeigniter dompdf codeigniter-2

15
推荐指数
1
解决办法
6301
查看次数

如何在codeigniter中使用composer包?

我跟着这篇文章:http://philsturgeon.co.uk/blog/2012/05/composer-with-codeigniter

但我明白了Fatal error: Class 'Buzz\Browser' not found.

他的帖子里缺少什么?

我的控制器或应用程序未命名空间.我希望能够在非命名空间框架中的一个控制器的操作中使用该一个包.

php namespaces codeigniter-2 composer-php

15
推荐指数
6
解决办法
4万
查看次数

在codeigniter中使用HTTPOnly标志设置cookie

我想知道如何在Codeigniter中将cookie设置为HTTPOnly.我查看了文档,但没有看到如何设置此标志.

我还想设置cookie的安全标志,并在config.php文件中找到它:

$config['cookie_secure'] = TRUE;
Run Code Online (Sandbox Code Playgroud)

但是config.php中没有HTTPOnly选项.

如何将所有cookie设置为HTTPOnly?如果它是在框架中完成的,那么知道该代码在我自己的学习中的位置(以及默认值是什么)会很有帮助.

cookies xss codeigniter codeigniter-2

14
推荐指数
2
解决办法
1万
查看次数

Codeigniter中的报告

在Codeigniter框架中生成报告的最简单方法是什么?有没有可用于执行此任务的库?除了绘制其他资源以外做什么.

php csv codeigniter report codeigniter-2

14
推荐指数
1
解决办法
3万
查看次数

在没有浏览器超时的情况下在PHP中处理大量数据

我有大约50,000个手机号码.我正在尝试使用第三方API处理并向这些号码发送批量短信,但浏览器会冻结几分钟.我正在寻找更好的选择.

数据处理涉及检查移动号码类型(例如CDMA),为所有号码分配唯一ID以便进一步参考,检查网络/国家独特费用等.

我想在数据库中排队数据并使用cron每分钟批量发送大约5k,但如果有很多消息则需要时间.我还有什么其他选择?

我在XAMPP服务器上使用Codeigniter 2.

php mysql codeigniter codeigniter-2

13
推荐指数
1
解决办法
1万
查看次数

更新数据库字段错误CodeIgniter

我在CodeIgniter 2.1中收到以下错误消息:

A PHP Error was encountered

Severity: Notice

Message: Array to string conversion

Filename: database/DB_active_rec.php

Line Number: 1407
Run Code Online (Sandbox Code Playgroud)

我正在尝试更新数据库中的字段.我有这个代码,每个教程对于批量上传都是一样的.无论如何它仍然有效但事情是它显示这样的错误.

这就是我在我的模型中所拥有的:

function update2($data){
   $this->db->update_batch('users',$data, "id");
}
Run Code Online (Sandbox Code Playgroud)

这就是我在我的控制器中所拥有的:

public function updateValues(){
    $this->load->model('get_db');
    $newRow = array(
        array(
            'id' => '3',
            'firstname' => 'Rapphie'
        ),
        array(
            'id' => '2',
            'firstname' => 'Charmie'
        )
    );
    $this->get_db->update2($newRow);
    echo "it has been updated";
}
Run Code Online (Sandbox Code Playgroud)

php mysql codeigniter codeigniter-2

13
推荐指数
2
解决办法
7702
查看次数

CodeIgniter更新查询执行两次

我正在使用CodeIgniter 2.2.

每次访问页面时,我都必须使用+1更新数据库.代码有效,但每次增加+2.

示例:如果total views=2,单击页面total views应该是3,但数据库中的值是4.

我确信我add_one_to_view_image只在控制器中调用一次模型.

调节器

   function view(){

    $view_id =  $this->uri->segment(3);

    if($view_id){
        $this->property->add_one_to_view_image($view_id);
        $prop['prop_detail'] = $this->property->get_single_property_for_view($view_id);
        $prop['prop_imgs'] = $this->property->get_single_property_images($view_id);
        $prop['amenities'] = $this->property->get_single_property_amenities($view_id);
        $prop['latest'] =  $this->home->get_latest_properties();

        $size = sizeof($prop['latest']);
        for($k=0; $k< $size; $k++){
        $Image_name = $this->property->get_property_first_image($prop['latest'][$k]->property_id);
            if($Image_name){
            $prop['latest'][$k]->image=$Image_name[0]->name;
            }else {
                $prop['latest'][$k]->image="";
            }
        }


    $this->load->view('property_view', $prop); 
    }

}
Run Code Online (Sandbox Code Playgroud)

模型

  function add_one_to_view_image($id){

  echo "We in add one to views";
  $this->db->where('property_id', $id);
  $this->db->set('views', 'views+1', FALSE);
  $this->db->update('property_views'); 
 }
Run Code Online (Sandbox Code Playgroud)

我在模型中添加了一个echo语句.它只打印一次..

视图

<!DOCTYPE html>
            <html …
Run Code Online (Sandbox Code Playgroud)

php codeigniter-2

13
推荐指数
1
解决办法
1957
查看次数

Codeigniter回显[:: 1]而不是localhost

我使用CodeIgniter 3作为Web平台,并尝试将语义UI UI导入到我的页面中.我是通过base_url()在CSS导入的href属性中使用CodeIgniter的方法来实现的.

但是,semantic.css本身会导入我服务器上存在的其他一些字体,然后由于跨源资源共享策略而无法加载这些字体.这是chrome给我的错误消息:

来自"来源" http://[::1]的字体已被阻止通过跨源资源共享策略加载:请求的资源上不存在"Access-Control-Allow-Origin"标头.原产地" :HTTP //本地主机,因此"是不允许访问.

这是因为[::1]我输入浏览器时,base_url()回应域已经存在而不是localhost.

出于某种原因,在我看来,chrome(以及Edge)并不认为[::1]和localhost是同一个主机,或者我可能只是愚蠢.我所知道的是,如果我将主semantic.css文件的路径和硬代码localhost更改为它,它可以工作,如果不是使用localhost请求我的页面,它也可以使用[::1]

我已经完成了与此类似的其他项目,从未"[::1]"出现过这种情况.究竟是什么导致php回应这样的路径?

php codeigniter codeigniter-2 codeigniter-3

13
推荐指数
3
解决办法
2万
查看次数