Android的发布数据到MySQL数据、Android、MySQL

2023-09-04 23:19:43 作者:故笙诉离歌

我试图通过发布Android的形式到MySQL数据库中的数据。我张贴的数据托管在服务器上的PHP脚本。我在MYSQL得到空值。 web服务获取调用,但它越来越空白数据下面是我的Andr​​oid code code:

 包com.register;

进口java.io.IOException异常;
进口的java.util.ArrayList;
进口的java.util.List;

进口org.apache.http.Htt presponse;
进口org.apache.http.NameValuePair;
进口org.apache.http.client.ClientProtocolException;
进口org.apache.http.client.HttpClient;
进口org.apache.http.client.entity.UrlEn codedFormEntity;
进口org.apache.http.client.methods.HttpPost;
进口org.apache.http.impl.client.DefaultHttpClient;
进口org.apache.http.message.BasicNameValuePair;



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

公共类注册扩展活动{




    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_register);
        EditText上email_id =(EditText上)findViewById(R.id.email_id);
        的EditText名=(EditText上)findViewById(R.id.name);
        的EditText密码=(EditText上)findViewById(R.id.password);
        Button按钮=(按钮)findViewById(R.id.button1);

        。最后弦乐电子邮件= email_id.g​​etText()的toString();
        。最后弦乐全名= name.getText()的toString();
        。最后弦乐mpassword = password.getText()的toString();



        。StrictMode.ThreadPolicy政策=新StrictMode.ThreadPolicy.Builder()permitAll()建();

        StrictMode.setThreadPolicy(政策);
button.setOnClickListener(新View.OnClickListener(){

    @覆盖
    公共无效的onClick(查看为arg0){
        // TODO自动生成方法存根
        // POSTDATA();
          HttpClient的HttpClient的=新DefaultHttpClient();
            HttpPost httppost =新HttpPost(HTTP://xyz/register.php);

            尝试 {
                //添加数据
                名单<的NameValuePair> namevaluepairs中=新的ArrayList<的NameValuePair>(2);
                nameValuePairs.add(新BasicNameValuePair(邮件,邮件));
                nameValuePairs.add(新BasicNameValuePair(名,全名));
                nameValuePairs.add(新BasicNameValuePair(密码,mpassword));
               httppost.setEntity(新UrlEn codedFormEntity(namevaluepairs中));

                //执行HTTP POST请求
                HTT presponse响应= httpclient.execute(httppost);

            }赶上(ClientProtocolException E){
                // TODO自动生成的catch块
            }赶上(IOException异常E){
                // TODO自动生成的catch块
            }

    }
});

    }
 

下面是我的PHP code:

 的mysql_connect(服务器,用户,密码);
mysql_select_db(testms);
$电子邮件= $ _ POST [电子邮件];
$名称= $ _ POST ['名称'];
$密码= $ _ POST ['密码'];

$ query_add =INSERT INTO用户(`email`字段,`name`,`password`)
VALUES('$电子邮件。,$名字。,$的密码。');
$ query_exec =请求mysql_query($ query_add)或死亡(mysql_error());
则mysql_close();

    }
 

解决方案

下面的code应该工作,但它没有测试 - 我只是复制了从项目我的工作。我会更新在一两分钟,在PHP部分的mysqli MySQL的相互作用(正确的方法),我只是修改我的答案。现在,只知道使用mysql_ *是德preciated,你真的应该清理所有条目,并从您的数据库。总之,给这个一抡:

Java的:

  @覆盖
公共无效的onClick(查看为arg0){
    //生成您的PARAMS:
    名单<的NameValuePair> namevaluepairs中=新的ArrayList<的NameValuePair>();
    nameValuePairs.add(新BasicNameValuePair(邮件,邮件));
    nameValuePairs.add(新BasicNameValuePair(名,全名));
    nameValuePairs.add(新BasicNameValuePair(密码,mpassword));

    //送他们一程
    尝试 {
        DefaultHttpClient的HttpClient =新DefaultHttpClient();
        HttpPost httpPost =新HttpPost(HTTP://xyz/register.php);
        httpPost.setEntity(新UrlEn codedFormEntity(nameValueParams));

        HTT presponse HTT presponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = HTT presponse.getEntity();

    }赶上(UnsupportedEncodingException E){
        e.printStackTrace();
    }赶上(ClientProtocolException E){
        e.printStackTrace();
    }赶上(IOException异常E){
        e.printStackTrace();
    }
}
 
一个简易Android购物App的开发

PHP(德preciated / unsanitized):

 < PHP

    $连接=的mysql_connect(主机名,用户名,密码)或死亡(mysql_error());
    $选择= mysql_select_db(数据库,$连接)或死亡(mysql_error());

    //你应该回应这些变量返回到您的应用程序
    //所以你知道他们发送。
    //回声接收。 $电子邮件。  - 。 $名字。  - 。 $密码;
    $电子邮件= $ _ POST [电子邮件];
    $名称= $ _ POST ['名称'];
    $密码= $ _ POST ['密码'];

    $插入=INSERT INTO用户(电子邮件,名,密码)VALUES('$电子邮件,$名称,$密码');
    $ RUN =请求mysql_query($插入)或死亡(mysql_error());

?>
 

有一个更好的PHP的例子:

 < PHP
    $ mysqli_connection =新的mysqli(主机名,用户名,密码,数据库);
    如果($ mysqli_connection-> connect_errno){
        回声(连接失败);
        出口();
    }

    $电子邮件= mysql_real_escape_string($ _ POST ['邮件']);
    $名= mysql_real_escape_string($ _ POST ['名称']);
    $密码= mysql_real_escape_string($ _ POST ['密码']);

    $插入=INSERT INTO用户(电子邮件,名,密码)VALUES('$电子邮件,$名称,$密码');
    如果($运行= $ mysql_connection->查询($插入)){
        回声成功;
        $运行 - >免费();
        $ mysql_connection->关闭();
    } 其他 {
        回声错误插入的内容;
        出口();
    }
?>
 

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

    }

解决方案

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