0

In table work_details, I have 7 column (id, project, work_description, percentage, time_in, time_out, fk). Now I want to save the arraylist and fk to the table.

I have tried to code but I know this is not the correct way.

  public void addWorkDetails(ArrayList<SearchResults> listItems, long id)
    {
        JSONObject object= new JSONObject();

        for(int i=0;i<listItems.size();i++)
        {
            try
            {
                object.put("Count : "+String.valueOf(i + 1),listItems.get(i));
            }catch(JSONException e)
            {
                e.printStackTrace();
            }
        }

        class AddWorkDetails extends AsyncTask<String, Void, String> {
            ProgressDialog loading;

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                loading = ProgressDialog.show(WorkDetailsTable.this, "Please Wait",null, true, true);
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                loading.dismiss();
                Toast.makeText(getApplicationContext(),s,Toast.LENGTH_LONG).show();
            }

            @Override
            protected String doInBackground(String... params) {
                HashMap<String, String> data = new HashMap<String,String>();
               // what should I put here ?
                RequestHandler rh=new RequestHandler();
                String result = rh.sendPostRequest(Config.ADD_WORKDETAILS,data);
                return  result;
            }
        }

        AddWorkDetails ru = new AddWorkDetails();
        ru.execute(listItems,id);
    }

Php

<?php

   if($_SERVER['REQUEST_METHOD']=='POST'){

   $list[]=$_POST['listItems'];
   $id=$_POST['id'];

   foreach($list as $value){
   $value=mysqli_real_escape_string($val);

    $sql="INSERT INTO work_details (project, work_description, percentage, timeIn, timeOut, id) VALUES ('$val', '$id')";

  //Importing our db connection script
        require_once('dbConnect.php');

        //Executing query to database
        if(mysqli_query($con,$sql)){
            echo ' Added Successfully';
        }else{
            echo 'Could Not Add Data';
        }

        //Closing the database 
        mysqli_close($con);
    }
?>

Noted that the listItems holds project,work_description,percentage,time_in and time_out.

1 Answer 1

1

Your SQL query is incorrect:

$sql="INSERT INTO work_details (project, work_description, percentage, timeIn, timeOut, id) VALUES ('$val', '$id')";

You have 6 columns to set and provide only 2 values.

Instead of iterating over $list and executing a query for each value, you should rather construct the query while iterating and execute it only once at the end when it is complete. Example:

foreach (...) {
    $sql = $sql . "'$val', ";
    ...
}
$sql = "INSERT INTO work_details (project, work_description, percentage, timeIn, timeOut, id) VALUES (" . $sql . "'$id')";

This is just the idea.. I'm not a PHP guy so there's probaby errors in what I wrote.

EDIT : This assumes that order is always the same in the list.

Sign up to request clarification or add additional context in comments.

Comments

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.