Matthew Higgins
Matthew Higgins

Reputation: 608

Codeigniter $this->input->post() empty while $_POST is working correctly

On a codeigniter installation, I am trying to use the inbuilt $this->input->post('some_data') function, however $this->input->post() is an empty array.

A print_r($_POST) gives all the variables fully and correctly?

According to the codeigniter docs, The input class "is initialized automatically by the system so there is no need to do it manually", leaving me wondering what else I'm meant to do.

Any thoughts on how I should try to get this working?

Thanks!

Upvotes: 20

Views: 174014

Answers (14)

MD004
MD004

Reputation: 600

I had a similar problem. In my case, I was POSTing to the CodeIgniter website via an outdated Python script and that script was using "http" URLs instead of "https". I had updated the website to use only https a while ago, but this script wasn't updated.

In short, using HTTP caused $this->input->post() to be an empty array.

Upvotes: 0

David Figueras Tamame
David Figueras Tamame

Reputation: 81

You are missing the parent constructor. When your controller is loaded you must Call the parent CI_Controller class constructor in your controller constructor

Upvotes: -1

AWinx
AWinx

Reputation: 11

Change your form action,

From this:

<form method="post" action="<?=base_url()?>yourprocess">

Into this:

<form method="post" action="<?=base_url()?>index.php/yourprocess">

Basically, you just need to add "index.php" after your base_url():

action="http://www.yourdomain.com/index.php/yourprocess"

Upvotes: 1

Italo Hern&#225;ndez
Italo Hern&#225;ndez

Reputation: 1132

Try This, change

$config['base_url'] = 'http://mywebsite.cl/';

to

$config['base_url'] = 'http://www.mywebsite.cl/';

Some provider auto add www , https , etc to your url, most of the times, this causes this issue

Upvotes: 5

user3262234
user3262234

Reputation: 19

Finally got the issue resolved today. The issue was with the .htaccess file.

Learning to myself: MUST READ THE CODEIGNITER DOCUMENTATION more thoroughly.

Upvotes: -2

Jay Bharat
Jay Bharat

Reputation: 33

Use

var_dump($this->input->post());

Please see the screen shot. Here I am priniting all the post array value

Upvotes: 1

syyu
syyu

Reputation: 407

Upgrading from 2.2.x to 3.0.x -- reason post method fails. If you are upgrading CI 3.x, need to keep the index_page in config file. Also check the .htaccess file for mod_rewrite. CI_3.x

$config['index_page'] = ''; // ci 2.x
$config['index_page'] = 'index.php'; // ci 3.x

My .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>

Upvotes: 2

Webmaster G
Webmaster G

Reputation: 532

My issue was with an ajax call. I was using this:

type: 'posts',

instead of

type: 'post',

Syntax, D'oh!

Upvotes: 0

Rauli Rajande
Rauli Rajande

Reputation: 2020

You can check, if your view looks something like this (correct):

<form method="post" action="/controller/submit/">

vs (doesn't work):

<form method="post" action="/controller/submit">

Second one here is incorrect, because it redirects without carrying over post variables.

Explanation:

When url doesn't have slash in the end, it means that this points to a file.

Now, when web server looks up the file, it sees, that this is really a directory and sends a redirect to the browser with a slash in the end.

Browser makes new query to the new URL with slash, but doesn't post the form contents. That's where the form contents are lost.

Upvotes: 30

Jos&#233; Camargo
Jos&#233; Camargo

Reputation: 1

Solved as follows:

Does the following exclude the redirection that is .htacess that will run the $ this-> input- > post ('name' ) on the controller, in my case it worked perfectly .

abs, José Camargo]

Upvotes: -3

ShaneH
ShaneH

Reputation: 385

There's a few things you can look for help solve this.

  1. Has anything changed or been extended in the core CodeIgniter files. Check that system/core/Input.php is an original copy and the contents of application/library and application/core for additional files

  2. Do the other input methods work? What is the result of this when run beside your print_r call?

    echo $this->input->user_agent();

  3. What data is output from print_r? Look in application/config/config.php for the line $config['global_xss_filtering']. Is this set to TRUE or FALSE? If TRUE maybe the cross site scripting filter has a problem with the data you're posting (this is unlikely I think)

Upvotes: 1

Anusha
Anusha

Reputation: 281

To see all the post value try var_dump($this->input->post(ALL));

Upvotes: -3

Steward Godwin Jornsen
Steward Godwin Jornsen

Reputation: 1179

To use $this->input->post() initialize the form helper. You could do that by default in config.

Upvotes: 5

facultymatt
facultymatt

Reputation: 169

The problem is that $this->input->post() does not support getting all POST data, only specific data, for example $this->input->post('my_post_var'). This is why var_dump($this->input->post()); is empty.

A few solutions, stick to $_POST for retrieving all POST data, or assign variables from each POST item that you need, for example:

// 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');

However, since the above code is not very DRY, I like to do the following:

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!
}

Upvotes: -2

Related Questions