Form multipagina con campi già compilati se presenti

  • Creatore Discussione Creatore Discussione Maures
  • Data di inizio Data di inizio

Maures

Utente Attivo
25 Mar 2015
45
0
0
Buongiorno a tutti,
sto lavorando a un form su diverse pagine e sto cercando la soluzione migliore per poter passare i dati.

Il sito che devo sistemare è composto da diverse pagine form che si richiamano in successione e che concorrono a popolare il record di una tabella.

Es.
pagina uno.php ha dei campi e cliccando sul pulsante submit, mando in POST i dati alla pagina due.php che li carica nel record relativo, e così via...

Sono riuscito a fare in modo, usando query e GET a fare in modo che tornando indietro di una pagina, i campi siano sempre compilati, ma tornando ulteriormente indietro non funziona.

Sto quindi rivalutando la mia scelta (di cui non ero già molto convinto) e vorrei sapere come fare in modo che andando avanti e indietro nelle pagine di questo form i campi siano sempre compilati, se nel record della tabella sono presenti i relativi dati.

Ps. json non è attivo, quindi non posso usarlo!
 
ciao
se non ho capito male quello che vuoi fare, cioè tornando inditro al form ricordarti quello che hai inserito nei vari campi di input, allora devi ricorrere alle sessioni.
ti schematizzo
PHP:
<?php
session_start();//questa deve essere la prima istuzione in assoluto, prima del doctype ecc.. nemmeno uno spazio prima del tag php
/*deve essere presente in tutte le pagine dove usi le sessioni*/
?>
nella pagina in cui ricevi i $_POST
PHP:
<?php
//....
if(isset($_POST['pinco'])){$_SESSION['pinco']=$_POST['pinco'];}else{$_SESSION['pinco']="";}
//... e tutto quello che devi fare nella pagina
?>
poi nella pagina del form dove hai il campo di input pinco
PHP:
<?php
//......
if(isset($_SESSION['pinco'])){$pinco=$_SESSION['pinco'];}else{$pinco="";}
//....
?>
<form action="dove_vuoi" method="post">
  <!.... -->
  <input type="text" name="textfield" value="<?php echo $pinco; ?>">
  <!.... -->
</form>
in questo modo se es nel campo pinco hai scritto asdrubale e dai il submit, quando torni indietro ti ritroverai il campo pinco gia compilato col valore asdrubale
 
ciao
se non ho capito male quello che vuoi fare, cioè tornando inditro al form ricordarti quello che hai inserito nei vari campi di input, allora devi ricorrere alle sessioni.
ti schematizzo
PHP:
<?php
session_start();//questa deve essere la prima istuzione in assoluto, prima del doctype ecc.. nemmeno uno spazio prima del tag php
/*deve essere presente in tutte le pagine dove usi le sessioni*/
?>
nella pagina in cui ricevi i $_POST
PHP:
<?php
//....
if(isset($_POST['pinco'])){$_SESSION['pinco']=$_POST['pinco'];}else{$_SESSION['pinco']="";}
//... e tutto quello che devi fare nella pagina
?>
poi nella pagina del form dove hai il campo di input pinco
PHP:
<?php
//......
if(isset($_SESSION['pinco'])){$pinco=$_SESSION['pinco'];}else{$pinco="";}
//....
?>
<form action="dove_vuoi" method="post">
  <!.... -->
  <input type="text" name="textfield" value="<?php echo $pinco; ?>">
  <!.... -->
</form>
in questo modo se es nel campo pinco hai scritto asdrubale e dai il submit, quando torni indietro ti ritroverai il campo pinco gia compilato col valore asdrubale

si, più o meno è quello che voglio fare, ma ci sono due complicazioni:

1) nel codice è prevista la possibilità di riprendere una sessione lasciata a metà
es: sono a pagina 5 del form multipagina e mi si chiude il browser. riaprendo la prima pagina potrò cliccare su un link che mi rimanda alla pagina 5 da compilare (da cui posso tornare indietro trovando i campi compilati)

2) in un'altra pagina c'è un link per modificare tutti i dati inseriti, che rimanda alla prima pagina del form (che dovrà avere i campi compilati per quella e le pagine successive)

come vedi è un pochino più complesso.

stavo pensando di mettere tutto dentro un array di volta in volta, perché la prima idea era fare una query sulla tabella dei dati inseriti e recuperare tutti i campi (vuoti o no) e stampare solo quelli valorizzati: il problema è che il record ha oltre 30 campi, quindi diventerebbe poco efficiente alla lunga.
 
ciao
si è vero è più complicato non solo ricordarsi a browser chiuso (per quello forse basterebbe usare i cookie) ma, da quanto ho capito la situazione è questa
1) hai un sito col multiform
2) sofonisba accede alla prima pagina e compila il form 1 e da il submit accedendo al form 2 (mi limito a 2 perchè poi è lo stesso)
3) sofonisba per motivi suoi chiude il pc
4) sofonisba riaccede e deve trovarsi già i campi di imput che ha compilato gia valorizzati
giusto sin qui?
se è cosi (forse) potresti procedere in questa maniera:
1) sofonisba accede essendo la prima volta che si collega accede al form 1
2) compila o tutti o in parte i campi di input e da il submit per accedere al seguito, essendo la prima volta accederà al form 2
ti schetaizzo in pseudo codice
nel form 1
se il cookie['id_record'] NON esiste: è la prima volta che accede e quindi fai compilare il form vuoto
se il cookie['id_record'] esiste: sofonisba aveva interrotto la compilazione, quindi fai una query alla tabella del db estrendo i dati relativi ai campi di input del form 1 e li valorizzi

