Php 从codeigniter中的外部表单获取JSON数据

Php 从codeigniter中的外部表单获取JSON数据,php,json,codeigniter,Php,Json,Codeigniter,我有一个外部web表单,它将数据发布到我的控制器URL。数据以JSON字符串的形式发送 我需要做的是获取JSON字符串中的各个值,并将它们添加到我的数据库中。然而,我在获取发布的值和解码它们时遇到了一些困难 这是我尝试过的代码-任何帮助都将非常感谢 public function index() { $this->load->view('lead'); $form_data = array( 'firstname' => json_decode($th

我有一个外部web表单,它将数据发布到我的控制器URL。数据以JSON字符串的形式发送

我需要做的是获取JSON字符串中的各个值,并将它们添加到我的数据库中。然而,我在获取发布的值和解码它们时遇到了一些困难

这是我尝试过的代码-任何帮助都将非常感谢

public function index() { 
    $this->load->view('lead');
    $form_data = array(
    'firstname' => json_decode($this->input->post('first_name')),
    'lastname' =>json_decode($this->input->post('last_name')),
    'number' =>json_decode($this->input->post('phone_number')),
    'email' =>json_decode($this->input->post('email')),
    'suburb' =>json_decode($this->input->post('suburb')),
    'state' =>json_decode($this->input->post('state')),
    'enquiry' =>json_decode($this->input->post('enquiry'))
);

// run insert model to write data to db

if ($this->AddLeadModel->SaveForm($form_data) == TRUE) // the information has therefore been successfully saved in the db { //Do something if successful }

不要对单个表单字段进行json_解码。 您必须使用json对传入字段进行json_解码, 然后使用数组数据再次填充表单

简单地说:您从字段填充到JS端的数组中,然后对json_进行编码以传输到服务器。现在需要扩展json以获取数组

// decode the incomning json 
// you get an array
$json_array = json_decode($this->input->post('the_form_field_name_of_your_json'));

// now assign the array data to the form
$form_data = array(
    'firstname' => $json_array['first_name'],
    ...
    ...
);
试试这个:

$json = file_get_contents('php://input');
$input_data = json_decode($json, TRUE);

将用一个例子解释(这很有效):

// Assuming the values you are getting via POST

$first_name = '{"first_name" : "Parag"}';
$last_name = '{"last_name" : "Tyagi"}';
$phone_number = '{"phone_number" : "9999999999"}';

$form_data['firstname'] = json_decode($first_name, TRUE)['first_name'];
$form_data['lastname'] = json_decode($last_name, TRUE)['last_name'];
$form_data['number'] = json_decode($phone_number, TRUE)['phone_number'];

print_r($form_data);
// Assuming the values you are getting via POST

$first_name = "{'first_name' : 'Parag'}";
$last_name = "{'last_name' : 'Tyagi'}";
$phone_number = "{'phone_number' : '9999999999'}";

$form_data['firstname'] = json_decode($first_name, TRUE)['first_name'];
$form_data['lastname'] = json_decode($last_name, TRUE)['last_name'];
$form_data['number'] = json_decode($phone_number, TRUE)['phone_number'];

print_r($form_data);

演示:

// Assuming the values you are getting via POST

$first_name = '{"first_name" : "Parag"}';
$last_name = '{"last_name" : "Tyagi"}';
$phone_number = '{"phone_number" : "9999999999"}';

$form_data['firstname'] = json_decode($first_name, TRUE)['first_name'];
$form_data['lastname'] = json_decode($last_name, TRUE)['last_name'];
$form_data['number'] = json_decode($phone_number, TRUE)['phone_number'];

print_r($form_data);
// Assuming the values you are getting via POST

$first_name = "{'first_name' : 'Parag'}";
$last_name = "{'last_name' : 'Tyagi'}";
$phone_number = "{'phone_number' : '9999999999'}";

$form_data['firstname'] = json_decode($first_name, TRUE)['first_name'];
$form_data['lastname'] = json_decode($last_name, TRUE)['last_name'];
$form_data['number'] = json_decode($phone_number, TRUE)['phone_number'];

print_r($form_data);


现在检查下面的内容(这不起作用):

// Assuming the values you are getting via POST

$first_name = '{"first_name" : "Parag"}';
$last_name = '{"last_name" : "Tyagi"}';
$phone_number = '{"phone_number" : "9999999999"}';

$form_data['firstname'] = json_decode($first_name, TRUE)['first_name'];
$form_data['lastname'] = json_decode($last_name, TRUE)['last_name'];
$form_data['number'] = json_decode($phone_number, TRUE)['phone_number'];

print_r($form_data);
// Assuming the values you are getting via POST

$first_name = "{'first_name' : 'Parag'}";
$last_name = "{'last_name' : 'Tyagi'}";
$phone_number = "{'phone_number' : '9999999999'}";

$form_data['firstname'] = json_decode($first_name, TRUE)['first_name'];
$form_data['lastname'] = json_decode($last_name, TRUE)['last_name'];
$form_data['number'] = json_decode($phone_number, TRUE)['phone_number'];

print_r($form_data);

演示:

// Assuming the values you are getting via POST

$first_name = '{"first_name" : "Parag"}';
$last_name = '{"last_name" : "Tyagi"}';
$phone_number = '{"phone_number" : "9999999999"}';

$form_data['firstname'] = json_decode($first_name, TRUE)['first_name'];
$form_data['lastname'] = json_decode($last_name, TRUE)['last_name'];
$form_data['number'] = json_decode($phone_number, TRUE)['phone_number'];

print_r($form_data);
// Assuming the values you are getting via POST

$first_name = "{'first_name' : 'Parag'}";
$last_name = "{'last_name' : 'Tyagi'}";
$phone_number = "{'phone_number' : '9999999999'}";

$form_data['firstname'] = json_decode($first_name, TRUE)['first_name'];
$form_data['lastname'] = json_decode($last_name, TRUE)['last_name'];
$form_data['number'] = json_decode($phone_number, TRUE)['phone_number'];

print_r($form_data);


说明:

// Assuming the values you are getting via POST

$first_name = '{"first_name" : "Parag"}';
$last_name = '{"last_name" : "Tyagi"}';
$phone_number = '{"phone_number" : "9999999999"}';

$form_data['firstname'] = json_decode($first_name, TRUE)['first_name'];
$form_data['lastname'] = json_decode($last_name, TRUE)['last_name'];
$form_data['number'] = json_decode($phone_number, TRUE)['phone_number'];

print_r($form_data);
// Assuming the values you are getting via POST

$first_name = "{'first_name' : 'Parag'}";
$last_name = "{'last_name' : 'Tyagi'}";
$phone_number = "{'phone_number' : '9999999999'}";

$form_data['firstname'] = json_decode($first_name, TRUE)['first_name'];
$form_data['lastname'] = json_decode($last_name, TRUE)['last_name'];
$form_data['number'] = json_decode($phone_number, TRUE)['phone_number'];

print_r($form_data);

如果您将帖子中的JSON传递给
JSON\u decode
,它将失败。有效的JSON字符串具有带引号的键。因此,请检查您的案例,看看您(通过POST)获得的JSON是什么格式。

两者之间的(细微)区别是使用双引号(
)和单引号(
)在JSON字符串中。是的。这可能是OP没有获得其解码值的原因之一。这可能会起作用,但我发现最好将表单序列化为JSON并传输该对象,而不是将每个表单字段作为JSON传输。关键字:“jquery post form serialized”-
var form_data=$(“#form”).serialize();
-.请检查JSON字符串格式。检查下面的答案。这就是我要找的,需要稍加修改,但效果很好。谢谢!