2

I am learning JSON with PHP and I run into an problem

I am trying to insert my sizes merged string to database products table under sizes column expected result


This Is what I tried:

I have a function that is called saveChangesSizes where I have tried used JSON.stringify() to convert a JavaScript object into a string

$("#saveChangesSizes").click(function(){
    console.log("1");
    var velicine="";
    var niz=new Array();
    for(var i=1; i<=12;i++){
        if($("#size_" + i).val()!=""){
            niz.push({size: $("#size_" + i).val(), qty: $("#qty_" + i).val()});
            velicine+=$("#size_" + i).val() + ":" + $("#qty_" + i).val() + ",";
        }
    }
    console.log(niz);
    if(velicine.length>0){
        velicine=velicine.substring(0,velicine.length-1);
    }
    $("#qtyandsizes").val(JSON.stringify(niz));
    $("#sizes").val(velicine);
     $("#sizesModal").foundation("close");
     return false;
});

After I submit my sizes from modal they are stored in sizes and quantity preview label with correct formating, that is string.

My preview label have an id of "sizes" and value of "$sizes"

With PHP I have defined $sizes in if post condition

 if($_POST){
 $sizes = ((isset($_POST['qtyandsizes']) && $_POST['qtyandsizes'] !='')?sanitize($_POST['qtyandsizes']):'');

I have query for insert to my database :

$insertSql=$veza->prepare("INSERT INTO products (`sizes`) VALUES ('$sizes');");
 $insertSql->execute();

What I am getting into my database is JSON object like so :

[{"size":"medium","qty":"2"},{"size":"large","qty":"3"}]


Update

I should somehow return the value of "velicine" to a php variable since it shows the expected format and result with console.log(velicine)

I tried replacing $_POST['qtyandsizes'] to $_POST['sizes'] but it overwrites anything I manually insert into database size column with empty result


To provide with more information , this is my full code structure:


PHP open and PDO database configuration file included

<?php
include_once "../config.php";

 if(isset($_GET['add']) || isset($_GET['edit'])){
   $sizes = ((isset($_POST['sizes']) && $_POST['sizes'] !='')?sanitize($_POST['sizes']):'');

 if(isset($_GET['edit'])){
   $sizes = ((isset($_POST['sizes']) && $_POST['sizes'] != '')?sanitize($_POST['sizes']):$product['sizes']);

 if($_POST)

   $sizes = ((isset($_POST['sizes']) && $_POST['sizes'] !='')?sanitize($_POST['sizes']):'');

After that comes my query for inserting into the database that I posted above.And where I close my PHP tags.


Opening FORM tags and content bellow :

<form action ="sizes.php?<?=((isset($_GET['edit']))?'edit='.$edit_id:'add=1');?>" method="POST" enctype="multipart/form-data" >

<div class="small-6 large-4 columns ">
   <label>Quantity & Sizes*: </label>
   <button class="button" id="ctl">Quantity & Sizes</button>
</div>
//Id = ctl is used to open my modal where I am inputting sizes

<div class="small-6 large-4 columns ">
  <label for ="sizes">Sizes & Qty Preview</label>
  <input type="text" class="form-control" name="size" id="sizes" value="<?php echo $sizes;?>"readonly> 
</div>

Notice $sizes variable, that is being echoed in correct format to Sizes and Quantaty preview label is what I want to insert into the database, but for some reason it doesn't work.


And my submit button and where my Form ends :

 <input type="submit" value="<?=((isset($_GET['edit']))?'Edit':'Add');?> Product" class="button">


<input type="hidden" name="qtyandsizes" id="qtyandsizes" />

</form>

After this comes my foundation reveal modal for adding sizes with button id saveChangesSizes that outputs the result into preview label.

 <button class="button"  id="saveChangesSizes"> Save Changes

At the end is where javascript saveChangesSizes function is.

2
  • What do you expect your database example to look like? Commented Apr 10, 2018 at 8:35
  • See the expected result link. It is expected to be merged as string Commented Apr 10, 2018 at 8:44

2 Answers 2

1

Updated

function getSizes($json){

  $json = urldecode($json);

  $array = json_decode($json, true);

  foreach($array as $key){

  $sizes .= $key['size'] . ':' . $key['qty'] . ',';

  }

  $sizes = rtrim($sizes,',');

  return htmlentities($sizes, ENT_QUOTES, 'UTF-8');

}

echo getSizes($_POST['qtyandsizes']); 
Sign up to request clarification or add additional context in comments.

2 Comments

Comments are not for extended discussion; this conversation has been moved to chat.
Well linter is giving me php error, acctualy it refers me to open dev tools on atom where I Can see this error inside body: platform linux is bluuried
0

You have 2 variables in JS:

1. `niz` which is an `Array`
This `Array` is created in `key value` pair as
size: medium, qty: 2

2. `velicine` which is a `String`
This is created as a concatenated string
medium:2

niz Array is then converted to JSON string and is inserted into products table. velicine is just used to display in a textbox to the user.

[{"size":"medium","qty":"2"},{"size":"large","qty":"3"}]

This is a valid JSON string. If you do not want JSON to be stored, replace it with velicine at the time of insert.

Hope this helps!

Update 1

As per your comment, you want to insert velicine into the database.

To do so, change following snippet

if($_POST){
    $sizes = ((isset($_POST['qtyandsizes']) && $_POST['qtyandsizes'] !='')?sanitize($_POST['qtyandsizes']):'');

to

if($_POST){
    $sizes = ((isset($_POST['sizes']) && $_POST['sizes'] !='')?sanitize($_POST['sizes']):'');

3 Comments

Yes that is correct. But I can't find the solution on how to get my javascript value of "velicine" into post and replace it with current insert, where now I have variable $sizes
Updated my answer.
This doesn't output anything to database, I have tried this before I posted my question

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.