nel form 2
se il cookie['id_record'] NON esiste:
fai l'insert in tabella dei dati provenienti dal form 1, prelevi l'id del record e crei il cookie['id_record']=mysqli_insert_id()
se il cookie['id_record'] esiste:
uppi il record con i dati del form 1 (se modificati) UPDATE tabella SET.... WHERE id_record=cookie['id_record']
estrai, se esistono, dalla tabella i dati relativi ai campi di input del form 2 e li valorizzi

e cosi procede per il form 3 ecc...
poi forse ti conviene creare anche un cookie relativo al numero di form compilato in modo che se sofonisba si è fermata al form 2 non possa accedere al form 4 senza essere passata dal form 3

in questo modo sofonisba accederà sempre al suo record e così gli altri eventuali utenti
però il metodo ha un difetto, se sofonisba ha due pc e opera prima sul pc A e si interrompe operando poi dal pc B (dove non esiste il cookie) riparte da zero

forse (ma questo devi deciderlo tu) il sistema più sicuro è che chi compili il multiform sia un utente registrato (password e/o username) e creare una tabella in modo da ricordarsi cosa ha fatto sofonisba.

se non ho capito, butta via tutto. comunque la mia idea (balzana) deve essere provata sul campo, buon lavoro
 
ciao
si è vero è più complicato non solo ricordarsi a browser chiuso (per quello forse basterebbe usare i cookie) ma, da quanto ho capito la situazione è questa
1) hai un sito col multiform
2) sofonisba accede alla prima pagina e compila il form 1 e da il submit accedendo al form 2 (mi limito a 2 perchè poi è lo stesso)
3) sofonisba per motivi suoi chiude il pc
4) sofonisba riaccede e deve trovarsi già i campi di imput che ha compilato gia valorizzati
giusto sin qui?
se è cosi (forse) potresti procedere in questa maniera:
1) sofonisba accede essendo la prima volta che si collega accede al form 1
2) compila o tutti o in parte i campi di input e da il submit per accedere al seguito, essendo la prima volta accederà al form 2
ti schetaizzo in pseudo codice
nel form 1
se il cookie['id_record'] NON esiste: è la prima volta che accede e quindi fai compilare il form vuoto
se il cookie['id_record'] esiste: sofonisba aveva interrotto la compilazione, quindi fai una query alla tabella del db estrendo i dati relativi ai campi di input del form 1 e li valorizzi

nel form 2
se il cookie['id_record'] NON esiste:
fai l'insert in tabella dei dati provenienti dal form 1, prelevi l'id del record e crei il cookie['id_record']=mysqli_insert_id()
se il cookie['id_record'] esiste:
uppi il record con i dati del form 1 (se modificati) UPDATE tabella SET.... WHERE id_record=cookie['id_record']
estrai, se esistono, dalla tabella i dati relativi ai campi di input del form 2 e li valorizzi

e cosi procede per il form 3 ecc...
poi forse ti conviene creare anche un cookie relativo al numero di form compilato in modo che se sofonisba si è fermata al form 2 non possa accedere al form 4 senza essere passata dal form 3

in questo modo sofonisba accederà sempre al suo record e così gli altri eventuali utenti
però il metodo ha un difetto, se sofonisba ha due pc e opera prima sul pc A e si interrompe operando poi dal pc B (dove non esiste il cookie) riparte da zero

forse (ma questo devi deciderlo tu) il sistema più sicuro è che chi compili il multiform sia un utente registrato (password e/o username) e creare una tabella in modo da ricordarsi cosa ha fatto sofonisba.

se non ho capito, butta via tutto. comunque la mia idea (balzana) deve essere provata sul campo, buon lavoro

non ho mai usato molto i cookie, forse potrebbe essere questa la volta buona.

per quel che riguarda i campi compilati da un form con l'altro, uso le sessioni e fin qui tutto bene. inoltre a ogni form eccetto il primo viene prima creato il record (nella seconda pagina-form), con controllo che non esista già nel db (doppioni nel caso fossi nella pagina 2, tornassi alla pagina 1 e poi modificassi i dati)
nelle pagine successive, faccio un update del record inserito con i campi compilati di volta in volta con un campo aggiornato in base alla pagina in cui sono.

quando invece arrivo al form dopo aver interrotto l'inserimento dei dati, ho già un link che mi rimanda alla pagina relativa allo step e una variabile passata con get per indicare che non è un inserimento nuovo, ma una prosecuzione.
pensavo quindi di mettere in ogni pagina una query in cui recuperò tutti i dati e li valorizzo come SESSION, ma ho paura poi che si faccia confusione con quelli dell'inserimento normale.
 
ciao
prova a costruire le sessioni in questo modo (anche se penso che sia un po' un casino)
$_SESSION['nuovo']['dato_1']
$_SESSION['nuovo']['dato_2']
$_SESSION['nuovo']['dato_3']
.....
$_SESSION['continua']['dato_1']
$_SESSION['continua']['dato_2']
$_SESSION['continua']['dato_3']
......
però se,come hai detto, vuoi che uno possa proseguire anche dopo essere uscito dal bw per 'ricordare' devi usare i cookie, le sessioni esistono sino a che non chiudi il bw
e comunque devi ricordarti non solo che dopo la chiusura del bw hai riaperto e stai proseguendo, ma anche quale record stava usando l'utente altrimenti come fa php a sapere cosa deve aggiungere o aggiornare
 

Discussioni simili