php在接收前端传入的数据时定义的类型

331 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 8 天,点击查看活动详情 如果是 post 接收数据,那么前端传递数据类型一般是两种,一种是:application/x-www.urlencoded ,用这种方式传递数据时,前端类型可以是array、josn、string 等。后端接收就是字符串。

除了上边这一种,还有一种前端传递数据是:form-data ,form-data

两者区别:application/x-www-urlencodeed 和form-data 对数据传递的处理不一样,form-data更重视数据的方式,它采用的是二进制,所以不会存在多余的数据。适合大文本数据的传输,例如文件等。

php直接用$_POST["参数名"]

情况1:参数是普通的字符串

其实这里的接收不到数据,是指小程序访问时接收不到。

php代码:

    $postData=$_POST["a"]; 
    echo $postData;

apipost工具访问:是可以接收到数据,并且可以返回数据

小程序代码:接收不到数据,所以返回值为空


		wx.request({
        url: 'http://localhost/api/demo.php',
        method:"POST",
        data:{
          "a":1
        },
        header:{
          "content-type":"application/x-www-urlencoded"
        },
        success:(res)=>{
          console.log("返回的数据是:::::>>>>>>",res);
        }
      })

        

情况2:参数是数组

代码与上边代码一样,只是参数改变。

apipost工具访问的结果:

使用小程序访问:

第二种情况的结论:api工具返回的是数组形式,但是小程序返回的是字符串是有区别的。

所以,修改一下php代码,查看一下通过小程序访问和api工具访问有哪些不同的地方:

php代码如下:

    $postData=$_POST["a"]; 
    if(is_array($postData)){
        echo "参数为数组";
    }
    if(is_string($postData)){
        echo "参数为字符串";
    }

    die;

api工具打印的是:

小程序打印是:

如果参数是数组php转义后的结果

$postData=$_POST["a"]; 
    if(is_array($postData)){
        echo "参数为数组";
    }
    if(is_string($postData)){
        echo "参数为字符串";
    }
    //使用转义方法转义后
    $postList=json_decode($postData);
    var_dump($postList);


    
    die;

api工具打印的结果:

但是小程序打印的结果是:

所以得出一个结论是:小程序如果参数为数组,则不能够直接写数组,而是要做处理,我这里的处理是转成字符串后进行提交。

小程序修改代码如下:

wx.request({
        url: 'http://localhost/api/demo.php',
        header:{
          "content-type":"application/x-www-form-urlencoded"
        },
        method:"POST",
        data:{
          a:JSON.stringify(["张飞","关羽"])      //刚修改的代码
        },


        success:(res)=>{
          console.log("返回的数据是:::::>>>>>>",res);
        }
      })

返回的结果:

打印的结果和api工具是一样了。

php如何处理数组对象呢,php代码如下:

    $postData=$_POST["a"]; 
    // if(is_array($postData)){
    //     echo "参数为数组";
    // }
    // if(is_string($postData)){
    //     echo "参数为字符串";
    // }
    //使用转义方法转义后
    $postList=json_decode($postData);
    
    foreach($postList as $value){
        var_dump($value);
    }
  
    die;

小程序结果和api工具结果都是正常的,php是可以读取到内容的。

情况3:参数为数组,数组里边嵌套对象

php代码不变,小程序代码如下:

wx.request({
        url'http://localhost/api/demo.php',
        header:{
          "content-type":"application/x-www-form-urlencoded"
        },
        method:"POST",
        data:{
          a:JSON.stringify([{id:1,name:"郑飞"},{id:2,name:"关羽"}])//修改位置
        },
        success:(res)=>{
          console.log("返回的数据是:::::>>>>>>",res);
        }
      })

返回结果如下截图,得出结果是:对象会转变成一个关联数组

api工具参数的改变后,获取的结果如下:

验证是否是关联数组

修改php代码为如下:


    $postData=$_POST["a"]; 
    //使用转义方法转义后
    $postList=json_decode($postData);
    
    //$value是一个关联数组
    foreach($postList as $value){
        echo $value->id;
        echo $value->name;
    }
    die;

测试的结果:

小程序:复合预期

api工具:复合预期: