PC クライアントは次の JSON データをバックグラウンドに POST します。JSON 結果配列のデータ エントリは固定されておらず、グループが 1 つである場合もあれば、グループが 3 つある場合もあり、さらに多くなる場合もあります。
例: json 結果配列内の 1 セットのデータ
{
"result" : [
"old_ip" : "61.141.251.21",
"new_ip" : "61 .141.251.22",
"urldata" : " img1.taobao.comr"、
"正常" : "100"、
"エラー" : "102"、
"エージェント" : "Mozilla/4.0 (互換性; MSIE 6.0; Windows NT 5.1; SV1; QQ ダウンロード 732; .NET4。「61.141.251.23」、
「new_ip」:「61.141.251.24」、
「urldata」:「img1.taabao.comr」、
「通常」:「100」、
「エラー」:「102」 、
"エージェント" : "Mozilla/4.0 (互換性 ; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)r"
" "new_ip" : "61.141.251.26 ",
"urldata" : "img2.taabao.comr"、
"normal" : "100"、
"error" : "102"、
"agent" : "Mozilla/4.0 (互換性あり、MSIE 6.0、Windows NT 5.1、SV1 ; QQダウンロード 732; .NET4.0E)r"
" " },
" new_ip " : "61.1 41.251.28",
"urldata" : " img3.taobao.comr"、
"正常" : "100"、
"エラー" : "102"、
"エージェント" : "Mozilla/4.0 (互換性; 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,
` `` `` ` ` 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 [ "結果"];
$arr=json_decode($result,true);専門家の皆様に$arrのデータを取り出してデータベースに書き込む方法を教えていただきたいです(結果データのエントリが固定されていないことを考慮する必要があります)。フォーマットは次のとおりです。完全なコード!必要に応じてボーナスポイントも!
id old_ip new_ip urldata 通常エラー エージェント 1 61.141.251.21 61.141.251.22 img1.taabao.com 100 102 Moz illa/4.0 (互換性; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E )
2 61.141.251.23 61.141.251.24 img2.taabao.com 100 102 Mozilla/4.0 (互換性; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET 4.0E)
$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 のモデレーターに感謝します。別の質問があります。アドバイスをお願いします。
user_ip 列が追加された結果データテーブルは次のとおりですが、user_ip フィールドのデータは json 結果配列から取得されるのではなく、php のバックグラウンド変数 $user_ip から取得されます。
質問: foreach を使用して $arr のデータを取り出し、結果データ テーブルに書き込む場合、$user_ip 変数のデータを同時に結果データ テーブルに書き込む方法について教えてください。
追加されたテーブル構造:
id old_ip new_ip urldata 正常なエラー エージェント user_ip
$user_ip=get_userip(); // get_userip() 関数を通じて取得されます。例: 111.23.11.13
$arr=json_decode($result,true ) ;
$arr=$arr['結果'];
if($arr){
foreach($arr as $val){
$val = array_map('mysql_real_escape_string',$val); " '".implode("','", $val)."'";
$sqlstr = "結果(old_ip,new_ip,urldata,normal,error,agent)の値(".$str.")に挿入" ;
$sqlstr = "insert into result(user_ip) value("$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()); }}