codeigniter表单POST在View中从Controller清空

时间:2016-03-02 19:42:19

标签: php forms .htaccess codeigniter post

我正在使用Codeigniter。我创建了一个HTML表单,将数据发布到Controller。

此表格工作正常但突然停止发布数据。

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. 我尝试检查浏览器中的数据帖子,它显示我在输入框中输入的数据。
  2. enter image description here

    1. 在我的index.php中,我放置了以下代码以查看是否已发布:
    2. 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

           

      string&#39; order1 = 26&amp; item1 =&#39;

           

      数组(大小= 23)
        &#39; order1&#39; =&GT;字符串&#39; 26&#39; (长度= 2)
         &#39; ITEM1&#39; =&GT;字符串&#39;&#39; (长度= 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]
        
      2. 有人可以告诉我这是什么问题吗?我无法找到数据传递给控制器​​的原因,它变为空。该应用程序已成功运行了一年多,但我突然遇到了这个问题。

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

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

        ie:而不是 order1 ,如果我使用chrome中的inspect元素将名称更改为&#34; neworder &# 34;然后,如果我提交,数据会向控制器提交值。不知道为什么?

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

        每次调用页面时我都会开始一个新的会话,但我不会杀死现有的会话。那是问题吗?

        即使我破坏旧会话并启动新会话,我也会在浏览器中获得设置cookie。它对我来说只有一个..但在我的情况下,我在浏览器中获得了超过6套cookie。

3 个答案:

答案 0 :(得分:5)

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

  

如果使用Apache服务器,则应启用mod重写,否则启用   重定向是正确的,但是空的$ _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

希望它有所帮助!

答案 1 :(得分:1)

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

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

http://ip/free/index.php

并在您的 HTML 文件上的表单标记上执行如下操作。记住最后使用的斜线:

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

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

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

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

答案 2 :(得分:1)

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

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

https://www.yourwebsite.com.br/ 代码点火器 4