好吧,我向你解释我正在尝试做什么,我需要将一个用户从我的Android设备插入到localhost,我在php中使用一个Web服务,它似乎不起作用,因为它说我已经在我的数据库中插入了该用户,但是当我转到localhost时,我找不到我的用户..
这是我的代码:
的Java(机器人):
public class NewUsuarioPart2Activity extends AppCompatActivity {
private EditText textoEmail, textoDNI, textoEdad,textoNombreUsu;
private Button btnHecho;
private String nom = "";
private String apellido = "";
private String contra = "";
private String contraNew = "";
private int id = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_usuario_nuevo_part2);
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
String str = "*** My thread is now configured to allow connection";
Toast.makeText(getApplication(), str, Toast.LENGTH_LONG).show();
}
//LO GUARDADO DE NEWUSUARIOACTIVITY
if (savedInstanceState == null) {
Bundle extras = getIntent().getExtras();
if(extras == null) {
nom = null;
apellido = null;
contra = null;
contraNew = null;
} else {
nom = extras.getString("STRING_NOM");
apellido = extras.getString("STRING_APELLIDO");
contra = extras.getString("STRING_CONTRA");
contraNew = extras.getString("STRING_CONTRA_NEW");
}
} else {
nom = (String) savedInstanceState.getSerializable("STRING_NOM");
apellido = (String) savedInstanceState.getSerializable("STRING_APELLIDO");
contra = (String) savedInstanceState.getSerializable("STRING_CONTRA");
contraNew = (String) savedInstanceState.getSerializable("STRING_CONTRA_NEW");
}
textoEmail = (EditText)findViewById(R.id.edEmail);
textoDNI = (EditText)findViewById(R.id.edDNI);
textoEdad = (EditText)findViewById(R.id.edEdad);
textoNombreUsu = (EditText)findViewById(R.id.edNomUsu);
btnHecho = (Button)findViewById(R.id.btnHecho);
btnHecho.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
id++;
new Insertar(NewUsuarioPart2Activity.this).execute();
Intent intent = new Intent(NewUsuarioPart2Activity.this, MainActivity.class);
v.getContext().startActivity(intent);
}
});
}
//What I do here is insert my new user to my database
private boolean insertar(){
HttpClient httpclient;
List<NameValuePair> nameValuePairs;
HttpPost httppost;
httpclient=new DefaultHttpClient();
httppost= new HttpPost("http://192.168.231.88/xabiagame/data/insertarOtroMetodo.php"); // Url del Servidor
//Añadimos nuestros datos
nameValuePairs = new ArrayList<NameValuePair>(8);
nameValuePairs.add(new BasicNameValuePair("id",String.valueOf(id).trim()));
nameValuePairs.add(new BasicNameValuePair("nombre",nom.trim()));
nameValuePairs.add(new BasicNameValuePair("apellidos",apellido.trim()));
nameValuePairs.add(new BasicNameValuePair("email",textoEmail.getText().toString().trim()));
nameValuePairs.add(new BasicNameValuePair("dni",textoDNI.getText().toString().trim()));
nameValuePairs.add(new BasicNameValuePair("contrasenya",contraNew.trim()));
nameValuePairs.add(new BasicNameValuePair("usuario",textoNombreUsu.getText().toString().trim()));
nameValuePairs.add(new BasicNameValuePair("edad",textoEdad.getText().toString().trim()));
for (int i=0; i<nameValuePairs.size(); i++){
Log.i("User", nameValuePairs.get(i).toString());
}
try {
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost);
return true;
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
//AsyncTask para insertar Personas
class Insertar extends AsyncTask<String,String,String> {
private Activity context;
Insertar(Activity context){
this.context=context;
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
if(insertar())
context.runOnUiThread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(context, "Persona insertada con exito", Toast.LENGTH_LONG).show();
nom = null;
apellido = null;
contra = null;
contraNew = null;
textoEmail.setText("");
textoDNI.setText("");
textoEdad.setText("");
textoNombreUsu.setText("");
}
});
else
context.runOnUiThread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(context, "No insertado", Toast.LENGTH_LONG).show();
}
});
return null;
}
}
}
这是我在Php中的Web服务(我有两个):
这两个似乎不起作用。
第一个:
<?PHP
$hostname_localhost ="localhost"; //nuestro servidor
$database_localhost ="xabiagame";//Nombre de nuestra base de datos
$username_localhost ="root";//Nombre de usuario de nuestra base de datos (yo utilizo el valor por defecto)
$password_localhost ="";//Contraseña de nuestra base de datos (yo utilizo por defecto)
//'ejemplo.com:3307', 'usuario_mysql', 'contraseña_mysql'
$localhost = mysql_connect($hostname_localhost,$username_localhost,$password_localhost)//Conexión a nuestro servidor mysql
or
trigger_error(mysql_error(),E_USER_ERROR); //mensaaje de error si no se puede conectar
mysql_select_db($database_localhost, $localhost);//seleccion de la base de datos con la qu se desea trabajar
//variables que almacenan los valores que enviamos por nuestra app, (observar que se llaman igual en nuestra app y aqui)
$id=$_POST['id'];
$nombre=$_POST['nombre'];
$apellidos=$_POST['apellidos'];
$email=$_POST['email'];
$dni=$_POST['dni'];
$contrasenya=$_POST['contraseña'];
$usuario=$_POST['usuario'];
$edad=$_POST['edad'];
$query_search = "insert into usuario(id,nombre,apellidos,email, dni, contraseña, usuario, edad) values ('".$id."','".$nombre."','".$apellidos."','".$email."','".$dni."','".$contrasenya."','".$usuario."','".$edad."')";//Sentencia sql a realizar
$query_exec = mysql_query($query_search) or die(mysql_error());//Ejecuta la sentencia sql.
/* Consignar la transación */
if (!mysqli_commit($localhost)) {
print("Falló la consignación de la transacción\n");
exit();
}
/* Cerrar la conexión */
mysqli_close($localhost);
?>
另一个:
<?php
$id=$_POST['id'];
$nombre=$_POST['nombre'];
$apellidos=$_POST['apellidos'];
$email=$_POST['email'];
$dni=$_POST['dni'];
$contrasenya=$_POST['contraseña'];
$usuario=$_POST['usuario'];
$edad=$_POST['edad'];
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "xabiagame";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection fallida: " . $conn->connect_error);
}
$sql = "INSERT INTO usuario (id,nombre,apellidos,email, dni, contraseña, usuario, edad)
VALUES ('$id','$nombre','$apellidos','$email','$dni','$contrasenya','$usuario','$edad')";
if ($conn->query($sql) === TRUE) {
echo "se creo el usuario";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
我不知道我的错误是什么..似乎一切都很好,我想..
答案 0 :(得分:0)
问题是您总是将相同的id
分配给您要在数据库中保存的记录。因此用户已存在的错误。
在此处查看您的代码:
private int id = 1;
此代码中的变量永远不会更改,因此您尝试保存的所有记录都有id=1
。在我看来,你不应该从你的Android应用程序发送id
,它是你的数据库的工作,为每个新的插入分配id。检查主要关键策略,例如自动增量。
答案 1 :(得分:0)
<?php
$data = json_decode(file_get_contents('php://input'), true);
$key= $input->value; //try like this for all below.
/* $id=$_POST['id'];
$nombre=$_POST['nombre'];
$apellidos=$_POST['apellidos'];
$email=$_POST['email'];
$dni=$_POST['dni'];
$contrasenya=$_POST['contraseña'];
$usuario=$_POST['usuario'];
$edad=$_POST['edad'];
*/
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "xabiagame";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection fallida: " . $conn->connect_error);
}
$sql = "INSERT INTO usuario (id,nombre,apellidos,email, dni, contraseña, usuario, edad)
VALUES ('$id','$nombre','$apellidos','$email','$dni','$contrasenya','$usuario','$edad')";
if ($conn->query($sql) === TRUE) {
echo "se creo el usuario";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>