首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >id与MySqli会话

id与MySqli会话
EN

Stack Overflow用户
提问于 2018-03-24 10:26:04
回答 1查看 54关注 0票数 0

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

第一个表单工作,数据被加载到DB上,但是在第二个表单中有一个问题,我不加载数据。

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

但不起作用。

你能告诉我为什么,我怎么了?

我有两个表:'Persone‘和'Persone2’第一个'Persone‘表有字段: id (PK)、Name和姓氏(VARCHAR)

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

第一个表单的.php文件

代码语言:javascript
复制
<?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文件

代码语言:javascript
复制
<?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文件

代码语言:javascript
复制
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‘表的主键的值,然后在表’Persone 2‘中的外键'FK_people’内传递值。如果您知道如何在第二个表的外键中传递第一个表的主键,我想知道它。这样做的想法,但它不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-24 10:35:15

在插入行之前,尝试获取最后一个插入ID。所以把代码改为.

代码语言:javascript
复制
if(mysqli_query($con,$Sql_Query))
{
    echo 'Registration Successfully';
    $People_id = mysqli_insert_id($con);
    $_SESSION ['People_id'] = $People_id;
}

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

代码语言:javascript
复制
if($_SERVER['REQUEST_METHOD']=='POST'){

    // Rest of code...

 mysqli_close($con);
}
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49463603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档