Salve a tutti, non so se questo è il forum adatto per la mia domanda, ma spero che ci sia qualcuno che può darmi una mano.
Io sto creando un app android di prova con un Database Relazionale e quindi ci sono 2 tabelle collegate fra loro con una chiave esterna.
Il mio problema è che non riesco a prelevare il valore della chiave primaria e utilizzarlo nella mia app per salvarlo nel campo della chiave esterna.
Nel dettaglio, nella mia App Android ci sono 2 Form (in due activity differenti) in cui le informazioni vengono inserite e salvate in un database MySQL.
Il database ha una tabella per il primo Form e una tabella per il secondo Form, queste due tabelle sono collegate e quindi la seconda tabella ha una chiave esterna associata alla chiave primaria della prima tabella che viene inserita con il primo modulo.
Quello che non riesco a fare è che una volta che ho inserito i dati nella prima tabella e ho ottenuto la chiave primaria tramite mysqli Insert_id (), non so come passare il valore della variabile in $ People_id all'interno di un edittext presente nel secondo modulo .
Di seguito vi lascio il mio codice Android, c'è un problema nel codice .JAVA del secondo Form (Activity2) perché i dati inseriti non arrivano allo script PHP.
Quindi, riassumendo il problema, qualcuno sa come passare la chiave primaria ottenuta con mysqli insert id nel file php e inserire questo valore nel presente di EditText nel secondo Form nell'Activity2?
Il primo Form salva i dati nella tabella 'Persone', i campi in questa tabella sono:
id (PK)
Nome e Cognome (VARCHAR)
Il secondo Form salva i dati nella tabella 'Persone2', i campi in questa tabella sono:
idP2 (PK)
FK_persone (chiave esterna)
Squadra, Ruolo e Numero_maglia (VARCHAR)
PS. Nel secondo modulo i dati vengono salvati nella tabella 'Persone2', i campi 'Ruolo', 'Squadra' e 'Numero_maglia' sono inseriti dall'utente, ma il campo 'FK_persone' deve essere già inserito (il valore della variabile deve essere there $ _SESSION ['People_id'] = $ People_id; valore che ottengo dallo script PHP del primo modulo).
Il primo Form funziona, i dati vengono salvati nel database e riesco a estrarre con l'echo il valore della variabile $_People (che ottengo con insert_id() ) , ma il secondo Form non funziona, c'è un problema nel file .JAVA di Android Studio, ma non capisco quale problema :(
PS. Se avete un altro metodo per collegare 2 tabelle in un database MySQL con un app android, mi farebbe piacere avere informazioni sul vostro metodo.
Sul web non ho trovato nessun tutorial che spiega come creare un db relazionale e che viene usato in un app android con un Database MYSQL, ce ne sono solo con MySQLite.
Ecco il codice PHP del primo form :
Codice PHP:
<?phpsession_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')";
if(mysqli_query($con,$Sql_Query)){ echo 'Registration Successfullyculo'; $People_id = mysqli_insert_id($con); $_SESSION ['People_id'] = $People_id; }else{ echo 'Something went wrong'; } }
mysqli_close($con);}
?>
Ecco il codice PHP del secondo Form:
Codice PHP:
<?phperror_reporting(E_ALL); ini_set('display_errors', 1);session_start();print_r($_POST);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);}
?>
Ecco il codice Java della prima Activity, in cui è presente il primo Form :
codice:
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 Activity1 extends AppCompatActivity {
private EditText nome, cognome;
private Button registrazione, login;
//REGISTRAZIONE
String F_Name_Holder, L_Name_Holder;
String finalResult ;
String HttpURLRegister = "http://provaord.altervista.org/NEW/RRR.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_1);
nome = (EditText)findViewById(R.id.editText6);
cognome = (EditText)findViewById(R.id.editText7);
registrazione = (Button)findViewById(R.id.button5);
login = (Button)findViewById(R.id.button3);
registrazione.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(F_Name_Holder,L_Name_Holder);
}
else {
// If EditText is empty then this block will execute .
Toast.makeText(Activity1.this, "Please fill all form fields.", Toast.LENGTH_LONG).show();
}
}
});
}
//REGISTRAZIONE
public void CheckEditTextIsEmptyOrNot(){
F_Name_Holder = nome.getText().toString();
L_Name_Holder = cognome.getText().toString();
if(TextUtils.isEmpty(F_Name_Holder) || TextUtils.isEmpty(L_Name_Holder) )
{
CheckEditText = false;
}
else {
CheckEditText = true ;
}
}
//REGISTRATION
@RequiresApi(api = Build.VERSION_CODES.CUPCAKE)
public void UserRegisterFunction(final String Nome, final String Cognome){
class UserRegisterFunctionClass extends AsyncTask<String,Void,String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = ProgressDialog.show(Activity1.this,"Loading Data",null,true,true);
}
@Override
protected void onPostExecute(String httpResponseMsg) {
super.onPostExecute(httpResponseMsg);
progressDialog.dismiss();
Toast.makeText(Activity1.this,httpResponseMsg.toString(), Toast.LENGTH_LONG).show();
if(httpResponseMsg.equalsIgnoreCase("Registration Successfully")){
finish();
Intent intent = new Intent(Activity1.this, Activity2.class);
startActivity(intent);
}
}
//REGISTRATION
@Override
protected String doInBackground(String... params) {
hashMap.put("Nome",params[0]);
hashMap.put("Cognome",params[1]);
finalResult = httpParse.postRequest(hashMap, HttpURLRegister);
return finalResult;
}
}
UserRegisterFunctionClass userRegisterFunctionClass = new UserRegisterFunctionClass();
userRegisterFunctionClass.execute(Nome,Cognome);
}
}
Ecco il codice .JAVA della seconda Activity in cui è presente il secondo Form :
codice:
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 Activity1 extends AppCompatActivity {
private EditText nome, cognome;
private Button registrazione, login;
//REGISTRAZIONE
String F_Name_Holder, L_Name_Holder;
String finalResult ;
String HttpURLRegister = "http://provaord.altervista.org/NEW/RRR.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_1);
nome = (EditText)findViewById(R.id.editText6);
cognome = (EditText)findViewById(R.id.editText7);
registrazione = (Button)findViewById(R.id.button5);
login = (Button)findViewById(R.id.button3);
registrazione.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(F_Name_Holder,L_Name_Holder);
}
else {
// If EditText is empty then this block will execute .
Toast.makeText(Activity1.this, "Please fill all form fields.", Toast.LENGTH_LONG).show();
}
}
});
}
//REGISTRAZIONE
public void CheckEditTextIsEmptyOrNot(){
F_Name_Holder = nome.getText().toString();
L_Name_Holder = cognome.getText().toString();
if(TextUtils.isEmpty(F_Name_Holder) || TextUtils.isEmpty(L_Name_Holder) )
{
CheckEditText = false;
}
else {
CheckEditText = true ;
}
}
//REGISTRATION
@RequiresApi(api = Build.VERSION_CODES.CUPCAKE)
public void UserRegisterFunction(final String Nome, final String Cognome){
class UserRegisterFunctionClass extends AsyncTask<String,Void,String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = ProgressDialog.show(Activity1.this,"Loading Data",null,true,true);
}
@Override
protected void onPostExecute(String httpResponseMsg) {
super.onPostExecute(httpResponseMsg);
progressDialog.dismiss();
Toast.makeText(Activity1.this,httpResponseMsg.toString(), Toast.LENGTH_LONG).show();
if(httpResponseMsg.equalsIgnoreCase("Registration Successfully")){
finish();
Intent intent = new Intent(Activity1.this, Activity2.class);
startActivity(intent);
}
}
//REGISTRATION
@Override
protected String doInBackground(String... params) {
hashMap.put("Nome",params[0]);
hashMap.put("Cognome",params[1]);
finalResult = httpParse.postRequest(hashMap, HttpURLRegister);
return finalResult;
}
}
UserRegisterFunctionClass userRegisterFunctionClass = new UserRegisterFunctionClass();
userRegisterFunctionClass.execute(Nome,Cognome);
}
}
Se sapete darmi una mano ve ne sarei molto grato, grazie.