【问题标题】:Codeigniter $this->input->post is always FALSECodeigniter $this->input->post 总是 FALSE
【发布时间】:2013-08-27 13:35:30
【问题描述】:

我正在尝试将 httpRequest 发送到 codeigniter 控制器函数。我正在使用 REST 控制台来测试该功能。 我正在尝试发送3 POST 变量。

  • 用户名
  • 电子邮件
  • 用户 ID

这是处理请求的代码

public function NewUser()
{
    if($this->input->post())
    {
        $FID        = $this->input->post('UserID');
        $UserName   = $this->input->post('UserName');
        $Email      = $this->input->post('Email');
        echo "working";
        echo $FID;
        echo $UserName;
    }
    else
    {
        echo "not working";
    }
}

但这不起作用。它总是输出not working。当我将所有内容更改为geteverything 开始正常工作。

可能是什么问题?在整个codeigniter project 中,发布请求在任何地方都不起作用。

编辑

我创建了一个新脚本,代码如下。

<?php

  var_dump($_POST);
  echo $_POST['UserName'];
  echo $_POST['FacebookID'];
  echo $_POST['Email'];
  echo "********************************";
?>

上面写着undefined index。可能是什么问题 ?请帮忙。它适用于$_GET

【问题讨论】:

  • 使用isset($_POST)查看数据。
  • var_dump($_POST); 是NULL?
  • 您还应该检查提交按钮的名称 isset($_POST['submitname'])
  • 使用echo '&lt;pre&gt;';print_r($_POST);显示帖子数据
  • var_dump 像这样返回空数组 array(0) {}

标签: php codeigniter post


【解决方案1】:

要获取 codeigniter 3 (docs) 中的方法,您可以使用以下代码:

echo $this->input->method(TRUE); // Outputs: POST
echo $this->input->method(FALSE); // Outputs: post
echo $this->input->method(); // Outputs: post

示例:

public function NewUser()
{
    if($this->input->method() === 'post')
    {
        $FID        = $this->input->post('UserID');
        $UserName   = $this->input->post('UserName');
        $Email      = $this->input->post('Email');
        echo "working";
        echo $FID;
        echo $UserName;
    }
    else
    {
        echo "not working";
    }
}

【讨论】:

    【解决方案2】:

    你应该试试

    isset($_REQUEST) 或者 !empty($_REQUEST)

    检查数据是否到来

    【讨论】:

      【解决方案3】:

      $this-&gt;input-&gt;post() 不经意地返回 false,因为您没有提及要使用 post 检索的值的名称。在您的代码中进行更改:

      if(isset($_POST))
      

      或

        if(!empty($_POST))
      

      见POST

      你也可以这样做:

      if($this->input->post('username'))//username is the name of post variable
      

      【讨论】:

      • 当我使用 if 和 get 时,就像我在上面所做的那样。有用。如果您说$this-&gt;input-&gt;post() 将始终返回 false,那么它对$this-&gt;input-&gt;get() 的工作原理是什么?
      • 你需要指定变量post的名称。查看更新的答案
      • @DesertP 我正在使用REST Console chrome extension 发送请求。当我将变量更改为 get 而不是 post 时,同样的事情可以完美地工作。
      • 你应该使用 var_dump($_REQUEST); 来检查响应
      • @Mj 我想你收到了 json 数据
      【解决方案4】:

      在 Codeigniter 中,我们可以检查哪个 HttpRequest 它使用 2 下面的 Input class' 方法:

      1。 server('REQUEST_METHOD')

      $this-&gt;input-&gt;server() 与 Core PHP 的 $_SERVER 变量相同。

      示例:

      if ($this->input->server('REQUEST_METHOD') == 'GET') {
         echo "It's GET Request";
      } else if ($this->input->server('REQUEST_METHOD') == 'POST') {
         echo "It's POST Request";
      }  
      

      2。 method()

      从 Codeigniter 3 开始,我们也可以使用 method() 来检查请求类型。

      方法([$upper = FALSE])

      参数: $upper (bool) – 是否以大写或小写

      返回请求方法名

      返回: HTTP 请求方法

      返回类型:字符串

      解释:它返回$_SERVER['REQUEST_METHOD'],可以选择将其设置为大写或小写。

      示例:

      echo $this->input->method(TRUE); // Outputs: POST
      echo $this->input->method(FALSE); // Outputs: post
      echo $this->input->method(); // Outputs: post
      

      【讨论】:

        【解决方案5】:

        试试

        if( count($this->input->post()) > 0 )
        {
        
        }
        else
        {
        
        }
        

        【讨论】:

          【解决方案6】:

          我遇到了类似的问题。由于使用国际化,URL 会从 user/login 重定向到 user/en/login。当重定向发生时,POST 数组会丢失。

          我不确定这是否也是您的问题,但请检查您的页面是否在提交后重定向。

          【讨论】:

            猜你喜欢
            • 2014-12-07
            • 2017-07-29
            • 1970-01-01
            • 2011-08-25
            • 1970-01-01
            • 1970-01-01
            • 2017-04-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多