Form multipagina con campi già compilati se presenti

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!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

Maures

Utente Attivo
25 Mar 2015
45
0
0
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.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

Maures

Utente Attivo
25 Mar 2015
45
0
0
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.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
Autore Titolo Forum Risposte Data
M Array valorizzato in form multipagina PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
K Form che manda dati doppi PHP 1
K Problema form update PHP 2
Elisacau [Contact form 7] Inserire Numero auto incrementante WordPress 1
K form Inserimento record mysql PHP 2
I Form con selettore HTML e CSS 0
K [php]form invio dati PHP 0
G form invio multiplo con checkbox PHP 12
nivaria.achinet Intercettare form solo dopo invio Javascript 1
D Form contatti non funzionante HTML e CSS 0
A Stampare dati da form PHP 8
M Unire 2 funzioni per l'invio di un form e con l'apertura di un div Javascript 0
I Form HTML e CSS 17
otto9due $_FILE non passa i dati dal form PHP 1
M Form: come tornare ai campi già compilati dopo invio PHP 1
G Invio form con PHP PHP 3
felino Form action costum e parametri in queryString WordPress 1
M Come recuperare molteplici input form PHP 1
M Collegamento tra form html e script php PHP 4
L form immagini per il database PHP 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
L inserimento form dati multipli ? PHP 0
L Problemi form Pagina php HTML e CSS 3
Cosina Creare bottone delete in form upload PHP 5
Cosina Creare bottone delete in form upload PHP 1
D Devo far funzionare un form di contatti PHP 4
B form gestione input PHP 2
V PHP form intersecate PHP 0
8 Javascript - PDF Form Javascript 0
J Form inserimento dati in database Ajax 1
E Gestione profilo utente tramite Form PHP 3
R [C#] Form principale si blocca mentre un altro Thread lavora .NET Framework 0
M Problema con controllo form in real time jQuery 6
D Form validazione Javascript 2
R form recovery pass PHP 0
V Symfony e i form PHP 3
M form con checkbox PHP 8
S come aggiustare un form di contatto? HTML e CSS 3
F query e form con select multipla PHP 17
MarcoGrazia Verifica di una stringa o di un nome proveniente da form Snippet PHP 0
A Inserimento dati nel database tramite form + altre operazioni PHP 18
websilvia Contact form using Bootstrap 3.3.4 PHP 8
Alex_70 Button non funziona nella form PHP 2
C Form email php su pagina index.html? PHP 21
W Rinominare Documenti Con Form Asp Classic ASP 9
S Invio email da form PHP 8
L form multipla php sql,errore in inserimento MySQL 0
L inviare i dati di un form ad un database PHP 6

Discussioni simili