0

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(); } 
12
  • Where does the error happen? Is your app is sending the data OK? Is PHP receiving it OK, and processing it properly? Which fields are coming through as NULL? Have you run your generated SQL from PHP directly in the database? Commented Aug 24, 2012 at 17:51
  • Posting large chunks of code and expecting the SO community to debug for you is frowned upon around here. What have you tried? Have you dumped the POST collection on the server? Have you tried inserting constants? Also, you code is vulnerable to SQL injection and magic quote bugs. Commented Aug 24, 2012 at 17:51
  • and what are you getting on PHP interface? try do debug $_REQUEST and $_POST with var_deubug Commented Aug 24, 2012 at 17:51
  • wild guess: set the content type header? Commented Aug 24, 2012 at 17:51
  • question using my_sql extension consider to be deprecated on so as well. Commented Aug 24, 2012 at 17:53

4 Answers 4

1

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(); } ?> 
Sign up to request clarification or add additional context in comments.

Comments

1

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(); } 

Comments

0

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

2 Comments

I think those quotes are still acceptable in MySQL. Don't remember if they cause an issue in SQL. His issues seems to be that he is getting blank values.
Backquotes around field/table names (not values) are prefectly OK in MySQL.
0

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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.