1

I'm working on how to book parking place application. now, I'm gonna make add information page. But android code put empty row in mysql database. Network connect is working, but empty data row is inserted in mysql. How I can insert data into mysql? please help me

public class DateAndTime extends Activity {


EditText Name, Mobile, Addrs, Fee;
TextView Otime, Ctime;
String pic,name, mobile, addrs, otime, ctime, fee;// 바꾸고 이미지도 추가.
ImageView Pic;
ViewFlipper flipper;

/**
 * ATTENTION: This was auto-generated to implement the App Indexing API.
 * See https://g.co/AppIndexing/AndroidStudio for more information.
 */
private GoogleApiClient client;

//View
private TextView mText1;
private TextView mText2;
private Button mPickDate1;
private Button mPickTime1;
private Button mPickDate2;
private Button mPickTime2;

 private int mYear1;
 private int mYear2;
 private int mMonth1;
 private int mMonth2;
 private int mDay1;
 private int mDay2;
 private int mHour1;
 private int mHour2;
 private int mMinute1;
 private int mMinute2;

static final int DATE_DIALOG_ID_1 = 0;
static final int TIME_DIALOG_ID_1 = 1;
static final int DATE_DIALOG_ID_2 = 2;
static final int TIME_DIALOG_ID_2 = 3;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.avtivity_date_time);

    mText1 = (TextView) findViewById(R.id.text1);
    mPickDate1 = (Button) findViewById(R.id.pickDate1);
    mPickTime1 = (Button) findViewById(R.id.pickTime1);

    mText2 = (TextView) findViewById(R.id.text2);
    mPickDate2 = (Button) findViewById(R.id.pickDate2);
    mPickTime2 = (Button) findViewById(R.id.pickTime2);

    mPickDate1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            showDialog(DATE_DIALOG_ID_1);
        }
    });

    mPickDate2.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            showDialog(DATE_DIALOG_ID_2);
        }
    });

    mPickTime1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            showDialog(TIME_DIALOG_ID_1);
        }
    });

    mPickTime2.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            showDialog(TIME_DIALOG_ID_2);
        }
    });

    final Calendar c = Calendar.getInstance();
    mYear1 = c.get(Calendar.YEAR);
    mMonth1 = c.get(Calendar.MONTH);
    mDay1 = c.get(Calendar.DAY_OF_MONTH);
    mHour1 = c.get(Calendar.HOUR_OF_DAY);
    mMinute1 = c.get(Calendar.MINUTE);

    mYear2 = c.get(Calendar.YEAR);
    mMonth2 = c.get(Calendar.MONTH);
    mDay2 = c.get(Calendar.DAY_OF_MONTH);
    mHour2 = c.get(Calendar.HOUR_OF_DAY);
    mMinute2 = c.get(Calendar.MINUTE);

    updateDisplay();

    Pic = (ImageView)findViewById(R.id.pic);
    //flipper = (ViewFlipper)findViewById(R.id.flipper);
    Name = (EditText) findViewById(R.id.et_owner);
    Mobile = (EditText) findViewById(R.id.et_mob);
    Addrs = (EditText) findViewById(R.id.et_addrs);
    Otime = (TextView) findViewById(R.id.text1);
    Ctime = (TextView) findViewById(R.id.text2);
    Fee = (EditText) findViewById(R.id.et_fee);

    // ATTENTION: This was auto-generated to implement the App Indexing API.
    // See https://g.co/AppIndexing/AndroidStudio for more information.
    client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
}

public void updateDisplay() {
    mText1.setText(String.format("시작 : %d년 %d월 %d일 %d시 %d분", mYear1, mMonth1 + 1, mDay1, mHour1, mMinute1));
    mText2.setText(String.format("종료 : %d년 %d월 %d일 %d시 %d분", mYear2, mMonth2 + 1, mDay2, mHour2, mMinute2));
}

public DatePickerDialog.OnDateSetListener mDateSetListener1 =
        new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                mYear1 = year;
                mMonth1 = monthOfYear;
                mDay1 = dayOfMonth;
                updateDisplay();
            }
        };
public DatePickerDialog.OnDateSetListener mDateSetListener2 =
        new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                mYear2 = year;
                mMonth2 = monthOfYear;
                mDay2 = dayOfMonth;
                updateDisplay();
            }
        };

public TimePickerDialog.OnTimeSetListener mTimeSetListener1 =
        new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                mHour1 = hourOfDay;
                mMinute1 = minute;
                updateDisplay();
            }
        };

