Php 从json数组中检索消息

Php 从json数组中检索消息,php,javascript,jquery,web,Php,Javascript,Jquery,Web,我想在用户注册时检查用户名的可用性。我正在前端工作。后端代码是给我的 这些是signup.php中的php代码 if (isset($_GET['chkusername'])) JSON_username_avail($_GET['chkusername']); function JSON_username_avail($username) { $ret = array(); print json_encode(validate_username($username, $ret

我想在用户注册时检查用户名的可用性。我正在前端工作。后端代码是给我的

这些是signup.php中的php代码

if (isset($_GET['chkusername']))
JSON_username_avail($_GET['chkusername']);

function JSON_username_avail($username) {
    $ret = array();
    print json_encode(validate_username($username, $ret));
    die();
}

function validate_username($username, & $retval_arr) {
    if ($username == NULL)
        $retval_arr['E_UserName'] = "NULL_USERNAME";
    else if (!username_validation($username))
        $retval_arr['E_UserName'] = "INVALID_USERNAME";
    else if (!data_not_exists("user", "username", $username, TRUE))
        $retval_arr['E_UserName'] = "USERNAME_EXISTS";
    return $retval_arr;
}

function username_validation($user) {
    $username = str_split($user);
    foreach($username as $i) {
        $i = ord($i);
        if ($i >= 48 and $i <= 57)
            continue;
        if ($i >= 65 and $i <= 90)
            continue;
        if ($i >= 97 and $i <= 122)
            continue;
        return FALSE;
    }
    return TRUE;
}


function data_not_exists($table, $field, $data, $CSense = FALSE) {
    $conn = connect_db();
    $data = filter_var($data, FILTER_SANITIZE_STRING);
    if ($CSense == TRUE)
        $sql = "SELECT * FROM ".$table.
    " WHERE ".$field.
    "='".$data.
    "'";
    else
        $sql = "SELECT * FROM ".$table.
    " WHERE upper(".$field.
    ")='".$data.
    "'";
    $result = mysqli_query($conn, $sql);

    switch ($result - > num_rows) {
    case 0:
        return TRUE;
        break;
    case 1:
        return FALSE;
        break;
    default:
        die("500 Internal Server Error: 122");

    } //switch

}
这里我得到x的值为[object]。 但是我需要将返回消息存储在变量x中。我想知道它是空\u用户名还是无效\u用户名或用户名\u存在。请帮帮我。

试试看

function(data){
  var x = data.E_UserName;

}, "json");
还可以根据将您的请求更改为“获取”

试试看

还可以根据将您的请求更改为“获取”


用户名已发布,但在PHP中,您尝试使用
$\u GET
访问它,请更改为:

if (isset($_POST['chkusername']))
JSON_username_avail($_POST['chkusername']);
此外,您的验证逻辑看起来也不正确,如果用户名有效且可用怎么办?我将添加一个else子句并设置一个
success
变量:

function JSON_username_avail($username) {
    $ret = array();
    print json_encode(validate_username($username));
    die();
}

function validate_username($username) {
    $retval_arr = array('success' => false, 'message' => '');

    if ($username == NULL)
        $retval_arr['message'] = "NULL_USERNAME";
    else if (!username_validation($username))
        $retval_arr['message'] = "INVALID_USERNAME";
    else if (!data_not_exists("user", "username", $username, TRUE))
        $retval_arr['msessage'] = "USERNAME_EXISTS";
    else
        $retval_arr['success'] = true;
    return $retval_arr;
}
还有ajax:

if(!data.success){
    console.log(data.message);
} else {
    // valid and available
}

用户名已发布,但在PHP中,您尝试使用
$\u GET
访问它,请更改为:

if (isset($_POST['chkusername']))
JSON_username_avail($_POST['chkusername']);
此外,您的验证逻辑看起来也不正确,如果用户名有效且可用怎么办?我将添加一个else子句并设置一个
success
变量:

function JSON_username_avail($username) {
    $ret = array();
    print json_encode(validate_username($username));
    die();
}

function validate_username($username) {
    $retval_arr = array('success' => false, 'message' => '');

    if ($username == NULL)
        $retval_arr['message'] = "NULL_USERNAME";
    else if (!username_validation($username))
        $retval_arr['message'] = "INVALID_USERNAME";
    else if (!data_not_exists("user", "username", $username, TRUE))
        $retval_arr['msessage'] = "USERNAME_EXISTS";
    else
        $retval_arr['success'] = true;
    return $retval_arr;
}
还有ajax:

if(!data.success){
    console.log(data.message);
} else {
    // valid and available
}

console.log(JSON.stringify(data))
,您能发布此代码的结果吗?{“模块”:“注册”,“键入”:0,“ECODE”:201}您确定signup.php指向您发布的php代码吗?因为它看起来不像大豆。此代码与其他代码块一起包含。顺便说一句,这似乎奏效了。当我输入一个已经注册的用户名时,它显示用户名_存在。但是当我输入一个新的用户名时,如果(isset($_POST['chkusername'])JSON_username\u avail($_POST['chkusername']),它会显示'undefined';在php代码中更改GET to POST效果很好。但是我可以在不更改php代码的情况下发送GET请求吗
console.log(JSON.stringify(data))
,您可以发布此代码的结果吗?{“module”:“signup”,“type”:0,“ECODE”:201}您确定signup.php指向您发布的php代码吗?因为它看起来不像大豆。此代码与其他代码块一起包含。顺便说一句,这似乎奏效了。当我输入一个已经注册的用户名时,它显示用户名_存在。但是当我输入一个新的用户名时,如果(isset($_POST['chkusername'])JSON_username\u avail($_POST['chkusername']),它会显示'undefined';在php代码中更改GET to POST效果很好。但是,我可以在不更改php代码fyi的情况下发送GET请求吗,
filter\u var($data,filter\u SANITIZE\u STRING)
不会停止sql注入fyi,
filter\u var($data,filter\u SANITIZE\u STRING)
不会停止sql注入当我输入一个已经注册的用户名时,它显示用户名存在。但当我输入一个新用户名时,它会显示“undefined”(未定义)。但是我可以在不修改php代码的情况下发送get请求吗?是的,只需将ajax更改为使用
$.get
,而不是
$.post
,这样看起来像
$.get(“signup.php”,{
当我输入一个已经注册的用户名时,它显示USERNAMe_存在。但是当我输入一个新用户名时,它显示'undefined',谢谢这似乎有效。但是我可以发送一个get请求而不修改php代码吗?是的,只需将ajax更改为使用
$。get
而不是
$。post
看起来像
$。get(“signup.php”,{