【问题标题】:codeigniter form POST Empty in Controller from Viewcodeigniter form POST Empty in Controller from View
【发布时间】:2016-06-15 20:39:40
【问题描述】:

我正在使用 Codeigniter。我创建了一个将数据发布到控制器的 HTML 表单。

此表单运行良好,但突然停止发布数据。

HTML:

<form name="frm_search" id="frm_search" method="post" action="http://ip/free/index.php/taskdetails/tabOne/1/ShibNo/asc/">
<input  id="order1" name="order1" value="26" type="text" >
<input  id="item1" name="item1" value="" type="text" >
</form>
  1. 我试图检查浏览器中的数据发布,它显示了我在输入框中输入的数据。

  1. 在我的 index.php 中,我放置了以下代码以查看是否已发布:
echo "CONTENT_TYPE: " . $_SERVER['CONTENT_TYPE'] . "";
$data = file_get_contents('php://input');
echo "DATA: <pre>";
var_dump($data);
var_dump($_POST);
echo "</pre>"; 
exit; 

结果:

CONTENT_TYPE: application/x-www-form-urlencoded

字符串'order1=26&item1='

数组(大小=23)
'order1' => 字符串'26'(长度=2)
'item1' => 字符串'' (长度=0)

但是当我在控制器中打印 $_POST 时,我得到以下信息:

Array
(
    [order1] => 
    [item1] =>
)
  1. 我的.htaccess代码如下:

    RewriteEngine on
    
    RewriteCond $1 !^(index\\.php|resources|robots\\.txt)
    
    RewriteCond %{REQUEST_FILENAME} !-f
    
    RewriteCond %{REQUEST_FILENAME} !-d
    
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
    

谁能告诉我这是什么问题?我无法找出为什么当数据传递到控制器时它变为空。应用程序成功运行了一年多,但我突然遇到了这个问题。

提前谢谢你。如果您需要更多帮助,请告诉我。

注意:我发现一旦页面加载完毕,如果我将输入的名称编辑为其他名称,那么数据就会成功发布。

ie: 而不是 order1,如果我在 Chrome 中使用检查元素将我的编辑名称更改为“neworder”,那么如果我提交,数据以价值提交给控制器。不知道为什么?

更新:我发现有些奇怪。在浏览器的 set-cookie 中。这就像一整页的垃圾。

每次调用页面时,我都会启动一个新会话,但不会终止现有会话。那是问题吗?

即使我销毁旧会话并启动新会话,我也会在浏览器中获得 eh set-cookies。它对我来说是一个.. 但在我的情况下,我在浏览器中设置了 6 个以上的 cookie。

【问题讨论】:

  • 也许你在某处使用 order1
  • 什么 CodeIgniter 版本?是否开启了 XSS 过滤?尝试制作order1 = HELLOecho $this-&gt;input-&gt;post('order1'); 产生了什么?
  • 你有一些 jQuery 在运行 $('#order1').val(''); 或类似的页面上吗?
  • 没有类似的东西。我厌倦了给出不同的值,但仍然没有答案。是的,页面中有 Jquery,但没有订单验证。
  • @TomPHP 请您显示完整的视图文件以及控制器吗?输入字段的重复名称会发生​​这种问题吗?而且,是ajax请求吗?

标签: php forms .htaccess codeigniter post


【解决方案1】:

根据此 CI github 帖子问题https://github.com/bcit-ci/CodeIgniter/issues/242,这可能是 RewriteRule 的 .htaccess 问题:

如果使用 Apache 服务器,则应启用 mod rewrite,否则 重定向将是正确的,但 $_POST 为空。

&

如果您的 URL 上没有斜杠,服务器将发送一个 301重定向会干扰POST数据。

你的问题可能出在

RewriteRule ^(.*)$ index.php/$1 [L,QSA]

尝试更改为:

RewriteRule ^(.*)$ index.php/$1 [PT,L]

(来自:not able get post form submit values in codeigniter)或尝试设置:

sudo a2enmod rewrite

希望对你有帮助!

【讨论】:

  • 尝试从 config.php 中的基本 URL 中删除 www.,从此处提取(非常相似的问题):stackoverflow.com/questions/28143654/… 或者如果这不起作用,也请检查其他:stackoverflow.com/questions/14201815/…
  • 我仍然认为这可能是 .htaccess / routes 问题,您的控制器名称是什么?以及功能?您能粘贴文件夹结构或更多代码(config.php.、route.php...)吗?
【解决方案2】:

您好,我对此问题的研究是一种非常不可接受的类型,但我不知道为什么会发生这种情况,或者可能在 Codeigniter 中对此类问题有一些限制。

如果您在配置中这样描述您的基本 URL,请记住最后的 URL 不包括斜杠:

http://ip/free/index.php

并在您的 HTML 文件上的表单标签上进行这样描述的操作。记住最后使用的斜线:

http://ip/free/index.php/taskdetails/tabOne/1/ShibNo/asc/

由于“斜线”更改了路径,因此无法将任何数据传递给控制器​​,这是正在发生的问题。

在这种情况下,如果您没有在最后的基础 URL 上使用斜杠,那么也不要在 HTML 表单上使用以使其正常工作。

如果您遇到此类问题,那么尝试一下可能会有所帮助。

【讨论】:

    【解决方案3】:

    我遇到了同样的错误并像上面的答案一样解决。

    .env 文件中的 baseURL 必须包含用于生产的类似内容

    https://www.yourwebsite.com.br/ CodeIgniter 4

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      • 2017-09-27
      相关资源
      最近更新 更多