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






Вы пытаетесь получить последний идентификатор вставки перед вставкой строки. Так что измените код на что-то вроде ...
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);
}
?>
Как ты это видишь? вы хотите открыть файл .php?
Вы можете добавить echo $People_id; в приведенный выше код, чтобы проверить, установлен ли он.
Да, id извлекается, но я не понимаю, что я сделал не так во втором php файле
$_SESSION ['People_id'] установлен во втором скрипте? У вас есть ошибки? (Добавьте error_reporting(E_ALL); ini_set('display_errors', 1); в начало скрипта, чтобы на данный момент включить ошибки)
Это дает мне ошибку: Примечание: неопределенная переменная: в /membri/provaord/NEW/R22.php в строке 40 Предупреждение: mysqli_close () ожидает, что параметр 1 будет mysqli, значение null указано в / members / provaord / NEW / R22. php в строке 40
Выше код второго скрипта, я знаю, что я не установил $ _SESSION ['People_id'], вы также можете искать меня, я не знаю, куда его поместить, опять же под запросом на вставку?
Я добавил обновление к ответу, но это указывает на то, что второй скрипт не улавливает, что это POST
Я не думаю, что во втором сценарии вам нужно устанавливать $_SESSION ['People_id'], поскольку он должен быть установлен из первого сценария.
Я сделал, как вы сказали, но это не работает, когда я нажимаю кнопку во второй форме, она возвращает мне <br />. Что это значит? Что я снова сделал не так?
Сразу после session_start() добавьте print_r($_POST);
Он говорит мне: Array ()
Итак, что-то не так с тем, как вы вызываете эту страницу. Можете ли вы проверить, что она называется так же, как ваша первая страница.
Извините, вы имеете в виду файл конфигурации?
Я предполагаю, что это что-то в вашем приложении для Android. Но происходит то, что данные не достигают вашего PHP-кода.
Возможно, ошибка в синтаксисе запроса на ввод данных?
$ Sql_Query = "INSERT INTO Persone2 (FK_persone, Squadra, Ruolo, Numero_maglia) values ('". ($ _SESSION [' People_id ']). "', '$ Squadra', '$ Ruolo', '$ Numero_maglia')" ;
Все ваши значения для запроса поступают из $ _POST, print_r() показал, что это пусто, поэтому он не достигает ни одного вашего кода!
Мой код для Android приведен выше, это тот же код, который я использовал для первой формы, с той лишь разницей, что во второй таблице на 4 поля только 3 вводятся приложением для Android, четвертый FK_people вставляется с помощью php. Вместо этого в первой форме все данные вводятся приложением для Android.
Возможно, после извлечения идентификатора мне следует сохранить приложение и передать его во вторую таблицу из приложения Android вместо PHP. Но не знаю как, как сохранить ID в приложении?
Я не разработчик Android, я не знаю, как работает эта часть, и могу просто сказать, что ваша вторая страница не получает никаких данных.
Хорошо, спасибо за помощь, Найджел Рен, я благодарен. Я хотел бы сказать вам последнее, если бы я мог передать данные, код второго скрипта, вы подумаете, что это нормально? Или вам нужно передать данные, чтобы узнать, есть ли другие ошибки?
Вы можете обнаружить, что есть и другие ошибки, но поскольку ваш первый скрипт работает нормально, легче проверить, что отличается, чтобы помочь найти какие-либо ошибки.
«это не работает» не особо помогает. У тебя есть удостоверение личности?