php中的json对象未被读取

Posted

技术标签:

【中文标题】php中的json对象未被读取【英文标题】:json object in php not being read 【发布时间】:2015-07-21 13:33:09 【问题描述】:

我想将usernamepassword 传递给一个php 脚本并签入数据库。在客户端,我使用以下脚本创建json object 并将其发布到 php 文件中。

var myobj = ;
myobj["usrname"]= $( "#customer option:selected" ).text();
myobj["usrpass"]= $("#psw").val();

var myjson = JSON.stringify(myobj);

$.ajax(
method: "POST",
url: "checkpass.php",
data: myjson
)
.done(function( msg ) 
    alert( msg );
);

在服务器端,当我看到firebug 时,帖子被传递为

参数application/x-www-form-urlencoded不排序 "用户名":"XXXXXX... JSON

用户名 “XX”

用户密码 “去做就对了” 资源 "usrname":"XXX","usrpass":"justdoit"

然而,当我运行 php 脚本来检查查询时,它会返回错误

$usrname = $_POST['usrname'];
$usrpass = $_POST['usrpass'];

$sql = "select count(*) from glusers where EmpName='$usrname' and EmpPass='$usrpass'";
$result = $conn->query($sql);

if($result >0)
$output = 'Success';
 else

$output = 'fail';

我已经尝试了所有帖子,但无法使其正常工作。

提前致谢。

问候,

【问题讨论】:

您遇到的错误是什么? $usrname 和 $usrpass 中没有值。因此,mysqli 查询执行但没有任何结果。 对于不正确的密码,它也会在脚本执行时返回成功输出 请发布console.log(myjson);的输出 警告:log() 期望参数 1 为双精度,字符串在 /home/arjunmb/airtec-intl.com/checkpass 中给出。 php上线5成功 【参考方案1】:

为了让 ajax 有一个成功事件,回显并终止该语句

Js 文件

 var myobj = ;

        myobj["usrname"] = 'myUsername';

        myobj["usrpass"] = 'myPassword';



        $.ajax(
            type: "post",
            url: "url",
            dataType: "json",
            data: post_data: myobj,
            contentType: "application/x-www-form-urlencoded",
            success: function (responseData) 
                console.log(responseData);
            ,
            error: function (errorThrown) 
                console.log(errorThrown);
            
        );

PHP 动作文件

           /** if we print post we will get the following array * */
//print_r($_Post);
//die()
//Array
//(
//    [post_data] => Array
//        (
//            [usrname] => myUsername
//            [usrpass] => myPassword
//        )
//
//)

if (isset($_Post['post_data'])) 
    $myPost = $_Post['post_data'];
    $usrname = $myPost['usrname'];
    $usrpass = $myPost['usrpass'];

    $sql = "select count(*) from glusers where EmpName='$usrname' and EmpPass='$usrpass'";
    $result = $conn->query($sql);
    $num_row = $result->num_rows;

    if ($num_row > 0) 
        $output = 'Success';
     else 
        $output = 'fail';
    
    echo json_encode($output);
    die();

【讨论】:

没有用。虽然我输入了错误的密码,但它仍然成功返回 $output。 但是$result,不包含实际的计数,如果查询运行成功,它会返回true,所以$result=1并且大于0,来获取计数使用@ 987654324@ 它将返回成功,因为使用 $result 时,我们正在检查查询是否成功,如果您想计算返回的行数,请检查我编辑的答案 谢谢。得到那个错误。但它仍然存在,因为 json 对象也没有被解析为正确的输入 你是从表单中传递文本字段吗,我编辑了关于如何传递字段的答案@ArjunBhandari【参考方案2】:

试试这个: 在js文件中:

$(document).on("ready", function()

            // Create an object using an object literal.
            var ourObj = ;

            // Create a string member called "data" and give it a string.
            // Also create an array of simple object literals for our object.
            ourObj.data = "Some Data Points";
            ourObj.arPoints = ['x':1, 'y': 2,'x': 2.3, 'y': 3.3,'x': -1, 'y': -4];


            var savedata = JSON.stringify(ourObj)
            $.ajax(
                type:"POST",
                url:"Users.php",
                data: "points" : JSON.stringify(ourObj),
               success: function(data) 
                    // Do something with data that came back. 
                    alert(data);
               

            )
        ); 

在 PHP 文件中:

if (isset($_POST["points"])) 
$points = json_decode($_POST["points"]);


echo "Data is: " . $points->data . "<br>";
echo "Point 1: " . $points->arPoints[0]->x . ", " . $points->arPoints[0]->y;

【讨论】:

【参考方案3】:

试试这个:

var myobj = '
usrname:'+$( "#customer option:selected" ).text()+',
usrpass:'+$("#psw").val()+'
';

var myobj = ;
myobj.usrname= $( "#customer option:selected" ).text();
myobj.usrpass= $("#psw").val();

【讨论】:

同样的问题,无论我使用的是正确还是错误的密码。我也将其修改为 $result = $result->num_rows 然后检查 $result > 0【参考方案4】:

使用Json2库如下,

var myobj = ;
myobj["usrname"]= $( "#customer option:selected" ).text();
myobj["usrpass"]= $("#psw").val();

var myjson = JSON2.stringify(myobj);

$.ajax(
 method: "POST",
 url: "checkpass.php",
 data: myjson
)
.done(function( msg ) 
  alert( msg );
);

【讨论】:

【参考方案5】:

实际上,您的 php 代码是无效的,因为您传递的是 json day 而不是名称值对,因此您无法从 $_POST['username'] 获取它。您需要获取整个帖子数据并像这样对其进行解码。

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

现在 $data 是用户名和密码的字典数组。还要在传递给查询之前清理您的数据以避免 sql 注入。

【讨论】:

以上是关于php中的json对象未被读取的主要内容,如果未能解决你的问题,请参考以下文章

从 $_POST 中的 json 读取关联数组

如何使用与 NewtonSoft (JSON.Net) 组件中的 JSON 匹配的 Swift 类从/向 JSON 读取/写入对象数组?

json对象

如何在JSON.NET中读取json对象值中的long值数组

如何从 Angular 2 中的 JSON 对象中读取想要的数据?

使用 Pyspark 将每个 json 对象读取为 Dataframe 中的单行?