3

我尝试使用$this->post()以 json 格式通过邮件发送数据。例如,我无法得到任何结果$this->post('name')

这是代码:

<?php

require(APPPATH . '/libraries/REST_Controller.php');

class user_api extends REST_Controller {

    function user_post() {

                $user = array(
                    'id' => null,
                    'firstname' => $this->post('firstname'),
                    'lastname' => $this->post('lastname')
                );

                $result = $this->user_model->insert($user);
                if ($result) {
                    $this->response($result, 200); // 200 being the HTTP response code
                } else {
                    $this->response(NULL, 404);
                }
    }

}

?>

以 json 格式发送到链接的数据: http: //mydomain.com/myapplication/user_api/user

{"firstname":"test",
"lastname":"test"
}

数据库中没有数据,就像它无法从中获取数据一样$this->post('firstname')

任何想法 ????

4

10 回答 10

10

json数据你不能通过post方法得到你必须像这样使用

require(APPPATH . '/libraries/REST_Controller.php');

class user_api extends REST_Controller {

    function user_post() {

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

        $user = array(
            'id' => null,
            'firstname' => $params['firstname'],
            'lastname' => $params['lastname']
        );

        $result = $this->user_model->insert($user);
        if ($result) {
            $this->response($result, 200); // 200 being the HTTP response code
        } else {
            $this->response(NULL, 404);
        }
    }

}
于 2013-07-05T13:38:28.107 回答
4
//You should use

$array=array(
'firstName'   => $this->input->post("firstName"),
'lastName'   => $this->input->post("lastName")
);
于 2013-07-06T07:32:47.800 回答
1

我认为您没有使用正确的函数来获取您想要发布的数据的值,但您正试图进入$this->post('name')

您应该使用 CI 的方法来获取类似的值

$this->input->post('name');

或者

$this->input->get('name');


            $user = array(
                'id' => null,
                'firstname' => $this->input->post('firstname'),
                'lastname' => $this->input->post('lastname')
            );

你应该看看Input 类

于 2013-07-05T13:39:21.197 回答
0

使用 CodeIgniter,您可以像这样访问 post 变量

$this->input->post('variable_name');

另外,如果你有

$config['global_xss_filtering'] = TRUE;

在您的配置文件中,它将停止跨站点脚本,所以要小心

于 2013-07-05T14:00:08.760 回答
0

当您在 POST 的 URL 中传递参数时CI RestController,您需要使用 $this->input->get('id')而不是$this->get('id')[ie if id is pass in the url]。

$this->get('id')不适用于 POST URL 参数(例如:)http://abcd.xyz.com/get_stuff?id=1

虽然,$this->get('id')出于某种原因,它似乎与 GET 一起工作。

于 2014-08-06T13:46:51.530 回答
0

我在codeigniter中使用REST编写Web服务时遇到了同样的问题。

解决方案 ==> 您应该在标头请求中设置内容类型。

- 由于您以 json 格式发送帖子数据,因此您应该将 content-type 设置为 application/json

- 如果您在任何其他客户端中测试您的响应,请将内容类型设置为“application/x-www-form-urlencoded”

于 2015-05-12T11:05:11.537 回答
0
     $postdata = file_get_contents("php://input");
      header('Content-type: application/json');
      $obj = json_decode($postdata,true);
      $firstname=$obj['firstname'];
      $lastname=$obj['lastname']; and pass to an array
于 2016-04-27T11:42:38.290 回答
0

你应该这样编码:

$data=array{

'firstname' => $this->input->('firstname'),
'email' => $this->input->post('email')
}

$this->user_model->update($data);*emphasized text*
于 2018-01-08T05:46:48.433 回答
0

在 REST API

=> 如果您想使用 get 方法从服务器获取数据,请使用以下代码

$user = json_decode(
    file_get_contents('http://example.com/index.php/api/user/id/1/format/json')
);

echo $user->name;

=> 如果您想向服务器插入/更新数据,那么您需要使用如下表单操作

<form method="post" id="validateFrm" action="http://example.com/index.php/api/create">
    <div class="row">
        <label>Name*</label>
        <input type="text" class="input-field" name="name" id="name" /> 
    </div>
    <div class="row">
         <label>Email</label>
         <input type="text" class="input-field" name="email" /> 
    </div>
    <div class="row last-row">
        <input type="submit" name="submit" value="submit">
    </div>
</form>

现在您可以在控制器/方法中使用所有表单元素,例如

$name = $this->post('name');
$email = $this->post('email');

享受!!

于 2016-05-26T11:14:26.357 回答
0

这里存在两种情况。如果您从服务器获取数据,则需要设置格式:

[对于 REST 客户端]

$this->rest->format('application/json');

[适用于 Android Volley]

public Map<String, String> getHeaders() throws AuthFailureError
headers.put("Content-Type", "application/json; charset=UTF-8");
}

如果您将数据从客户端发送到服务器,则需要设置格式:[FOR REST Client]

$this->rest->format('application/x-www-form-urlencoded');

[适用于 Android Volley]

public Map<String, String> getHeaders() throws AuthFailureError
headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
}
于 2016-12-14T07:05:54.473 回答