wpcolor 发表于 2018-7-16 16:59:09

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

表单name 字段,我是用的是中文,例如:<input name="姓名" type="text>
然后,在php端, 打印 $_post ,总是会自动添加一个 $_post['0']的变量,他的值就等于我表单数据的最后一项。
加入: 表单$_POST['姓名']   $_POST['年龄'], 就会多一个$_POST['0'] ==$_POST{年龄}的取值

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

求指点,这是什么鬼

Hex 发表于 2018-7-16 23:10:22

先用 chrome 的调试工具看一下是不是提交了什么东西,我可以肯定 CI 不会给你添加额外东西的。

wpcolor 发表于 2018-7-17 09:29:26

这是HTML:
      
<form action="/Formtest" method="post">
            <!--用英文时没问题-->
            <input type="text" name="id">
            <input type="text" name="age">

            <button type="submit">Submit</button>


这是 PHP:

class Formtest extends CI_Controller{
    function index() {
      print_r($_POST);
    }
}


这是英文结果: Array ( => 张三 => 20 )

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


奇迹就来了:Array ( [姓名] => 张三 [年龄] => 20 => 20 )

wpcolor 发表于 2018-7-17 09:31:58

我用的是php7, 360浏览器,IE浏览器都换过,肯定不是浏览器给我加的。

这种针对中文的操作,不知道有什么讲究?

wpcolor 发表于 2018-7-17 09:45:39

我用纯php7 也测试了,也没问题,不会添加。
现在结果:
1, 用纯粹php7 ok没问题。
2,换了浏览器和机器,也都没问题,ok。

可以确认,就是ci处理中文表单的时候,加的这个$_POST他的值总等于原表单的最后一项。
问题:1 为啥要自动添加?2,在哪里配置取消?

Hex 发表于 2018-7-17 10:50:04

wpcolor 发表于 2018-7-17 09:29
这是HTML:



不要把 name 改成中文,这是不合规矩的,这里一定要使用英文,这个 name 就是字段名,不要使用中文,没有这种操作。这个地方用户看不到,所以完全没有必要使用中文,会造成很多问题。

Hex 发表于 2018-7-17 10:52:44

wpcolor 发表于 2018-7-17 09:45
我用纯php7 也测试了,也没问题,不会添加。
现在结果:
1, 用纯粹php7 ok没问题。

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

你要是对为什么会这样感兴趣,你可以看一下 input.php 这个类库,所有输入都是在这里处理的。
页: [1]
查看完整版本: 为啥表单提交,总会自动加一个 $_POST['0']