我正在使用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验证.
我设计它是为了:
我开始掌握CodeIgniter,并且发现它支持Active Record模式.
我喜欢它为您生成SQL代码的事实,因此基本上您可以检索,更新数据并将数据插入到数据库中,而无需将应用程序绑定到特定的数据库引擎.
它使简单查询变得非常简单,但我担心的是,如果不是不可能的话,它会使复杂查询变得更复杂(例如,如果需要特定于引擎的函数).
我的问题
您对此模式有何看法,特别是有关CodeIgniters的实现?
将数据库包装在另一层中是否存在速度问题?
在尝试构建非常复杂的查询时,它(逻辑)是否变得混乱?
优点是缺点吗?
我在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中获取具有表单验证错误的列表或数组?
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在分析这个正则表达方面做得很好.我最终使用了他的解决方案.干杯里的干杯.
即时通讯使用活动记录,它的工作正常,但我想将$ 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) 我正在使用Codeigniter 1.7.有没有人有使用PHP创建Web服务的经验,特别是在CodeIgniter框架内?实施Web服务时需要考虑哪些安全措施?如何使用API密钥提供身份验证?
有任何想法吗?
我在我的站点上启用了CSRF保护,但CSRF令牌放置在隐藏字段中的唯一时间form_close()是使用时间.我通过ajax发布数据,并且需要发送CSRF以防止500错误.
我认为有一种方法可以将CSRF令牌明确地嵌入到页面中,但我似乎无法找到它.
如果页面上没有表单,我如何获得CSRF令牌?
我有一个变量,包含应该存在于整个网站中的数据.我想知道是否有办法让这些数据可用于网站中的每个视图,而不是将这些数据传递给每个控制器的每个视图.
钯.将此数据存储为会话变量/ ci会话cookie不是一种选择.
非常感谢.
我的网站在最近几天放慢了速度.我查看了我的错误日志,发现了很多这些:
[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) 我正在使用这个Facebook lib for CodeIgniter,因此用户可以使用Facebook登录.在生产上工作得很好,但在localhost上却没有.困扰我的是它曾经在localhost上运行良好,但突然停止工作.
我一直在寻找一段时间,我期待这与CI的会话库有关,但我不是百分百肯定.
背景信息
if($this->session)在视图中返回true.编辑; 我实际上并没有在视图中使用它,但它只是为了测试这是否有效问题
if($this->session)在(Facebook)库文件中返回false.编辑; 这似乎是个问题.所以这在视图中工作,而不是在库中.关于它的奇怪之处在于它之前正在工作(没有代码更改)fb_boken在会话userdata中设置,这就是我怀疑设置有问题的原因$this->session我已经尝试过但没有用的
config.php设定$config['sess_expiration']为高的值(例如,999999),而不是7200config.php更改$config['cookie_domain']为localhost网站(http://www.example-local.net尝试使用和不使用斜杠)而不是空("")config.php不断变化的$config['sess_match_useragent'],以FALSE代替TRUE有关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) codeigniter ×10
php ×7
activerecord ×2
.htaccess ×1
ajax ×1
apache ×1
compression ×1
database ×1
localhost ×1
mysql ×1
regex ×1
session ×1
soap ×1
web-services ×1