用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2621|回复: 7
收起左侧

[控制器] 为啥表单提交,总会自动加一个 $_POST['0']

[复制链接]
发表于 2018-7-16 16:59:09 | 显示全部楼层 |阅读模式
表单name 字段,我是用的是中文,例如:  <input name="姓名" type="text>
然后,在php端, 打印 $_post ,总是会自动添加一个 $_post['0']的变量,他的值就等于我表单数据的最后一项。
加入: 表单  $_POST['姓名']   $_POST['年龄']  , 就会多一个  $_POST['0'] ==$_POST{年龄}的取值

我必须每个表单都手工 unset $_POST[0] ,不然数据库插入和更新就报错

求指点,这是什么鬼
发表于 2018-7-16 23:10:22 | 显示全部楼层
先用 chrome 的调试工具看一下是不是提交了什么东西,我可以肯定 CI 不会给你添加额外东西的。
 楼主| 发表于 2018-7-17 09:29:26 | 显示全部楼层
这是HTML:
HTML复制代码
       
<form action="/Formtest" method="post">
            <!--用英文时没问题-->
            <input type="text" name="id">
            <input type="text" name="age">
 
            <button type="submit">Submit</button>
 
复制代码


这是 PHP:
PHP复制代码
 
class Formtest extends CI_Controller{
    function index() {
        print_r($_POST);
    }
}
 
复制代码


这是英文结果: Array ( [id] => 张三 [age] => 20 )

现在一切看起来ok,CI也没有给我额外加什么东西。 下来开始魔术时刻,只需要将html 代码中的 name="id" 改为中文 name="姓名"
HTML复制代码
           
<input type="text" name="姓名">
 <input type="text" name="年龄">
 
复制代码


奇迹就来了:Array ( [姓名] => 张三 [年龄] => 20 [0] => 20 )
 楼主| 发表于 2018-7-17 09:31:58 | 显示全部楼层
我用的是php7, 360浏览器,IE浏览器都换过,肯定不是浏览器给我加的。

这种针对中文的操作,不知道有什么讲究?  
 楼主| 发表于 2018-7-17 09:45:39 | 显示全部楼层
我用纯php7 也测试了,也没问题,不会添加。  
现在结果:
1, 用纯粹php7 ok没问题。
2,换了浏览器和机器,也都没问题,ok。

可以确认,就是ci处理中文表单的时候,加的这个  $_POST[0]  他的值总等于原表单的最后一项。  
问题:1 为啥要自动添加?  2,在哪里配置取消?
发表于 2018-7-17 10:50:04 | 显示全部楼层

不要把 name 改成中文,这是不合规矩的,这里一定要使用英文,这个 name 就是字段名,不要使用中文,没有这种操作。这个地方用户看不到,所以完全没有必要使用中文,会造成很多问题。
发表于 2018-7-17 10:52:44 | 显示全部楼层
wpcolor 发表于 2018-7-17 09:45
我用纯php7 也测试了,也没问题,不会添加。  
现在结果:
1, 用纯粹php7 ok没问题。

从你这个测试结果来说,只能说是 CI 不支持中文,毕竟是外国人写的东西。所以你在编程的时候,要尽量在任何地方避免使用中文,这是一个好习惯。毕竟计算机是外国人发明的,尽量使用英文,会让你的开发体验更愉快。

你要是对为什么会这样感兴趣,你可以看一下 input.php 这个类库,所有输入都是在这里处理的。

本版积分规则