tonton Posted May 1, 2015 Share Posted May 1, 2015 Hi I have a json data : { "email": "john@john.fr", "line_items": [ { "sku": "123456789", "price": "0.67", "price_with_tax": "4.00", "tax_lines": [ { "title": "tax010", "rate": 0.01, "price": "1.11" }, { "title": "tax00200", "rate": 0.02, "price": "2.22" } ] }, { "sku": "012345666", "price": "1.67", "price_with_tax": "5.00", "tax_lines": [ { "title": "tax0003000", "rate": 0.03, "price": "3.33" } ] } ] } and I try put this data in mySql. First data have a good value but second have a wrong data on 'price_tax1' and 'price_tax2' in mySql : Here is my MySql 1st item :::: good value email:john@john.fr sku:123456789 price:0.67 price_with_tax:4.00 price_tax1:1.11 price_tax2:2.22 2nd item :::: email:john@john.fr sku:012345666 price:1.67 price_with_tax:5.00 wrong value :::: price_tax1:1.11 price_tax2:2.22 here is my code : $jsondata = file_get_contents($jsondata); $dataDecode = json_decode($jsondata); $email = $dataDecode->email; try { $dtbs = new PDO($dsn_dev, $pdo_user, $pdo_password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } catch (Exception $e) { die('Error : ' . $e->getMessage()); } try { foreach ($dataDecode->line_items as $obj) { $var_sku = $obj->sku; $var_price = $obj->price; $var_price_with_tax = $obj->price_with_tax; $taxNewArray = array(); foreach ($dataDecode->line_items[0]->tax_lines as $obj2) { array_push($taxNewArray , $obj2); } $val1st = array_shift($taxNewArray); $val2nd = array_pop ($taxNewArray); $var_tax1 = $val1st->price; $var_tax2 = $val2nd->price; $stmt = $dtbs->prepare("INSERT INTO $tabledata ($mysql_email, $mysql_sku, $mysq_price, $mysql_price_with_tax, $mysql_price__tax1___line_items, $mysql_price__tax2___line_items ) VALUES (:email, :sku, :price, :price_with_tax, :price_tax1, :price_tax2)"); $stmt->execute(array(':email'=>$email, ':sku'=>$var_sku, ':price'=>$var_price, ':price_with_tax'=>$var_price_with_tax, ':price_tax1'=>$var_tax1, ':price_tax2'=>$var_tax2 )); } } catch(Exception $e) { throw $e; } How can I put goog value of 2nd data in mySql ? thanks Quote Link to comment Share on other sites More sharing options...
jcbones Posted May 1, 2015 Share Posted May 1, 2015 Not sure what you are expecting for your "good" value. However, I think the code may be confusing you a bit. I've took the liberty to clean it up a might, with some notations. Hope it helps. try { $dtbs = new PDO($dsn_dev, $pdo_user, $pdo_password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } catch (Exception $e) { die('Error : ' . $e->getMessage()); } try { $stmt = $dtbs->prepare("INSERT INTO $tabledata ($mysql_email, $mysql_sku, $mysq_price, $mysql_price_with_tax, $mysql_price__tax1___line_items, $mysql_price__tax2___line_items ) VALUES (:email, :sku, :price, :price_with_tax, :price_tax1, :price_tax2)"); foreach ($dataDecode->line_items as $obj) { foreach ($dataDecode->line_items[0]->tax_lines as $obj2) { $stmt->execute(array(':email'=>$email, ':sku'=>$obj->sku;, ':price'=> $obj->price, ':price_with_tax'=>$obj->price_with_tax, ':price_tax1'=>$obj2->title, //is this suppose to be rate? ':price_tax2'=>$obj2->price )); } } } catch(Exception $e) { throw $e; } Quote Link to comment Share on other sites More sharing options...
jcbones Posted May 1, 2015 Share Posted May 1, 2015 One closer look, I believe this is what you are looking for. try { $dtbs = new PDO($dsn_dev, $pdo_user, $pdo_password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } catch (Exception $e) { die('Error : ' . $e->getMessage()); } try { $stmt = $dtbs->prepare("INSERT INTO $tabledata ($mysql_email, $mysql_sku, $mysq_price, $mysql_price_with_tax, $mysql_price__tax1___line_items, $mysql_price__tax2___line_items ) VALUES (:email, :sku, :price, :price_with_tax, :price_tax1, :price_tax2)"); foreach ($dataDecode->line_items as $obj) { $prices = (array)$dataDecode->line_items[0]->tax_lines; $price1 = !empty($prices[0]) ? $prices[0]->price : 0.00; $price2 = !empty($prices[1]) ? $prices[1]->price : 0.00; $stmt->execute(array(':email'=>$email, ':sku'=>$obj->sku;, ':price'=> $obj->price, ':price_with_tax'=>$obj->price_with_tax, ':price_tax1'=>$price1, ':price_tax2'=>$price2 )); } } catch(Exception $e) { throw $e; } Quote Link to comment Share on other sites More sharing options...
tonton Posted May 2, 2015 Author Share Posted May 2, 2015 Not sure what you are expecting for your "good" value. However, I think the code may be confusing you a bit. I've took the liberty to clean it up a might, with some notations. foreach ($dataDecode->line_items as $obj) { foreach ($dataDecode->line_items[0]->tax_lines as $obj2) { $stmt->execute(array(':email'=>$email, ':sku'=>$obj->sku;, ':price'=> $obj->price, ':price_with_tax'=>$obj->price_with_tax, ':price_tax1'=>$obj2->title, //is this suppose to be rate? ':price_tax2'=>$obj2->price )); } } } catch(Exception $e) { throw $e; } Hi Jcbones, Non, I have a wrong valus with this code! Here is a result : 1st item email:john@john.fr sku:123456789 price:0.67 price_with_tax:4.00 price_tax1:tax010 wrong! [this is a good value : 1.11) price_tax2:2.22 2nd item :::: email:john@john.fr sku:012345666 price:1.67 price_with_tax:5.00 wrong value :::: price_tax1:tax00200 wrong! [this is a good value : 3.33] price_tax: 2:2.22 wrong! [this is a good value : 0.00 or NULL] Quote Link to comment Share on other sites More sharing options...
tonton Posted May 2, 2015 Author Share Posted May 2, 2015 One closer look, I believe this is what you are looking for. foreach ($dataDecode->line_items as $obj) { $prices = (array)$dataDecode->line_items[0]->tax_lines; $price1 = !empty($prices[0]) ? $prices[0]->price : 0.00; $price2 = !empty($prices[1]) ? $prices[1]->price : 0.00; $stmt->execute(array(':email'=>$email, ':sku'=>$obj->sku;, ':price'=> $obj->price, ':price_with_tax'=>$obj->price_with_tax, ':price_tax1'=>$price1, ':price_tax2'=>$price2 )); } } catch(Exception $e) { throw $e; } , Hi jcbones, I have also wrong valus with this code! Here is a result : 1st item :::: good value email:john@john.fr sku:123456789 price:0.67 price_with_tax:4.00 price_tax1:1.11 price_tax2:2.22 2nd item :::: email:john@john.fr sku:012345666 price:1.67 price_with_tax:5.00 wrong value :::: price_tax1:1.11 wrong! [this is a good value : 3.33] price_tax2:2.22 wrong! [this is a good value : 0.00 or NULL] With 2nd Items we have only one tax in json data : look like that : for 1st item : "tax_lines": [ { "title": "tax010", "rate": 0.01, "price": "1.11" }, { "title": "tax00200", "rate": 0.02, "price": "2.22" } ] and for second item (only one tax) "tax_lines": [ { "title": "tax0003000", "rate": 0.03, "price": "3.33" } ] How I must write my code so I get the following result : first item value: ... price_tax1:1.11 price_tax2:2.22 second item value (when there are only one tax) ... price_tax1:3.33 price_tax2:0.00 or second item value (when there are only one tax) ... price_tax1:3.33 price_tax2:NULL Quote Link to comment Share on other sites More sharing options...
Solution jcbones Posted May 3, 2015 Solution Share Posted May 3, 2015 Try changing: $prices = (array)$dataDecode->line_items[0]->tax_lines; To: $prices = (array)$obj->tax_lines; Oversight in translation. Quote Link to comment Share on other sites More sharing options...
tonton Posted May 3, 2015 Author Share Posted May 3, 2015 Many Thanks Many Thanks Jcbones, it works Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.