imran
imran

Reputation: 646

Android posting data to mysql

i am trying to post data through android forms to mysql database. i am posting data to a PHP script hosted on the server. i am getting null values in MYSQL. the webservice is getting called but it is getting blank data below is my android code code:

package com.register;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;



import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.app.Activity;

public class Register extends Activity {




    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        EditText email_id = (EditText)  findViewById(R.id.email_id) ;
        EditText name = (EditText) findViewById(R.id.name);
        EditText password = (EditText) findViewById(R.id.password);
        Button button = (Button) findViewById(R.id.button1) ;

        final String email = email_id.getText().toString();
        final String fullname = name.getText().toString();
        final String mpassword = password.getText().toString();



        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

        StrictMode.setThreadPolicy(policy); 
button.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        //postData();
          HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://xyz/register.php");

            try {
                // Add your data
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                nameValuePairs.add(new BasicNameValuePair("email", email));
                nameValuePairs.add(new BasicNameValuePair("name", fullname));
                nameValuePairs.add(new BasicNameValuePair("password", mpassword));
               httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                // Execute HTTP Post Request
                HttpResponse response = httpclient.execute(httppost);

            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
            } catch (IOException e) {
                // TODO Auto-generated catch block
            }

    }
});

    }

Below is my PHP code :

mysql_connect("server","user","password");
mysql_select_db("testms");
$email =   $_POST['email'];
$name =    $_POST['name'] ;
$password = $_POST['password'] ;

$query_add="INSERT INTO  users (`email` ,`name` ,`password` )
VALUES ('".$email."','".$name."', '".$password."')";
$query_exec=mysql_query($query_add) or die(mysql_error()); 
mysql_close();      

    }

Upvotes: 0

Views: 4507

Answers (4)

Naplionheart
Naplionheart

Reputation: 36

try moving the getting the text field data on your button click event, the variable is final and it already have the data after the creation of the activity.

Upvotes: 0

burmat
burmat

Reputation: 2548

The code below should work, but it is not tested - I just copied over from a project I am working on. I will update the MySQL interaction in the PHP section to mysqli (the CORRECT method) in a couple minutes and I will just edit my answer. For now, just know that using mysql_* is depreciated, and you should really sanitize all entries to and from your database. Anyway, give this a whirl:

Java:

@Override
public void onClick(View arg0) {
    // generate your params:
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("email", email));
    nameValuePairs.add(new BasicNameValuePair("name", fullname));
    nameValuePairs.add(new BasicNameValuePair("password", mpassword));

    // send them on their way
    try {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost("http://xyz/register.php");
        httpPost.setEntity(new UrlEncodedFormEntity(nameValueParams));

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

PHP (depreciated/unsanitized):

<?php 

    $connection = mysql_connect("hostname", "username", "password")or die(mysql_error());
    $selection = mysql_select_db("database", $connection)or die(mysql_error());

    // You should echo these variables back to your app
    // so you know they are sending.
    // echo "Received: " . $email . " - " . $name . " - " . $password;
    $email = $_POST['email'];
    $name = $_POST['name'];
    $password = $_POST['password'];

    $insert = "INSERT INTO users('email','name','password') VALUES('$email','$name','$password')";
    $run = mysql_query($insert)or die(mysql_error());

?>

A Better PHP Example:

<?php   
    $mysqli_connection = new mysqli("hostname", "username", "password", "database");
    if ($mysqli_connection->connect_errno) {
        echo ("Connection Failure");
        exit();
    }

    $email = mysql_real_escape_string($_POST['email']);
    $name = mysql_real_escape_string($_POST['name']);
    $password = mysql_real_escape_string($_POST['password']);

    $insert = "INSERT INTO users('email','name','password') VALUES('$email','$name','$password')";
    if ($run = $mysql_connection->query($insert)) {
        echo 'Success';
        $run->free();
        $mysql_connection->close();
    } else {
        echo 'Error Inserting Content';
        exit();
    }
?>

Upvotes: 1

Rickey
Rickey

Reputation: 7880

Try the $_REQUEST variable and grab the data before connecting to the database

$email =   $_REQUEST ['email'];  
$name =    $_REQUEST ['name'] ;  
$password = $_REQUEST ['password'] ;    

mysql_connect("server","user","password");  
mysql_select_db("testms"); 
$query_add="INSERT INTO  users (`email` ,`name` ,`password` )  VALUES ('".$email."','".$name."', '".$password."')";  $query_exec=mysql_query($query_add) or die(mysql_error());   
mysql_close();              
}

I usually send back some data for debugging purposes.

echo "some test string";

In your application do the following: Just for the sake of knowing, check the response from the server:

int ResponseCode = response.getStatusLine();

HttpEntity resEntity = response.getEntity();
if( resEntity != null ){
    if( EntityUtils.toString(resEntity).equalsIgnoreCase("some test string") )
    {
        ...do something
    }
    resEntity.consumeContent();
}

Upvotes: 1

Spetastium
Spetastium

Reputation: 205

[...]INTO users (email ,name ,password )[...] it seems like yout qotations are wrong. Use '' or "", NOT ``

Upvotes: 0

Related Questions