为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
蛊毒传说 2021-06-18 18:00:54
我正在使用 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;};使用表单时不起作用。任何我不知道的建议或错误?
查看完整描述

2 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

我遇到了类似“使用表单而不是 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;


查看完整回答
反对 回复 2021-06-19
  • 2 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信