我试图通过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();
}
答案 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用户(email
,name
,password
)[...]似乎您的问题是错误的。使用&#39;&#39;或&#34;&#34;,不是``
答案 3 :(得分:0)
尝试移动获取按钮单击事件的文本字段数据,该变量是最终的,并且在创建活动后它已经拥有数据。