2014-09-10 1 views
1

У меня есть внешняя веб-форма, которая отправляет данные на мой адрес контроллера. Данные отправляются в строке JSON.Получить данные JSON из внешней формы в codeigniter

Что мне нужно сделать, это получить отдельные значения в строке 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 } 
+0

Просьба проверить формат строки JSON. Проверьте ниже ответ. –

ответ

0

Не json_decode отдельные поля формы. Вы должны json_decode входящее поле с json вместо этого, , затем используйте данные массива, чтобы заполнить форму снова.

Простыми словами: вы из полей были заполнены массивом на стороне JS, а затем json_encoded для передачи на сервер. Теперь вам нужно развернуть 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'], 
    ... 
    ... 
); 
+0

Это то, что я искал, нуждался в некоторых модификациях, но работал как шарм. Благодаря! – easye

+0

Добро пожаловать :) –

0

попробовать это:

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

Поясню на примере (это работает):

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


DEMO:

http://3v4l.org/dmIrr


Теперь проверьте ниже (это не будет работать):

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


DEMO:

http://3v4l.org/MeJoU


Объяснение:

Если вы передадите JSON в свой пост до json_decode, он потерпит неудачу. Действительные строки JSON имеют цитируемые ключи. Следовательно, проверьте свое дело и посмотрите, в каком формате вы получаете JSON (через POST).

+0

(тонкая) разница между двумя - использование двойных кавычек ('' ') и одинарных кавычек (' '') в строках JSON. – Matthew

+0

Да точно. Это может быть одной из причин OP12 не получает свое декодированное значение. –

+0

Это может сработать, но мне лучше сериализовать форму json и перенести этот объект вместо передачи каждого поля формы в json. Ключевые слова: «jquery post form serialized» - 'var form_data = $ ("# form"). serialize(); '- http://api.jquery.com/serializearray/. –

Смежные вопросы