在codeigniter安装上,我尝试使用内置的$this->input->post('some_data')
函数,但是$this->input->post()
是一个空数组。
print_r($_POST)
是否完全正确地提供了所有变量?
根据codeigniter文档,输入类“由系统自动初始化,因此无需手动执行”,让我想知道我还有什么意思。
关于我应该如何努力让它发挥作用的任何想法?
谢谢!
答案 0 :(得分:26)
如果你的观点看起来像这样(正确),你可以检查:
<form method="post" action="/controller/submit/">
vs(不起作用):
<form method="post" action="/controller/submit">
这里的第二个是不正确的,因为它重定向而没有携带过去的变量。
<强>解释强>
当url最后没有斜杠时,表示这指向文件。
现在,当Web服务器查找文件时,它会看到,这实际上是一个目录,并在最后用斜杠向浏览器发送重定向。
浏览器使用斜杠对新URL进行新查询,但不发布表单内容。这就是表单内容丢失的地方。
答案 1 :(得分:4)
使用$this->input->post()
初始化表单助手。您可以在配置中默认执行此操作。
答案 2 :(得分:3)
试试这个,改变
$config['base_url'] = 'http://mywebsite.cl/';
到
$config['base_url'] = 'http://www.mywebsite.cl/';
某些提供商自动将www,https等添加到您的网址,大多数情况下会导致此问题
答案 3 :(得分:1)
你可以寻找一些帮助来解决这个问题。
核心CodeIgniter文件中有任何更改或扩展。检查system/core/Input.php
是原始副本以及application/library
和application/core
的内容以获取其他文件
其他输入法是否有效?在print_r
电话旁边运行时,结果是什么?
echo $this->input->user_agent();
从print_r
输出哪些数据?在application/config/config.php
中查找第$config['global_xss_filtering']
行。这设置为TRUE
还是FALSE
?如果TRUE
可能跨站点脚本过滤器对您发布的数据有问题(我认为这不太可能)
答案 4 :(得分:1)
您是否在/applicaiton/config/config.php
启用了csrf保护?
如果是,$this->input->post()
将显示为空。您可以尝试执行不应为空的$this->input->post('submit')
。
答案 5 :(得分:1)
我的问题是ajax调用。我正在使用它:
type: 'posts',
而不是
type: 'post',
语法,D&#39;哦!
答案 6 :(得分:1)
从2.2.x升级到3.0.x - 原因post方法失败。 如果要升级CI 3.x,则需要将index_page保留在配置文件中。 还要检查.htaccess文件中的mod_rewrite。 CI_3.x
$config['index_page'] = ''; // ci 2.x
$config['index_page'] = 'index.php'; // ci 3.x
我的.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 /index.php
</IfModule>
答案 7 :(得分:1)
更改表单操作
由此:
<form method="post" action="<?=base_url()?>yourprocess">
进入这个:
<form method="post" action="<?=base_url()?>index.php/yourprocess">
基本上,您只需要在base_url()之后添加“index.php”:
行动= “http://www.yourdomain.com/index.php/yourprocess”
答案 8 :(得分:0)
终于在今天解决了这个问题。问题出在 .htaccess
文件中。
向自己学习:MUST READ THE CODEIGNITER DOCUMENTATION更彻底。
答案 9 :(得分:0)
答案 10 :(得分:-1)
您缺少父级构造函数。 加载控制器后,您必须 在控制器构造函数中调用父CI_Controller类构造函数
答案 11 :(得分:-2)
问题是$this->input->post()
不支持获取所有POST数据,只支持获取特定数据,例如$this->input->post('my_post_var').
这就是var_dump($this->input->post());
为空的原因。
一些解决方案,坚持使用$ _POST检索所有POST数据,或者从每个需要的POST项目中分配变量,例如:
// variables will be false if not post data exists
$var_1 = $this->input->post('my_post_var_1');
$var_2 = $this->input->post('my_post_var_2');
$var_3 = $this->input->post('my_post_var_3');
但是,由于上面的代码不是很干,我喜欢这样做:
if(!empty($_POST))
{
// get all post data in one nice array
foreach ($_POST as $key => $value)
{
$insert[$key] = $value;
}
}
else
{
// user hasen't submitted anything yet!
}
答案 12 :(得分:-2)
解决如下:
以下是否会排除将运行$ this-&gt;的.htacess重定向。输入 - &gt;在控制器上发布('name'),在我看来它完美无缺。
ABS, JoséCamargo]
答案 13 :(得分:-3)
要查看所有帖子值,请尝试var_dump($this->input->post(ALL));