我需要在一个mysql数据库中插入一些从Android应用程序中恢复的数据并将其插入到一些不同的表中。
我创建了一个用户的注册页面/活动,它可以工作,但我试图从其他活动插入其他数据,我无法将它们插入到我的数据库中。
这是我的代码:
RegisterUserClass是翻译的类。
RegisterBody.java - >在这种情况下,我需要将用户的id保存到表中,这就是我保存电子邮件和密码的原因。
private static final String REGISTER_URL = "http://10.0.2.2/sFitness/RegisterBody.php";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register_body);
etWaist =(EditText) findViewById(R.id.etWaist);
etHips =(EditText) findViewById(R.id.etHips);
etBreast =(EditText) findViewById(R.id.etBreast);
etWrist=(EditText) findViewById(R.id.etWrist);
etWeight=(EditText)findViewById(R.id.etWeight);
etHeight=(EditText)findViewById(R.id.etHeight);
bNext = (Button)findViewById(R.id.bNext);
bNext.setOnClickListener(this);
Bundle b= this.getIntent().getExtras();
array=b.getStringArray(null);
name=array[0];
surname=array[1];
age=array[2];
email=array[3];
password=array[4];
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.bNext:
Toast.makeText(getApplicationContext(), "All ok", Toast.LENGTH_LONG).show();
registerUser();
break;
}
}
private void registerUser() {
String waist = etWaist.getText().toString();
String hips = etHips.getText().toString();
String breast = etBreast.getText().toString();
String wrist = etWrist.getText().toString();
String weight = etWeight.getText().toString();
String height = etHeight.getText().toString();
register(waist, hips, breast, wrist, weight, height);
}
private void register(String waist, String hips, String breast, String wrist, String weight,String height) {
class RegisterUser extends AsyncTask<String, Void, String> {
ProgressDialog loading;
RegisterUserClass ruc = new RegisterUserClass();
@Override
protected void onPreExecute() {
super.onPreExecute();
loading = ProgressDialog.show(RegisterBody.this, "Please wait...", null, true, true);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
loading.dismiss();
Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();
}
@Override
protected String doInBackground(String... params) {
HashMap<String, String> data = new HashMap<String, String>();
data.put("waist", params[0]);
data.put("hips", params[1]);
data.put("breast", params[2]);
data.put("wrist", params[3]);
data.put("weight", params[4]);
data.put("height", params[5]);
String result = ruc.sendPostRequest(REGISTER_URL, data);
return result;
}
}
RegisterUser ru = new RegisterUser();
ru.execute(waist,hips,breast,wrist,weight,height, email, password);
Bundle b=new Bundle();
b.putStringArray(null, new String[]{name, surname, age, email, password,waist,hips,breast,wrist,weight,height});
Intent in=new Intent(this,ChooseDiet.class);
in.putExtras(b);
startActivity(in);
}
RegisterBody.php
if($_SERVER['REQUEST_METHOD']=='POST')
{
$waist = $_POST["waist"];
$hips = $_POST["hips"];
$breast = $_POST["breast"];
$wrist = $_POST["wrist"];
$weight = $_POST["weight"];
$height = $_POST["height"];
$email = $_POST["email"];
$password = $_POST["password"];
$conn = mysqli_connect("localhost","root","","sfitness") or die("Error " . mysqli_error($conn));
$sql="SELECT ID_Person FROM Person WHERE email=".$email." AND password=".$password."";
$id_person=mysqli_query($conn,$sql);
if (!$sql)
{
echo 'Could not run query: ' . mysql_error();
exit;
}
$id_person = mysql_fetch_row($sql);
$query ="INSERT INTO Body
(Waistline,Hips,Breast,
Wrist,Height,ID_person)
values('$waist','$hips','$breast',
'$wrist','$weight','$height','$id_peroson')";
$rows=mysql_query($query,$conn) or die("query fallita");
mysql_close($conn);
if($rows>0)
echo "Registrazione avvenuta correttamente";
else
echo "Registrazione fallita";
}
else
{
echo "Error!!";
}
我没有错误,但数据不会保存到表格中..为什么?
答案 0 :(得分:1)
确定已经格式化了INSERT查询,因此它更易读,错误很明显。它们通常是在您使用代码的一些合理格式时。
INSERT查询提到了6列,设置了7个参数
您还有$id_person
$ID_Peroson
$query ="INSERT INTO Body
(Waistline,Hips,Breast,
Wrist,Height,ID_person)
values('$waist','$hips','$breast',
'$wrist','$weight','$height','$id_person')";
$res = mysqli_query($query,$conn);
if ($res === FALSE ){
echo mysqli_error($conn);
exit;
}
将Weight
添加到列列表中,或从参数列表中删除$weight
。
附加说明;另请注意@JayBlanchards关于散列密码和使用准备和参数化查询的评论
$query ="INSERT INTO Body
(Waistline,Hips,Breast,Wrist,Weight,Height,ID_person)
values(?,?,?,?,?,?,?)";
$stmt = mysqli_prepare($query);
if ( $stmt === FALSE ) {
mysqli_error($conn);
exit;
}
mysqli_stmt_bind_param('ssssssi', '$waist','$hips','$breast',
'$wrist','$weight','$height','$id_person');
$result = mysqli_stmt_execute($stmt);
if ( $result === FALSE ){
echo $mysqli_stmt_error($stmt);
exit;
}
答案 1 :(得分:0)
我找到了解决问题的方法。
在 java 文件中,我修改此部分以添加:
data.put("email", email);
data.put("password", password);
除了 php 文件外,我还修改了我的代码:
$conn = mysql_connect("127.0.0.1","root","") or die("DBMS non disponibile");
mysql_select_db("sfitness") or die("Database non disponibile");
$sql="SELECT * FROM person WHERE Email='$email' AND Password='$password'";
$result=mysql_query($sql,$conn);
if (mysql_num_rows($result)==1){
$row = mysql_fetch_array($result);
$id_person=$row['ID_Person'];
}
$query ="INSERT INTO Body (Waistline, Hips, Breast, Wrists, Weight, Height, ID_person) values('$waist','$hips','$breast','$wrist','$weight','$height','$id_person')";
$rows=mysql_query($query,$conn) or die("query fallita");
mysql_close($conn);
if($rows>0)
echo "Correct registration";
else
echo "Registration failed";
现在使用此代码,感谢所有