我试图通过发布Android的形式到MySQL数据库中的数据。我张贴的数据托管在服务器上的PHP脚本。我在MYSQL得到空值。 web服务获取调用,但它越来越空白数据下面是我的Android 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.getText()的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();
}
}
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();
}
?>