猿问

使用表单而不是 Angular http 客户端时,对 PHP 的 POST 请求不会检索任何数据

我正在使用 angular http 客户端与数据库交互,一切正常,但是当我尝试使用表单将数据发布到同一个链接时,我发现数据未定义。


我试图编码、解码值,因为我知道在发出任何 POST 请求和发送数据之前,我需要执行 angular.toJSON 方法,但这不起作用。


这是我的 index.php,我从表单收到一个 POST 请求。


if (empty($action)) {

    if ((($_SERVER['REQUEST_METHOD'] == 'POST')) && 

             (strpos($_SERVER['CONTENT_TYPE'], 'application/json') !== false)) {


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


        $action = isset($input['action']) ? $input['action'] : null;

        $subject = isset($input['subject']) ? $input['subject'] : null;

        $data = isset($input['data']) ? $input['data'] : null;

    }


case 'createNote':

        // if I die() here, it prints the die()

        if(!empty($data)) {

            // if I die() here, $data is undefined.

            $data = json_decode($data);


            $user = $data[0];

            $comment = $data[1];

            $film_id = $data[2];

            $lastupdated = date("Y-m-d H:i:s");



            $sql = "INSERT INTO nfc_note (user, film_id, comment, lastupdated) 

                    VALUES (:user, :film_id, :comment, :lastupdated)";

        }

        break;

我用来发送 POST 请求的表单


<form action="index.php" method="POST">

    <input type="hidden" name="action" value="create">

    <input type="hidden" name="subject" value="note">

    <input type="hidden" name="data" value="<?php echo "['username','content', 1]"; ?>">


    <input type="submit" value="Submit">

</form>

如上所述,当我使用 angular 的 http 并传递如下参数时,它会起作用:


this.createNote = function (data) {


    var defer = $q.defer(),

    data = {

        action: "create",

        subject: "note",

        data: angular.toJson(data)

    };

    $http

        .post(urlBase, data)

        .success(function (response) {

            defer.resolve({

                data: response.data

            });

        })

        .error(function (error) {

            defer.reject(error);

        });


    return defer.promise;

};


使用表单时不起作用。任何我不知道的建议或错误?


蛊毒传说
浏览 120回答 2
2回答

皈依舞

我遇到了类似“使用表单而不是 angular http 客户端时,对 PHP 的 POST 请求不会检索任何数据”之类的问题。通常使用 php 流来检测从 Angular 到 PHP 的数据$data = file_get_contents('php://input');但是当使用 fortify 扫描代码时,它会检测到 xss 漏洞,我必须更改方法。以这种方式解决了这个问题,我希望对某人有所帮助。:-)角度:$http({method: 'POST',url: '<?php echo base_url(); ?>admin/saveTemplateEmail',headers: {'Content-Type': 'application/json'},data: {templateEmail:$scope.selectedTipology}}).then(function (response) {.....}PHP:$data = file_get_contents('php://input');$post_val = json_decode($data, true);我把它改成了以下角度:$http({method: 'POST',url: '<?php echo base_url(); ?>admin/saveTemplateEmail',headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},data: jQuery.param({templateEmail:$scope.selectedTipology})}).then(function (response) {.....}PHP:$post_val = $_POST;
随时随地看视频慕课网APP
我要回答