标签: codeigniter

CodeIgniter表单验证 - 将结果作为"数组"而不是"字符串"

我正在使用CodeIgniter编写表单验证类.有没有办法让我可以在名称值对中获取错误消息?例如,在一个样表有四个字段:user_name,password,password_conf,和timezone.其中user_name和password验证执行以下后失败:

$result = $this->form_validation->run();
Run Code Online (Sandbox Code Playgroud)

如果上面的函数返回false,我想获取名称值对中的错误,如下所示:

Array
{
  'user_name' => 'user name is required',
  'password' => 'passord is required'
}
Run Code Online (Sandbox Code Playgroud)

我真的想形成一个JSON,我可以将其传递回AJAX调用.我有一个(脏)解决方案:我可以逐个调用验证方法,如下所示:

$this->form_validation->required($user_name);
$this->form_validation->required($password);
Run Code Online (Sandbox Code Playgroud)

还有其他方法,在名称值对中一次性获取所有错误消息吗?

编辑:我被建议用其中一个答案用jQuery进行验证:

jQuery将有助于客户端验证,但是服务器端,我正在使用CodeIgniter验证.

我设计它是为了:

  1. 我使用AJAX发布所有值.
  2. 在服务器端验证(PHP).
  3. 如果输入有效,则执行所需的操作; 否则会向用户返回错误.

php codeigniter

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

使用CodeIgniters Active Record库来操作MySQL数据库或者我应该只使用SQL是一个好主意吗?

我开始掌握CodeIgniter,并且发现它支持Active Record模式.

我喜欢它为您生成SQL代码的事实,因此基本上您可以检索,更新数据并将数据插入到数据库中,而无需将应用程序绑定到特定的数据库引擎.

它使简单查询变得非常简单,但我担心的是,如果不是不可能的话,它会使复杂查询变得更复杂(例如,如果需要特定于引擎的函数).

我的问题

您对此模式有何看法,特别是有关CodeIgniters的实现?

将数据库包装在另一层中是否存在速度问题?

在尝试构建非常复杂的查询时,它(逻辑)是否变得混乱?

优点是缺点吗?

php database activerecord design-patterns codeigniter

16
推荐指数
1
解决办法
3496
查看次数

Form_validation错误进入数组

我在CodeIgniter应用程序中有一个表单验证代码:

$this->load->library('form_validation');

$this->form_validation->set_rules('message', 'Message', 'trim|xss_clean|required');
$this->form_validation->set_rules('email', 'Email', 'trim|valid_email|required');

if($this->form_validation->run() == FALSE)
{
    // some errors
}
else
{
    // do smth
    $response = array(
        'message' => "It works!"
    );
    echo json_encode($response);
}
Run Code Online (Sandbox Code Playgroud)

该表单是基于AJAX的,因此前端必须接收带有表单错误的JSON数组,例如:

array (
  'email' => 'Bad email!',
  'password' => '6 symbols only!',
)
Run Code Online (Sandbox Code Playgroud)

如何在CodeIgniter中获取具有表单验证错误的列表或数组?

codeigniter

16
推荐指数
5
解决办法
6万
查看次数

使用CodeIgniter的正则表达式缩小最终的HTML输出

Google页面建议您缩小HTML,即删除所有不必要的空格. CodeIgniter确实具有giziping输出的功能,或者可以通过.htaccess.但我仍然想从最终的HTML输出中删除不必要的空格.

我用这段代码玩了一下,看起来很有效.这确实导致HTML没有多余空格并删除其他选项卡格式.

class Welcome extends CI_Controller 
{
    function _output()
    {
        echo preg_replace('!\s+!', ' ', $output);
    }

