Android MySqli Вставить идентификатор с сеансами в PHP

У меня проблема с тестовым приложением для Android. У меня есть 2 формы, в форме 1 сначала вводятся имя, а затем фамилия пользователя, а затем в форме 2 вставляется их информация. Все это можно сделать с помощью одной формы, но я решил сделать это с помощью двух форм, потому что я хочу узнать, как использовать отношения между таблицами в базе данных.

Первая форма работает, данные загружаются в БД, но во второй форме проблема, я не загружаю данные.

Я попытался вставить идентификатор запроса первой формы и передать его с сессиями во втором файле .php, чтобы вставить его во внешний ключ.

Но это не работает.

Вы можете сказать мне, почему, в чем я не прав?

У меня есть 2 таблицы: 'Persone' и 'Persone2' В первой таблице «Персона» есть поля: идентификатор (PK), имя и фамилия (VARCHAR).

Вторая таблица Persone2 имеет следующие поля: idP2 (PK), FK_persone (внешний ключ), Team, Role and Numbers (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);
?>

Java-файл исследования Android, относящийся ко второй форме

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», а затем передать значение внутри внешнего ключа «FK_people» в таблице «Persone2». Если вы знаете, как передать первичный ключ первой таблицы во внешний ключ второй таблицы, я хотел бы это знать. В голову пришёл такой способ, но он не работает.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы пытаетесь получить последний идентификатор вставки перед вставкой строки. Так что измените код на что-то вроде ...

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);
}
?>

«это не работает» не особо помогает. У тебя есть удостоверение личности?

Nigel Ren 24.03.2018 11:40

Как ты это видишь? вы хотите открыть файл .php?

S. Bruziches 24.03.2018 11:43

Вы можете добавить echo $People_id; в приведенный выше код, чтобы проверить, установлен ли он.

Nigel Ren 24.03.2018 11:45

Да, id извлекается, но я не понимаю, что я сделал не так во втором php файле

S. Bruziches 24.03.2018 11:49

$_SESSION ['People_id'] установлен во втором скрипте? У вас есть ошибки? (Добавьте error_reporting(E_ALL); ini_set('display_errors', 1); в начало скрипта, чтобы на данный момент включить ошибки)

Nigel Ren 24.03.2018 11:53

Это дает мне ошибку: Примечание: неопределенная переменная: в /membri/provaord/NEW/R22.php в строке 40 Предупреждение: mysqli_close () ожидает, что параметр 1 будет mysqli, значение null указано в / members / provaord / NEW / R22. php в строке 40

S. Bruziches 24.03.2018 11:56

Выше код второго скрипта, я знаю, что я не установил $ _SESSION ['People_id'], вы также можете искать меня, я не знаю, куда его поместить, опять же под запросом на вставку?

S. Bruziches 24.03.2018 12:00

Я добавил обновление к ответу, но это указывает на то, что второй скрипт не улавливает, что это POST

Nigel Ren 24.03.2018 12:02

Я не думаю, что во втором сценарии вам нужно устанавливать $_SESSION ['People_id'], поскольку он должен быть установлен из первого сценария.

Nigel Ren 24.03.2018 12:05

Я сделал, как вы сказали, но это не работает, когда я нажимаю кнопку во второй форме, она возвращает мне <br />. Что это значит? Что я снова сделал не так?

S. Bruziches 24.03.2018 12:06

Сразу после session_start() добавьте print_r($_POST);

Nigel Ren 24.03.2018 12:09

Он говорит мне: Array ()

S. Bruziches 24.03.2018 12:13

Итак, что-то не так с тем, как вы вызываете эту страницу. Можете ли вы проверить, что она называется так же, как ваша первая страница.

Nigel Ren 24.03.2018 12:14

Извините, вы имеете в виду файл конфигурации?

S. Bruziches 24.03.2018 12:16

Я предполагаю, что это что-то в вашем приложении для Android. Но происходит то, что данные не достигают вашего PHP-кода.

Nigel Ren 24.03.2018 12:17

Возможно, ошибка в синтаксисе запроса на ввод данных?

S. Bruziches 24.03.2018 12:19

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

S. Bruziches 24.03.2018 12:19

Все ваши значения для запроса поступают из $ _POST, print_r() показал, что это пусто, поэтому он не достигает ни одного вашего кода!

Nigel Ren 24.03.2018 12:20

Мой код для Android приведен выше, это тот же код, который я использовал для первой формы, с той лишь разницей, что во второй таблице на 4 поля только 3 вводятся приложением для Android, четвертый FK_people вставляется с помощью php. Вместо этого в первой форме все данные вводятся приложением для Android.

S. Bruziches 24.03.2018 12:21

Возможно, после извлечения идентификатора мне следует сохранить приложение и передать его во вторую таблицу из приложения Android вместо PHP. Но не знаю как, как сохранить ID в приложении?

S. Bruziches 24.03.2018 12:24

Я не разработчик Android, я не знаю, как работает эта часть, и могу просто сказать, что ваша вторая страница не получает никаких данных.

Nigel Ren 24.03.2018 12:25

Хорошо, спасибо за помощь, Найджел Рен, я благодарен. Я хотел бы сказать вам последнее, если бы я мог передать данные, код второго скрипта, вы подумаете, что это нормально? Или вам нужно передать данные, чтобы узнать, есть ли другие ошибки?

S. Bruziches 24.03.2018 12:28

Вы можете обнаружить, что есть и другие ошибки, но поскольку ваш первый скрипт работает нормально, легче проверить, что отличается, чтобы помочь найти какие-либо ошибки.

Nigel Ren 24.03.2018 12:30

Другие вопросы по теме