public TimePickerDialog.OnTimeSetListener mTimeSetListener2 =
        new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                mHour2 = hourOfDay;
                mMinute2 = minute;
                updateDisplay();
            }
        };

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
        case DATE_DIALOG_ID_1:
            return new DatePickerDialog(this, mDateSetListener1, mYear1, mMonth1, mDay1);

        case TIME_DIALOG_ID_1:
            return new TimePickerDialog(this, mTimeSetListener1, mHour1, mMinute1, false);

        case DATE_DIALOG_ID_2:
            return new DatePickerDialog(this, mDateSetListener2, mYear2, mMonth2, mDay2);

        case TIME_DIALOG_ID_2:
            return new TimePickerDialog(this, mTimeSetListener2, mHour2, mMinute2, false);
    }
    return null;
}
public void saveInfo(View view) {
    pic = null;
    name = Name.getText().toString();
    mobile = Mobile.getText().toString();
    addrs = Addrs.getText().toString();
    otime = Otime.getText().toString();
    ctime = Ctime.getText().toString();
    fee = Fee.getText().toString();
    DateAndTime.BackgroundTask backgroundTask = new DateAndTime.BackgroundTask();
    backgroundTask.execute(pic, name,  mobile, addrs, otime, ctime, fee);
    //finish();
}

/**
 * ATTENTION: This was auto-generated to implement the App Indexing API.
 * See https://g.co/AppIndexing/AndroidStudio for more information.
 */
public Action getIndexApiAction() {
    Thing object = new Thing.Builder()
            .setName("ParkAddInfo Page") // TODO: Define a title for the content shown.
            // TODO: Make sure this auto-generated URL is correct.
            .setUrl(Uri.parse("http://35.160.135.119/add_park_info.php"))
            .build();
    return new Action.Builder(Action.TYPE_VIEW)
            .setObject(object)
            .setActionStatus(Action.STATUS_TYPE_COMPLETED)
            .build();
}

@Override
public void onStart() {
    super.onStart();

    // ATTENTION: This was auto-generated to implement the App Indexing API.
    // See https://g.co/AppIndexing/AndroidStudio for more information.
    client.connect();
    AppIndex.AppIndexApi.start(client, getIndexApiAction());
}

@Override
public void onStop() {
    super.onStop();

    // ATTENTION: This was auto-generated to implement the App Indexing API.
    // See https://g.co/AppIndexing/AndroidStudio for more information.
    AppIndex.AppIndexApi.end(client, getIndexApiAction());
    client.disconnect();
}

class BackgroundTask extends AsyncTask<String, Void, String> {
    String park_add_info_url;

    @Override
    protected void onPreExecute() {

        park_add_info_url = "http://35.160.135.119/add_park_info.php"; // insert the Domain name http://androidtut.comli.com//add_info.php
    }

    @Override
    protected String doInBackground(String... args)  {
        String pic, name,  mobile, addrs, otime, ctime, fee;
        pic = args[0];
        name = args[1];
        mobile = args[2];
        addrs = args[3];
        otime = args[4];
        ctime = args[5];
        fee = args[6];

        try {
            URL url = new URL(park_add_info_url);
            HttpURLConnection httpURLConnection =(HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setDoOutput(true);
            OutputStream outputStream = httpURLConnection.getOutputStream();
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
            StringBuilder stringBuilder = new StringBuilder("pic=");
            stringBuilder.append(pic); stringBuilder.append("&owner="); stringBuilder.append(name); stringBuilder.append("&mobile=");
            stringBuilder.append(mobile); stringBuilder.append("&addrs=");
            stringBuilder.append(addrs); stringBuilder.append("&otime="); stringBuilder.append(otime); stringBuilder.append("&ctime=");
            stringBuilder.append(ctime); stringBuilder.append("&fee=");  stringBuilder.append(fee); stringBuilder.append("'");
            String data_string = URLEncoder.encode(stringBuilder.toString(),"utf-8");
            bufferedWriter.write(data_string);
            bufferedWriter.flush();
            bufferedWriter.close();
            outputStream.close();
            InputStream inputStream = httpURLConnection.getInputStream();
            inputStream.close();
            httpURLConnection.disconnect();
            return "One row of data inserted..";


        } catch (IOException e) {//TODO:check network dialog window
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
    }

    @Override
    protected void onPostExecute(String result) {
        Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show();
    }

}

and this is the php code.

<?php
require "time_init.php"; //connecting mysql

$pic = $_POST["pic"];
$owner = $_POST["owner"];
$mobile = $_POST["mobile"];
$addrs = $_POST["addrs"];
$otime = $_POST["otime"];
$ctime = $_POST["ctime"];
$fee = $_POST["fee"];

$sql = "INSERT INTO park_info VALUES ('$pic', '$owner', '$mobile', '$addrs',  '$otime', '$ctime', '$fee');";
mysqli_query($con, $sql)

?>
Carly Yee
  • 45
  • 5
  • Your android code is unable to post data. Check this link http://stackoverflow.com/questions/31552242/sending-http-post-request-with-android – Aman Rawat Nov 14 '16 at 10:41
  • Please confirm your android sends data json without any fail ? – Pranav MS Nov 14 '16 at 11:06
  • your code is vulnerable to SQL-injection. just imagine someone posting a fee as `');DROP TABLE park_info; -- ` - please use parameterized statements. – Franz Gleichmann Nov 14 '16 at 11:20

1 Answers1

1

I think better aproach than building request yourself is using Volley for handling work with requests.

Volley is an HTTP library that makes networking for Android apps easier and most importantly, faster.

Jozef Dochan
  • 926
  • 10
  • 27