Android将数据发布到mysql

时间:2012-08-24 17:48:49

标签: php android mysql web-services

我试图通过Android表单将数据发布到mysql数据库。我将数据发布到服务器上托管的PHP脚本。我在MYSQL中获取空值。 web服务正在调用,但下面的空白数据是我的android代码:

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
            }

    }
});

    }

以下是我的PHP代码:

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

    }

4 个答案:

答案 0 :(得分:1)

下面的代码应该可以使用,但它没有经过测试 - 我只是从我正在处理的项目中复制过来。我将在几分钟内将PHP部分中的MySQL交互更新为mysqli(CORRECT方法),我将编辑我的答案。现在,只要知道使用mysql_ *已经过折旧,就应该清理所有进出数据库的条目。无论如何,给它一个旋转:

爪哇:

@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(折旧/未推荐):

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

?>

更好的PHP示例:

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

答案 1 :(得分:1)

尝试$ _REQUEST变量并在连接数据库之前获取数据

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

我通常会发回一些数据用于调试目的。

echo "some test string";

在您的应用程序中执行以下操作: 只是为了了解,请检查服务器的响应:

int ResponseCode = response.getStatusLine();

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

答案 2 :(得分:0)

[...] INTO用户(emailnamepassword)[...]似乎您的问题是错误的。使用&#39;&#39;或&#34;&#34;,不是``

答案 3 :(得分:0)

尝试移动获取按钮单击事件的文本字段数据,该变量是最终的,并且在创建活动后它已经拥有数据。