PC客户端POST如下json数据至后台,json result数组中的数据条目不固定,有时是1组,有时是3组,可能更多。
如:json result 数组中1组数据
{
"result" : [
{
"old_ip" : "61.141.251.21",
"new_ip" : "61.141.251.22",
"urldata" : "img1.taobao.com\r",
"normal" : "100",
"error" : "102",
"agent" : "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)\r"
}
]
}
如:json result 数组中3组数据
{
"result" : [
{
"old_ip" : "61.141.251.23",
"new_ip" : "61.141.251.24",
"urldata" : "img1.taobao.com\r",
"normal" : "100",
"error" : "102",
"agent" : "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)\r"
},
{
"old_ip" : "61.141.251.25",
"new_ip" : "61.141.251.26",
"urldata" : "img2.taobao.com\r",
"normal" : "100",
"error" : "102",
"agent" : "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)\r"
},
{
"old_ip" : "61.141.251.27",
"new_ip" : "61.141.251.28",
"urldata" : "img3.taobao.com\r",
"normal" : "100",
"error" : "102",
"agent" : "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)\r"
}
]
}
数据表:
CREATE TABLE `result` (
`id` int(10) unsigned NOT NULL auto_increment,
`old_ip` varchar(100) NOT NULL,
`new_ip` varchar(100) NOT NULL,
`urldata` varchar(100) NOT NULL,
`normal` varchar(10) NOT NULL,
`error` varchar(10) NOT NULL,
`agent` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
后台接收PHP代码:
$result=$_POST["result"];
$arr=json_decode($result,true);
?>
请教各位专家,如何使用foreach取出$arr中的数据,并写入数据库(需考虑result数据条目不固定的问题),格式如下,求完整代码!合适可加分!
id old_ip new_ip urldata normal error agent
1 61.141.251.21 61.141.251.22 img1.taobao.com 100 102 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)
2 61.141.251.23 61.141.251.24 img2.taobao.com 100 102 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)
print_r($arr); 是什么结果
$result=$_POST["result"]; $arr=json_decode($result,true);$arr=$arr['result'];if($arr){ foreach($arr as $val){ $val = array_map('mysql_real_escape_string',$val); $str = "'".implode("','", $val)."'"; $sqlstr = "insert into result(old_ip,new_ip,urldata,normal,error,agent) values(".$str.")"; echo $sqlstr.'<br>'; mysql_query($sqlstr) or die(mysql_error()); }}
太感谢fdipzone版主了,还有一个问题,请指点:
result数据表增加user_ip列,增加后的表结构如下,但user_ip字段数据不是从json result数组中获取,是从php后台变量$user_ip中获取。
问题:如何在使用foreach取出$arr中的数据,并写入result数据表的时候,把$user_ip变量中的数据也同时写入result数据表中。
增加后的表结构:
id old_ip new_ip urldata normal error agent user_ip
$user_ip=get_userip(); //通过get_userip()函数获取,如:111.23.11.13
$arr=json_decode($result,true);
$arr=$arr['result'];
if($arr){
foreach($arr as $val){
$val = array_map('mysql_real_escape_string',$val);
$str = "'".implode("','", $val)."'";
$sqlstr = "insert into result(old_ip,new_ip,urldata,normal,error,agent) values(".$str.")";
$sqlstr = "insert into result(user_ip) values("$user_ip")"; //尝试这样之后,php报错了
echo $sqlstr.'
';
mysql_query($sqlstr) or die(mysql_error());
}
}
$user_ip=get_userip();$result=$_POST["result"]; $arr=json_decode($result,true);$arr=$arr['result']; if($arr){ foreach($arr as $val){ $val['user_ip'] = $user_ip; $val = array_map('mysql_real_escape_string',$val); $str = "'".implode("','", $val)."'"; $sqlstr = "insert into result(old_ip,new_ip,urldata,normal,error,agent,user_ip) values(".$str.")"; echo $sqlstr.'<br>'; mysql_query($sqlstr) or die(mysql_error()); }}
谢谢fdipzone版主的帮助,问题解决了,结帖。