Evitare perdita dati in uscita da form

Raccoglitore di domande e risposte relative a ScriptCase, il generatore di codice php per lo sviluppo rapido di applicazioni.
Regole del forum
Nel forum è vietato fare pubblicità senza avere l'autorizzazione dello staf di Netspecial.
Rispondi
Giovannino
Messaggi: 116
Iscritto il: 06 ott 2014, 08:56

Evitare perdita dati in uscita da form

Messaggio da Giovannino » 17 nov 2022, 10:29

Ciao a tutti,
mi piacerebbe evitare il problema di quando un utente inserisce o modifica dei dati in un form e poi per errore o altro esce con tasto precedente o in altro modo senza fare il salvataggio .
C'è qualche funzione automatica che può evitare che questo succeda ?
Grazie

Fabio
Messaggi: 440
Iscritto il: 20 feb 2014, 11:43

Re: Evitare perdita dati in uscita da form

Messaggio da Fabio » 17 nov 2022, 13:46

Ciao,
in fase di inserimento di un nuovo record non mi viene in mente alcuna soluzione automatica.
Forse con codice Javascript scritto a mano si potrebbe aprire un alert del tipo "Dati non salvati, sei sicuro di voler cambiare pagina?".

In caso di aggiornamento è più semplice: potresti eseguire una funzione di aggiornamento sull'evento AJAX onchange di ogni singolo campo.
In qiuesto modo anche cambiando pagina senza salvare i dati sarebbero aggiornati.

Giovannino
Messaggi: 116
Iscritto il: 06 ott 2014, 08:56

Re: Evitare perdita dati in uscita da form

Messaggio da Giovannino » 17 nov 2022, 14:00

Ciao Fabio e grazie della rispo.
Stavo provando ad applicare questa soluzione che ho trovato in vecchi post del forum.
Ma purtroppo non cambia nulla . Con tasto redir a precedente form/grid perdo i dati modificati sia in insert che edit.
Purtroppo io non capisco se il codice qui sotto è standard o se deve esser modificato per la mia form.

Add javascript for Form->OnSubmit so there will be no prompt if the record is saved:

function sc_form_onsubmit()
{
Haschanged = 0;
}



For every field that you want to “monitor” add javascript Field->OnChange

function sc_MyField_onchange()
{
Haschanged = 1;
}

OnApplicationInit
//Close PHP
?>
<script>
var Haschanged = 0;
if(window.addEventListener)
window.addEventListener('beforeunload', function( event ) {if(Haschanged == 1) event.returnValue = 'Message to display when leaving';});
else
window.attachEvent('beforeunload', function( event ) {if(Haschanged == 1) event.returnValue = 'Message to display when leaving';});
</script>
<?php
//Reopen PHP

rino
Messaggi: 624
Iscritto il: 18 giu 2015, 15:42
Località: Pinerolo
Contatta:

Re: Evitare perdita dati in uscita da form

Messaggio da rino » 01 dic 2022, 12:15

Giovannino ha scritto: 17 nov 2022, 10:29 Ciao a tutti,
mi piacerebbe evitare il problema di quando un utente inserisce o modifica dei dati in un form e poi per errore o altro esce con tasto precedente o in altro modo senza fare il salvataggio .
C'è qualche funzione automatica che può evitare che questo succeda ?
Grazie
non per polemica

se ho capito bene si tratta del uso del tasto 'indietro' posto sul menu del browser .
NON esiste una vera soluzione per le finestre non popup e il motivo mi pare ovvio va quindi responsabilizzato l'utente, in fondo qualcosa dovrà pur fare o si pretende che siano tutte macchine?
Polemiche a parte l'utente deve essere libero di fare le sue scelte e di risponderne , ci sono dei limiti ai controlli e a certi automatismi che si possono attuare specie in ambienti "aperti" come quelli dei browser o no?
Rino Lo Turco
Consulente Informatico; Analista e Sviluppatore; ex IT Manager; Cons. Direzionale di Organizzazione; Consulente Tecnico legale; Esperto protezione dati personali; Internet Service Provider
felice utente e fruitore di ScriptCase

Giovannino
Messaggi: 116
Iscritto il: 06 ott 2014, 08:56

Re: Evitare perdita dati in uscita da form

Messaggio da Giovannino » 01 dic 2022, 14:17

Ciao Rino,
grazie. Sono d'accordo ma come dicono gli inglesi ... è meglio un approccio idiot proof ;-)

Se può essere utile a qualcuno nel codice del bottone di Precedente ho inserito questo.

var ans = confirm("Vuoi salvare le tue modifiche ?");
if(ans == true)
{
nm_atualiza('alterar');
//return false;
window.location.replace("../grid_pipeline/");
}
else
{
window.location.replace("../grid_pipeline/");
}

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti