Android MySqli在PHP中使用会话插入id

时间:2018-03-24 10:26:04

标签: php android-studio

我遇到了一个Android测试应用程序的问题。 我有2个表单,在表单1中首先输入用户名,然后输入用户的姓,然后在表单2中输入他们的信息。 所有这些都可以使用单个表单完成,但我决定使用2个表单来完成,因为我想学习如何使用数据库中表之间的关系。

第一种形式有效,数据加载到数据库上,但是第二种形式存在问题,我不加载数据。

我尝试插入第一个表单的Query的id,并将其与第二个文件.php中的会话一起传递,以将其插入外部键中。

但它不起作用。

你能告诉我为什么,我错了吗?

我有两张桌子:'Persone'和'Persone2' 第一个'Persone'表有字段:id(PK),Name和Surname(VARCHAR)

第二个表'Persone2'包含以下字段:idP2(PK),FK_persone(外键),团队,角色和数字(VARCHAR)

第一种形式的.php文件

<?php
session_start();
if($_SERVER['REQUEST_METHOD']=='POST'){

include 'C.php'; 

 $con = mysqli_connect($HostName,$HostUser,$HostPass,$DatabaseName);

 $Nome = $_POST['Nome'];
 $Cognome = $_POST['Cognome'];


 $CheckSQL = "SELECT * FROM Persone WHERE Nome = '$Nome'";

 $check = mysqli_fetch_array(mysqli_query($con,$CheckSQL));

 if(isset($check)){

 echo 'Utente già registrato';

 }
else{ 
$Sql_Query = "INSERT INTO Persone (Nome, Cognome) values ('$Nome','$Cognome')";

$People_id = mysqli_insert_id($con);
$_SESSION ['People_id'] = $People_id;

 if(mysqli_query($con,$Sql_Query))
{
 echo 'Registration Successfully';
}
else
{
 echo 'Something went wrong';
 }
 }
}
 mysqli_close($con);
?>

第二种形式的.php文件

<?php
session_start();
if($_SERVER['REQUEST_METHOD']=='POST'){

include 'C.php'; 

 $con = mysqli_connect($HostName,$HostUser,$HostPass,$DatabaseName);

 $Squadra = $_POST['Squadra'];
 $Ruolo = $_POST['Ruolo'];
 $Numero_maglia = $_POST['Numero_maglia'];


 $CheckSQL = "SELECT * FROM Persone, Persone2 WHERE Persone2.FK_persone = '" . ($_SESSION ['People_id']). "'";;

 $check = mysqli_fetch_array(mysqli_query($con,$CheckSQL));

 if(isset($check)){

 echo 'Utente già registrato';

 }
else{ 
$Sql_Query = "INSERT INTO Persone2 (FK_persone, Squadra, Ruolo, Numero_maglia) values ('" . ($_SESSION ['People_id']). "','$Squadra', '$Ruolo', '$Numero_maglia')";



 if(mysqli_query($con,$Sql_Query))
{
 echo 'Registration Successfully';
}
else
{
 echo 'Something went wrong';
 }
 }
}
 mysqli_close($con);
?>

与第二种形式相关的android研究的Java文件

import android.app.Activity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;


import android.app.ProgressDialog;

import android.os.AsyncTask;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;

import android.text.TextUtils;
import android.widget.Toast;
import java.net.FileNameMap;
import java.util.HashMap;

public class Activity2 extends AppCompatActivity {

    private EditText id, squadra, ruolo, numeromaglia;

    private Button registrazionee;

    //REGISTRAZIONE
    String Squadra_Holder, Ruolo_Holder, Numero_Maglia_Holder;
    String finalResult ;
    String HttpURLRegister = "http://provaord.altervista.org/NEW/R22.php";
    Boolean CheckEditText ;
    ProgressDialog progressDialog;
    HashMap<String,String> hashMap = new HashMap<>();
    HttpParse httpParse = new HttpParse();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_2);

       // id = (EditText)findViewById(R.id.editText6);
        squadra = (EditText)findViewById(R.id.editText7);
        ruolo = (EditText)findViewById(R.id.editText3);
        numeromaglia = (EditText)findViewById(R.id.editText4);

        registrazionee = (Button)findViewById(R.id.button55);

        registrazionee.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                // Checking whether EditText is Empty or Not
                CheckEditTextIsEmptyOrNot();

                if(CheckEditText){

                    // If EditText is not empty and CheckEditText = True then this block will execute.

                    UserRegisterFunction(Squadra_Holder, Ruolo_Holder, Numero_Maglia_Holder);

                }
                else {

                    // If EditText is empty then this block will execute .
                    Toast.makeText(Activity2.this, "Please fill all form fields.", Toast.LENGTH_LONG).show();

                }


            }
        });



    }





    //REGISTRAZIONE
    public void CheckEditTextIsEmptyOrNot(){

        Squadra_Holder = squadra.getText().toString();
        Ruolo_Holder = ruolo.getText().toString();
        Numero_Maglia_Holder = numeromaglia.getText().toString();



        if(TextUtils.isEmpty(Squadra_Holder) || TextUtils.isEmpty(Ruolo_Holder) || TextUtils.isEmpty(Numero_Maglia_Holder) )
        {

            CheckEditText = false;

        }
        else {

            CheckEditText = true ;
        }

    }





    //REGISTRATION
    @RequiresApi(api = Build.VERSION_CODES.CUPCAKE)
    public void UserRegisterFunction(final String Squadra, final String Ruolo, final String Numero_maglia){

        class UserRegisterFunctionClass extends AsyncTask<String,Void,String> {

            @Override
            protected void onPreExecute() {
                super.onPreExecute();




                progressDialog = ProgressDialog.show(Activity2.this,"Loading Data",null,true,true);
            }

            @Override
            protected void onPostExecute(String httpResponseMsg) {

                super.onPostExecute(httpResponseMsg);

                progressDialog.dismiss();

                Toast.makeText(Activity2.this,httpResponseMsg.toString(), Toast.LENGTH_LONG).show();



                if(httpResponseMsg.equalsIgnoreCase("Registration Successfully")){

                    finish();

                    Intent intent = new Intent(Activity2.this, Activity3.class);



                    startActivity(intent);

                }

            }

            //REGISTRATION
            @Override
            protected String doInBackground(String... params) {

                hashMap.put("Squadra",params[0]);

                hashMap.put("Ruolo",params[1]);

                hashMap.put("Numero_maglia",params[2]);



                finalResult = httpParse.postRequest(hashMap, HttpURLRegister);

                return finalResult;
            }
        }

        UserRegisterFunctionClass userRegisterFunctionClass = new UserRegisterFunctionClass();

        userRegisterFunctionClass.execute(Squadra, Ruolo, Numero_maglia);
    }





}

总之,我无法提取'Persone'表的主键值,然后在表'Persone2'中传递外键'FK_people'中的值。 如果您知道如何传递第二个表的外键中第一个表的主键,我想知道它。 我想到了这种做法,但它不起作用。

1 个答案:

答案 0 :(得分:0)

您在插入行之前尝试获取最后一个插入ID。所以将代码更改为类似......

if(mysqli_query($con,$Sql_Query))
{
    echo 'Registration Successfully';
    $People_id = mysqli_insert_id($con);
    $_SESSION ['People_id'] = $People_id;
}

在两个来源中,连接在脚本末尾关闭,但只有在打开时才应关闭。两个脚本都应该移动到...的块中

if($_SERVER['REQUEST_METHOD']=='POST'){

    // Rest of code...

 mysqli_close($con);
}
?>