post checkbox默认值

今天学生管理系统写到对班级内多用户的信息提交的时候,决定用使用input name里设置数组的形式
首先出现了Disallowed Key Characters.(CI框架)
查询 得到答案

这和 CI 的字符串处理类设计有关,是这样的,通过get、post方法提交的字符串,CI 都交给 system/core/Input.php
这个类去处理,那很多人就问了,看url并没有特殊符号,为什么也报这样的错误,因为你忽略了一点,cookie 和 session
传输的字符串,也是由这个类统一处理的,也就是说,get、post、cookie、session 的数据都是由这个类处理的,问题往往也出现在
cookie 和 session 上面,所以网上有很多人提供方法就是,清除一下缓存和 cookie
,确实就没问题了,但是隔一段时间就又有问题了,因为新生成的 cookie 里面含有不被匹配通过的字符串,该怎么解决呢?
解铃还需系铃人,既然问题出现在 Input.php 这个类上面,就修改他就好,把 _clean_input_keys 方法:

function _clean_input_keys($str)
{
    if ( ! preg_match("/^[a-z0-9:_\/-]+$/i", $str))
    {
        exit('Disallowed Key Characters.');
    }
    // Clean UTF-8 if supported
    if (UTF8_ENABLED === TRUE)
    {
        $str = $this->uni->clean_string($str);
    }
    return $str;
}

改为:

function _clean_input_keys($str)
{
    /*if ( ! preg_match("/^[a-z0-9:_\/-]+$/i", $str))
    {
        exit('Disallowed Key Characters.');
    }*/
    $config = &get_config('config');  
    if (!emptyempty($config['permitted_uri_chars']))
    {
        if ( ! preg_match("/^[".$config['permitted_uri_chars']."]+$/i", rawurlencode($str)))   
        {   
            exit('Disallowed Key Characters.');   
        }  
    }
    // Clean UTF-8 if supported
    if (UTF8_ENABLED === TRUE)
    {
        $str = $this->uni->clean_string($str);
    }
    return $str;
}

然后把 config/config.php 里面的:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';

改为:

$config['permitted_uri_chars'] = '';
然而并没有成功,还是出现Disallowed Key Characters.
遂从post的提交页面入手,发现name="zcmaster[<?=$x?>]['ztyxf']"
去掉单引号后正常,数组在html表单里的使用方法竟然与php不同。
php数组索引的Key加引号和不加引号的区别
php函数库关于数组

第二个问题:
当checkbox里的值,勾上了两个可以用name同数组的方法传值
问题就在不勾时,$_POST里没有出现checkbox,这样在获取数组的时候就少了一个键。

解决方法:前台加隐藏域 在checkbox的前面再加一个同name的隐藏域
问题解决