serializers - The data passed by ajax is a serialized string, why does php accept it as an array?
伊谢尔伦
伊谢尔伦 2017-05-16 13:00:09
0
4
985

Front-end code:
if(register_flag){ //The registration information is correct

        //alert(typeof($('.register-form').serialize()));
        //序列化的结果:name=hesisi&account=15223306809&verification-code=2333&password=hss123456&confirm-pwd=hss123456
        $.ajax({
            type : 'POST',
            url : 'php/register.php',
            data : $('.register-form').serialize(),  //序列化的字符串
            success : function(data){
                //window.location.href = "index.html";
            },
            error : function(){
                //错误信息处理
                console.log();
            }

        });            

    }

php code
require 'config.php';


$data =$_POST;
//name=hesisi&account=15223306809&verification-code=2333&password=hss123456&confirm-pwd=hss123456
$arr = explode("&",$data);
$name_arr = explode("=",$arr[0]);
$account_arr = explode("=",$arr[1]);
$verifcode_arr = explode("=",$arr[2]);
$password_arr = explode("=",$arr[3]);
$confirmpwd_arr = explode("=",$arr[4]);

$name = $name_arr[1];
$account = $account_arr[1];
$verifcode = $verifcode_arr[1];
$password = $password_arr[1];
$confirmpwd = $confirmpwd_arr[1];

$mobile_code = $_SESSION['mobile_code'];

$query = "SELECT * from user WHERE user_account=".$account;
$result = mysqli_query($query);

if($verifcode != $mobile_code){//手机验证码错误
    exit("手机验证码错误!");
    return;
}else if($result){
    exit("改手机号已经注册!");
    return;
}else{
    $insert = "INSERT INTO user(user_name,password,user_account) VALUES(".$name.",".$password.",".$account.")";
    mysqli_query($insert);
    exit("注册成功!");
}

The error reported here is that the second parameter of explode() should be of string type, but what I used is array type. The data passed by ajax is of string type. Why does PHP accept the array type through $_POST[]? data has never written php before, please give me some advice, thank you~

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

reply all(4)
给我你的怀抱

The parameter you receive is an array,

$data =$_POST;
其实就是下面的数组
$data['name']='hesisi';
$data['account']='15223306809';
$data['verification-code']='2333';
...
并不是name=hesisi&account=15223306809&verification-code=2333&password=hss123456&confirm-pwd=hss123456,
你这个data就是数组,不是字符串,你不能去explode去切割
習慣沉默

ajax adds parameter Content-Type: 'text/plain'

If php accepts it, don’t use $_POST, change it to file_get_contents('php://input')

迷茫

With ajax, no matter whether the data you pass to the backend is json or serialized string, it will be parsed into an array form when it reaches the backend.
So

$data =$_POST;

//$data 就是个数组啊 
淡淡烟草味

I want to visit the original poster, please look at the url address www.baidu.com?search=keyword&s=key&time=143032423

Do you need to use $_GET when receiving in the background? It is still an array. The key is how $_GET and $_POST work

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template