gpt4 book ai didi

php - $_POST var not populated instead $HTTP_RAW_POST_DATA 获取数据

转载 作者:太空宇宙 更新时间:2023-11-04 16:23:13 24 4
gpt4 key购买 nike

我在 javascript 中使用此函数与服务器 php 脚本通信:

    ajax = function( url, ready, json=null, method = 'post') {
var response, request = xhr();
request.open( method, url, true );
request.onreadystatechange = function() {
if( request.readyState == 4 ) {
if( typeof ready == 'function' ){
return ready( request );
} else { return JSON.parse( request.responseText );}
}
}
if(json !== null){
request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
return request.send( JSON.stringify( json ) );
}else { return request.send( null );}
}

在使用post 方法 打开连接后,我创建了XMLHttpRequest。我还设置了 setRequestHeader 来解析 JSON: ("Content-Type", "application/json;charset=UTF-8"); 我用这个函数来收集html 表单 中的数据:

formToValues = function (id) {
var i, values = {}, form = document.getElementById(id);
//var fields = form.querySelectorAll('input,textarea,select'),
for (i = 0; i < form.length ;i++) {
if( form.elements[i].name !== "" ){
values[form.elements[i].name] = form.elements[i].value;
}
}
return values;
}


ajax('a.php', function(response){
console.log(response);
}, formToValues("regForm") );

这也是我的 html 表单:

<form id="regForm" action="javascript:;" method="post" />
<p>
<label for="name">Name</label>
<input type="text" name="name" value="xhr" />

<label for="email">Email:</label>
<input type="email" name="email" value="ro@ew.gq" />

<label for="password">Password:</label>
<input type="password" name="password" value="pass" />

<input type="button" value="Search" />
</p>

现在我在 php 脚本中接收数据时遇到了一些小问题:a.php:

<?php
var_dump( $GLOBALS );
$ar= array( "a"=>2,"b"=>3, "c"=>json_decode( $_REQUEST['params'] ));
echo json_encode($ar);
?>

似乎 php 将我从 javascrip 发送的数据作为字符串存储在 HTTP_RAW_POST_DATA

["HTTP_RAW_POST_DATA"]=>
string(51) "{"name":"xhr","email":"ro@ew.gq","password":"pass"}"

    "array(7) {
["GLOBALS"]=>
array(7) {
["GLOBALS"]=>
*RECURSION*
["HTTP_RAW_POST_DATA"]=>
string(51) "{"name":"xhr","email":"ro@ew.gq","password":"pass"}"
["_POST"]=>
array(0) {
}
["_GET"]=>
array(0) {
}
["_COOKIE"]=>
array(0) {
}
["_FILES"]=>
array(0) {
}
["_REQUEST"]=>
array(0) {
}
}

现在我可以使用 php://input 获取数据,这不是问题,但我担心安全问题,而且 dos'n sems 没问题,还有一件事需要考虑:从 php 版本 5.6.0 开始。 $HTTP_RAW_POST_DATA — 原始 POST 数据已弃用~那我该怎么办?谢谢

最佳答案

当请求内容类型为 application/json 时,PHP 不会填充 $_POST 超全局(仅 application/x-www-form-urlencodedmultipart/表单数据).

建议使用json_decode()php://input

关于php - $_POST var not populated instead $HTTP_RAW_POST_DATA 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27583644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com