使用json传输数组实例
client.php
<?php //遍历数组元素,并将元素转码
function array_iconv($data, $in_charset='GBK', $out_charset='UTF-8'){
if (!is_array($data)){
$output = iconv($in_charset, $out_charset, $data);
}elseif(count($data) === count($data, 1)){//判断是否是二维数组
foreach($data as $key => $value){
$output[$key] = iconv($in_charset, $out_charset, $value);
}
}else{
eval_r('$output = '.iconv($in_charset, $out_charset, var_export($data, TRUE)).';');
}
return $output;
} $arr = array("username"=>'aaa',"pwd"=>'47bce5c74f589f4867dbd57e9ca9f808','sex'=>'男');
$arr['_e_'] = 'pwd,sex,username'; //这个参数中存的是randkey里面数组value值的排序 //获得按'_e_'排序的临时数组,这是为了得到randkey
$keys = explode(",",$arr['_e_']);
$tempArr = array();
for($i=0;$i<count($arr)-1;$i++){
$tempArr["$keys[$i]"] = $arr["$keys[$i]"];
}
$str='';
foreach ($tempArr as $key=>$value){
$str .= $value;
}
$randkey = md5($str.'123abc');
$arr['randkey'] = $randkey; $arr = array_iconv($arr);
$arr = array_map('urlencode',$arr); //可使用http_build_query()函数替代
$data = json_encode($arr); $url = "http://localhost/zchnqi/member/receive.php?json=$data"; /****get方式传递数据******
//初始化
$ch = curl_init();
//设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, "$url");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
//执行并获取HTML文档内容
$output = curl_exec($ch);
//释放curl句柄
curl_close($ch);
//打印获得的数据
print_r($output);
*/ //***post方式传输数据******
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// post数据
curl_setopt($ch, CURLOPT_POST, 1);
// post的变量
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
curl_close($ch);
//打印获得的数据
print_r($output); $res=unserialize($output);
var_dump($res);
if ($res['stat']=='1') {
echo 'right';
}else{
echo 'error';
} ?>
server.php
<?php require_once(dirname(__FILE__)."/config.php"); //遍历数组元素,并将元素转码
function array_iconv($data, $in_charset='GBK', $out_charset='UTF-8'){
if (!is_array($data)){
$output = iconv($in_charset, $out_charset, $data);
}elseif(count($data) === count($data, 1)){//判断是否是二维数组
foreach($data as $key => $value){
$output[$key] = iconv($in_charset, $out_charset, $value);
}
}else{
eval_r('$output = '.iconv($in_charset, $out_charset, var_export($data, TRUE)).';');
}
return $output;
} if($_GET["json"]){ //数据传递为get方式
$arr = json_decode($_GET["json"],true);
}else{ //数据传递为post方式 或者使用$_SERVER['REQUEST_METHOD'] == 'POST',判断提交的数据是否是POST方式传来的
$arr = file_get_contents("php://input"); //若$arr=$_POST;返回null
$arr = json_decode($arr,true);
//var_dump($arr);
}
$arr = array_map('urldecode',$arr);
$arr = array_iconv($arr,'utf-8','gbk');
$str = $arr['_e_']; //获得按'_e_'排序的临时数组,这是为了得到randkey
$keys = explode(",",$str);
$tempArr = array();
for($i=0;$i<count($arr)-2;$i++){
$tempArr["$keys[$i]"] = $arr["$keys[$i]"];
} $str='';
foreach ($tempArr as $key=>$value){
$str .= $value;
}
$randkey = md5($str.'123abc'); if($randkey == $arr['randkey']){
$son = $dsql->GetOne("SELECT * FROM #@__member WHERE user='$arr[username]' ");
if($son[pwd] == $arr[pwd]){
//将数组序列化后输出,客户端反序列化后还原为数组;也可以使用json_encode()输出,客户端使用josn_decode()获得数组
echo serialize($son);
}else{
echo serialize('password error'); //这边序列化是为了防止客户端反序列化该字符串不标准而报错
}
}else{
echo serialize('vertiy code error');
} ?>
使用json传输数组实例的更多相关文章
- JSON传输数组的基本操作
目标JSON结果如下: 生成JSON的的过程如下: Document document; Document::AllocatorType& allocator = document.GetAl ...
- 一个Json、数组、Dictionary转换和数组对比的C#实例
最近做了一个程序,里面一段代码用到Json.数组.Dictionary转换和数组对比的一些知识,虽然在实际碰到类似问题时候有更好的方法,但这就当是一次基础知识的回顾,现在分享一下. 先介绍下要实现的业 ...
- Android native进程间通信实例-binder篇之——用parcel传输数组
和之前稍微不同,这次要稍微分析一下 Parce.cpp 和 android_os_Parcel.cp p的源码,为的是能够掌握调试技巧,后续传输其它类型数据就能举一反三了! 1. 代码共享 这次 ...
- AJSX 传输数组
如果要利用ajax传输数组,或者传输多个(不知道有多少个)class的某一属性的值,例如: 要将这三个数据传入php编辑界面,图片显示有三个数据,但实际上,数据的多少是由数据库所导出的数据 决定的.如 ...
- java http post/get 服务端和客户端实现json传输
注:本文来源于<java http post/get 服务端和客户端实现json传输> 最近需要写http post接口所以学习下. 总的还是不难直接上源码! PostHttpClient ...
- json传输二进制的方案【转】
本文转自:http://wiyi.org/binary-to-string.html json 是一种很简洁的协议,但可惜的是,它只能传递基本的数型(int,long,string等),但不能传递by ...
- [Swift通天遁地]四、网络和线程-(11)将服务器返回的JSON映射为实例对象
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- SQL Server 2016 JSON原生支持实例说明
背景 Microsoft SQL Server 对于数据平台的开发者来说越来越友好.比如已经原生支持XML很多年了,在这个趋势下,如今也能在SQLServer2016中使用内置的JSON.尤其对于一些 ...
- json在php中的使用之如何转换json为数组
<?php $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}' ...
随机推荐
- Cooperating sequential processes》,这篇论文提出了大名鼎鼎的概念信号量,Java里面用于线程同步的wait/notify也是信号量的一种实现。
闲话高并发的那些神话,看京东架构师如何把它拉下神坛 https://mp.weixin.qq.com/s/lAqn8CfSRta9iSvOR1Le6w
- NEU 1685: All Pair Shortest Path
题目描述 Bobo has a directed graph G with n vertex labeled by 1,2,3,..n. Let D(i,j) be the number of edg ...
- js运行机制及异步编程(一)
相信大家在面试的过程中经常遇到查看执行顺序的问题,如setTimeout,promise,async await等等,各种组合,是不是感觉头都要晕掉了,其实这些问题最终还是考察大家对js的运行机制是否 ...
- YTU 2424: C语言习题 字符串比较
2424: C语言习题 字符串比较 时间限制: 1 Sec 内存限制: 128 MB 提交: 1042 解决: 613 题目描述 写一函数,实现两个字符串的比较.即自己写一个strcmp函数,函数 ...
- dedecms文章内页获取缩略图的调用标签
点评:文章内容页缩略图的调用,图片集内容页缩略图的调用很容易混淆,内页想调用缩略图用[filed:picname/]来实现是错误的 文章内容页缩略图的调用,图片集内容页缩略图的调用,相信大家都想找这个 ...
- UVA-10391(字符串检索)
题意: 给定一个字典,要求找出所有的复合词; 思路: 用map把词都存起来,再把词拆开看是否是出现过的单词; AC代码: #include <bits/stdc++.h> #include ...
- AFNetworking源码的学习
忽略编译警告 AFNetworking源码中常常会出现忽略警告的代码,如下: 1 2 3 4 #pragma clang diagnostic push #pragma clang diagnosti ...
- BZOJ_2186_[Sdoi2008]沙拉公主的困惑_欧拉函数
BZOJ_2186_[Sdoi2008]沙拉公主的困惑_欧拉函数 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行 ...
- 【POJ 2478】 Farey Sequence
[题目链接] 点击打开链接 [算法] 不难看出,ans = phi(2) + phi(3) + .... + phi(n-1) + phi(n) 线性筛筛出欧拉函数,预处理前缀和,即可 [代码] #i ...
- Backbone.js之model篇(一)
Backbone.js之model篇(一) Backbone 是一个前端 JS 代码 MVC 框架,它不可取代 Jquery,不可取代现有的 template 库.而是和这些结合起来构建复杂的 web ...