CodeIgniter $ this-> input-> post()在值为文本时为空,但整数工作正常

时间:2015-04-17 01:52:16

标签: php forms codeigniter

我在其他开发者创建的网站上进行维护。客户端遇到了一些数据显示问题,我将其缩小到输入形式,或者更具体地说是POST数据处理。所有字段都是TEXTAREA字段,控制器函数如下所示:

 85                 $data=array(
 86                         'f_location'=>$this->input->post('flocation'),
 87                         's_location'=>$this->input->post('slocation'),
 88                         't_location'=>$this->input->post('tlocation'),
 89                         'forthlocation'=>$this->input->post('forthlocation'),
 90                         'fifthlocation'=>$this->input->post('fifthlocation'),
 91                         'sixthlocation'=>$this->input->post('sixthlocation')
 92                 );
 93                 $query=$this->admin_model->updatelocation($data);

模型中的updatelocation函数是:

 54         function updatelocation($data){
 55                 $query=$this->db->where('id','1');
 56                 $query=$this->db->update('location',$data);
 57                 
 58                 if($query){
 59                         return true;
 60                 }else{
 61                         return false;
 62                 }
 63         }

无论出于何种原因,每当我通过表单提交任何类型的文本数据时,它都会将其作为“' 0”存储在数据库中。当我提交整数时,它直接存储整数。为了使事情变得更奇怪,我只是尝试在控制器函数内部执行print_r($_POST),如果有任何整数,则接受所有数据,包括文本。如果所有字段都是文本,则$ _POST数组为空。

我无论如何都不是CodeIgniter的专业人士,但我至少可以自己解决这个问题,但我无法解决这个问题。

此处列出了我目前检查过的内容:

  • XSS过滤已关闭
  • 未使用表单验证
  • 数据库排序/字符集不会影响它(目前是utf8_unicode_ci)
  • 数据库数据类型设置为文本
  • 尝试添加尾随/形成操作
  • 在config / database.php中启用了db_debug(未报告错误)

我确定还有其他一些我现在无法想到的事情。哦,还有一件奇怪的事。我家里有一台本地开发服务器。当我将整个代码库下载到该服务器时,一切正常。从字面上看,我所做的唯一改变是配置中的baseurl,所以它在我的本地工作,然后一切正常工作:文本,整数,一切。仅在远程托管网站上,文本不会通过。任何帮助表示赞赏。我彻底难倒了。

编辑1:使用var_dump($this->input->post())作为控制器中的第一个操作进行了一些进一步的测试。当所有6个输入字段都是文本时,它将返回bool(false)。如果有文本,CodeIgniter就不会识别表单数据。

表单的HTML是:

<form name="addlocation" action="<<<redacted>>>" method="post">
<h2>Add Location data</h2>

<p><textarea style="margin-left:5px;" rows="3" cols="4" required placeholder="Firstlocation"  name="flocation">0</textarea> </p>
<p><textarea style="margin-left:5px;" rows="3" cols="4" required placeholder="Secondlocation" name="slocation">0</textarea></p>
<p><textarea style="margin-left:5px;" rows="3" cols="4" required placeholder="Thirdlocation" name="tlocation">0</textarea></p>
<p><textarea style="margin-left:5px;" rows="3" cols="4" required placeholder="Forthlocation" name="forthlocation">0</textarea></p>
<p><textarea style="margin-left:5px;" rows="3" cols="4" required placeholder="Fifthlocation" name="fifthlocation">0</textarea></p>
<p><textarea style="margin-left:5px;" rows="3" cols="4" required placeholder="Sixthlocation" name="sixthlocation">0</textarea></p>
<button class="btn btn-success" type="Submit" value="Submit">Update</button1>
</form>

我试过删除所需的,没有运气。 &#39; 0&#39; 0正在从数据库中提取,因为它是当前值。正在将值写入数据库,但不正确。

1 个答案:

答案 0 :(得分:2)

我找到了答案,这很奇怪。与CI,表单,数据库无关。我正在做更多的谷歌搜索,并发现this article here.他的问题是他试图上传图像,我没有做,但至少它让我至少考虑到这一点。由于完全相同的代码在我本地工作,我曾经在服务器上有一些东西导致了这一点。在服务器上运行快速phpinfo()已确认,网站post_max_size设置为100字节。因此,文本不是打破了它,它是多少文本。在修复它之前,我通过在每个字段中输入一个字母进行确认并修复它。无论如何,我的本地服务器的post_max_size为8M,这解释了它的工作原理。我将一个php.ini文件添加到远程服务器并将post_max_size设置为8M,一切正常。

我现在已经在这个问题上撞了几个星期。我感谢所有阅读此内容的人,并为我着想。这是我多年来第二个模糊不清的问题:)