    function index(){
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是可能有像<pre>,<textarea>等等的标签 ,其中可能有空格,正则表达式应该删除它们.那么,如何从最终的HTML中删除多余的空间,而不使用正则表达式影响这些特定标记的空格或格式?

感谢@Alan Moore得到了答案,这对我有用

echo preg_replace('#(?ix)(?>[^\S ]\s*|\s{2,})(?=(?:(?:[^<]++|<(?!/?(?:textarea|pre)\b))*+)(?:<(?>textarea|pre)\b|\z))#', ' ', $output);
Run Code Online (Sandbox Code Playgroud)

ridgerunner在分析这个正则表达方面做得很好.我最终使用了他的解决方案.干杯里的干杯.

php regex compression codeigniter

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

codeigniter活动记录获取没有LIMIT子句的查询和查询

即时通讯使用活动记录,它的工作正常,但我想将$ data ["totalres"]设置为总结果,我的意思是,相同的查询,但没有LIMIT

问题是当你执行查询修饰符时,前面的语句被取消设置,所以我甚至不能在得到结果后添加$ this-> db-> limit().

有任何想法吗?我认为,为了做到这一点,"复制"查询是一种不好的做法

function get_search($start, $numrows, $filter = array())
{    

    ...

    $this->db
    ->select("emp")
    ->from('emp')
    ->join('empr', 'empr.b = empr.id', 'left')
    ->like('code', $code)
    ->limit($numrows, $start);

    ...

    $q = $this->db->get();        

    // number of rows WITHOUT the LIMIT X,Y filter
    $data["totalres"] = ???????;        

    if ($q->num_rows() > 0)
    {        
        $data["results"] = $q->result();
    } else {
        $data["results"] = array();
    }   

    return $data;
}    
Run Code Online (Sandbox Code Playgroud)

php mysql activerecord codeigniter

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

Codeigniter Web服务

我正在使用Codeigniter 1.7.有没有人有使用PHP创建Web服务的经验,特别是在CodeIgniter框架内?实施Web服务时需要考虑哪些安全措施?如何使用API​​密钥提供身份验证?

有任何想法吗?

authentication soap web-services codeigniter

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

在没有表单的情况下获取Codeigniter CSRF令牌?

我在我的站点上启用了CSRF保护,但CSRF令牌放置在隐藏字段中的唯一时间form_close()是使用时间.我通过ajax发布数据,并且需要发送CSRF以防止500错误.

我认为有一种方法可以将CSRF令牌明确地嵌入到页面中,但我似乎无法找到它.

如果页面上没有表单,我如何获得CSRF令牌?

php ajax codeigniter

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

codeigniter中所有视图的可用数据

我有一个变量,包含应该存在于整个网站中的数据.我想知道是否有办法让这些数据可用于网站中的每个视图,而不是将这些数据传递给每个控制器的每个视图.

钯.将此数据存储为会话变量/ ci会话cookie不是一种选择.

非常感谢.

codeigniter

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

请求超出了10个内部重定向的限制

我的网站在最近几天放慢了速度.我查看了我的错误日志,发现了很多这些:

[Mon Sep 30 00:09:53 2013] [error] [client 66.249.66.205] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
[Mon Sep 30 00:09:53 2013] [debug] core.c(3120): [client 66.249.66.205] r->uri = /home/mysitecom/domains/mysite.com/public_html/index.php
[Mon Sep 30 00:09:53 2013] [debug] core.c(3126): [client 66.249.66.205] redirected from r->uri = /home/mysitecom/domains/mysite.com/public_html/index.php
[Mon Sep 30 00:09:53 2013] [debug] core.c(3126): [client 66.249.66.205] redirected from r->uri = /home/mysitecom/domains/mysite.com/public_html/index.php
[Mon Sep 30 …
Run Code Online (Sandbox Code Playgroud)

php apache error-handling .htaccess codeigniter

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

session codeigniter localhost

我正在使用这个Facebook lib for CodeIgniter,因此用户可以使用Facebook登录.在生产上工作得很好,但在localhost上却没有.困扰我的是它曾经在localhost上运行良好,但突然停止工作.

我一直在寻找一段时间,我期待这与CI的会话库有关,但我不是百分百肯定.

背景信息

  • 我正在使用PHP 5.5.10和Chrome 41.0.2272.118运行MAMP
  • 在本地我已经在MAMP中配置了httpd.conf,所以我的本地URL是一个'真正的'URL,如www.example-local.net,Apache端口是80
  • if($this->session)在视图中返回true.编辑; 我实际上并没有在视图中使用它,但它只是为了测试这是否有效
  • 生产和开发代码完全相同,除了Facebook API密钥和秘密,因为我在本地使用测试应用程序.如..所示; 之前它工作得很好,我没有改变我的测试应用程序设置.
  • 编辑:我将我的TLD配置为FB测试应用程序中的应用程序域和站点URL.同样,这似乎不是问题所在

问题

  • if($this->session)在(Facebook)库文件中返回false.编辑; 这似乎是个问题.所以这在视图中工作,而不是在库中.关于它的奇怪之处在于它之前正在工作(没有代码更改)
  • 因此,似乎库没有fb_boken在会话userdata中设置,这就是我怀疑设置有问题的原因$this->session
  • 我确实搬到了不同的时区(仅1小时),我在某处读到这可能会导致问题?编辑; 我已回到以前工作过的时区,但仍然没有工作

我已经尝试过但没有用的

  • 在config.php设定$config['sess_expiration']为高的值(例如,999999),而不是7200
  • 在config.php更改$config['cookie_domain']为localhost网站(http://www.example-local.net尝试使用和不使用斜杠)而不是空("")
  • 在config.php不断变化的$config['sess_match_useragent'],以FALSE代替TRUE
  • 所描述的与PHP的本地会话替换应用/系统/库/ session.php文件在这里
  • 清除我的所有Cookie和浏览数据

有关config.php的其他信息

$config['cookie_prefix']    = "";
$config['cookie_domain']    = "";
$config['cookie_path']      = "/";
$config['cookie_secure']    = FALSE;
Run Code Online (Sandbox Code Playgroud)

我希望使用PHP的本机会话可以解决问题,但事实并非如此.不确定我还能尝试什么.

供参考完整的Facebook.php库文件代码

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

if ( …
Run Code Online (Sandbox Code Playgroud)

php session codeigniter localhost

16
推荐指数
1
解决办法
1798
查看次数