Re: Stripping a JSON of extra characters in PHP
[email protected] (The Doctor) Tue, 7 Feb 2023 00:56:50 -0000 (UTC)
| Newsgroups | comp.lang.php |
|---|---|
| Organization | NetKnow News |
| Message-ID | <[email protected]> |
In article <[email protected]>, J.O. Aho <[email protected]> wrote: >On 2/6/23 16:28, The Doctor wrote: >> In article <[email protected]>, >> J.O. Aho <[email protected]> wrote: >>> On 06/02/2023 02:31, The Doctor wrote: >>>> And in the case of recurring items when being puleld from >>>> a form getting parsed? >>> >>> If you are thinking of post value which is an array, then the simplest >>> would be: >>> $a->cart = (object)$_POST['cart']; // this may give you object you don't >>> want >>> >>> Just keep in mind that the data is unsafe to use, you should do the long >>> way and validate the data and as you validate you can then add the >>> values to a temp variable and if all the cart items passes validation, >>> then add it to the main json object (in this silly example the $a). >>> >>> If you get a new cart posted (updates), then replace the current one >>> you have in the session, don't forget to validate the data before you >>> replace the cart section. Only have the latest validated one >>> $a->cart = $validated_shopping_cart; // validated_shopping_cart is a >>> json object >>> >>> for duplicate entries you have to decide what to do, cast an error or >>> merge them together, that is up to you, but do not have duplicate items >>> in your json object. >>> >>> I hope that was the answer you was looking for. >>> >> >> The cart is being derived from a previous form being passed into PHP! >> >> >> Just an update >> The cart section is now an issue . >> > >> 'cart' => array( >> (foreach ($_POST['quantity'] as $key => $value) { >> >> if( $value > 0){ >> >> if(isset($_POST['with_gst'][$key])){ >> $unit_cost = 63.00; >> }else{ >> $unit_cost = 60.00; //no gst included >> } >> >> $subtotal = ($unit_cost * $value); >> $quantity = ($value); >> >> $cart['items'][] =array( >> 'url' => "https://www.pdsolutions.ca/images/newwhiteheader.png", >> 'description' => $_POST['description'][$key], >> 'product_code' => $_POST['id'][$key], >> 'unit_cost' => $unit_cost, >> 'quantity' => $quantity, >> ), >> $newtotal += $subtotal; >> $items_count++; >> array_push(items,itemsubarray); >> } >> } >> >> 'subtotal' => $newtotal, >> if(isset($_POST['with_gst'][$key])){ >> 'tax'=>array( >> 'amount' => ($newtotal * 0.05), >> 'description' => "GST", >> 'rate' => "5.00", >> ), >> }) >> ), > >It's messy and a lot of hard coded things and I'm just guessing what you >try to do, I think I would have done things differently, for example >posting all the data maybe as a serialized json object from the client >side, I would fetch the items value from the database together with >description, I would have the tax rate in the database too, easy to >change the the tax in the database when the the government changes it. > >I made an small example that take the cart part, not sure if it's what >you want to have, but at least should give you some idea and the reason >I didn't use $_POST values is that it's easier to test things when you >can modify values based on what you want and fine tune things till they >are right, then you can modify the constructor to not take any >arguments, I would make the "cart" class to hold all the values you need >for your json. >If you need to use values between functions, then use private, for then >they will not be included when you use the json_encode() > >--- simple example --- ><?php > >class cart { > public $total = 0; > public $items = []; > private $uber = "man"; // this will not be included in the json output > > public function __construct($quantityArray, $gstArray, $descArray, >$idArray) { > foreach($quantityArray as $key => $num_items) > { > if($num_items == 0) > continue; > > $has_tax = isset($gstArray[$key]); > $unit_cost = $has_tax ? 63 : 60; > $sub_total = $num_items * $unit_cost; > $this->total = $sub_total; > > $item = [ > 'url' => >'https://www.pdsolutions.ca/images/newwhiteheader.png', > 'description' => $descArray[$key], > 'product_code' => $idArray[$key], > 'unit_cost' => number_format($unit_cost, 2), > 'quantity' => $num_items, > 'subtotal' => number_format($sub_total, 2), > ]; > > if($has_tax) { > $item['tax'] = (object)[ 'amount' => >number_format($sub_total * 0.05), 'description' => "GST", 'rate' => >'5.00' ]; > } > > $this->items[] = (object)$item; > > } > } >} > >$q = [1, 2, 0]; >$g = [1, 1, 0]; >$d = ['banana', 'apple', 'car']; >$i = [22, 11, 33]; > >$cart = new cart($q, $g, $d, $i); >echo json_encode($cart, JSON_PRETTY_PRINT); >?> >--- eof --- > >You can also see the use of number_format(), that just so we get the >right number of decimals, I haven't bothered about rounding which would >be sane. And it's the "items" that should be something similar to your cart. > >-- > > //Aho > > > Will try. Basing this in the Moneris docs. -- Member - Liberal International This is [email protected] Ici [email protected] Yahweh, King & country!Never Satan President Republic!Beware AntiChrist rising! Look at Psalms 14 and 53 on Atheism https://www.empire.kred/ROOTNK?t=94a1f39b Extremism is for those who love judging, and care nothing for accuracy. -unknown Beware https://mindspring.com