Messaggio Conferma

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
magre66
Messaggi: 54
Iscritto il: 14 mar 2017, 08:04

Messaggio Conferma

Messaggio da magre66 » 06 lug 2024, 17:22

Buongiorno a tutti,
ho una control da cui importo un file.
Nell'evento OnValidate, tramite una query select count verifico se una parte specifica del nome esiste già nel database assegnado un valore alla variabile $nrf. Se $nrf>0 ho bisogno che appaia un messaggio che chiede se proseguire o no. Se SI prosegue con il codice se NO messaggio di operazione annullata.
L'evento OnValidate non accetta la macro sc_confirm
Ho usato javascript per visualizzare l'alert ma non funziona la scelta

Codice: Seleziona tutto

if ($nrf > 0) {
    echo "<script>
    var conferma = confirm('File già stato importato. Procedere comunque?');
    if (conferma) {
        window.location.href = window.location.href + '&confirm=1';
    } else {
        window.location.href = window.location.href + '&confirm=0';
    }
    </script>";
    exit; 
}

if (isset($_GET['confirm'])) {
    $confirm = $_GET['confirm'];
    
    if ($confirm == 0) {
        sc_error_message("Operazione annullata");
        sc_error_exit();
    } else {
        // Continuare con il codice successivo
       
    }
}

Qualcuno ha già affrontato la problematica di dover confermare una scelta a metà di un codice e l'ha risolta?

Grazie
Mario Greco

Lorenzo1975
Messaggi: 15
Iscritto il: 07 apr 2020, 12:08

Re: Messaggio Conferma

Messaggio da Lorenzo1975 » 06 lug 2024, 17:33

Ciao
Io farei così:
-Non userei onvalidate, ma utilizzerei un pulsante Ajax.
-Nel PHP del pulsante faccio le verifiche sul db e poi chiamo una funzione JavaScript
-Nella funzione JS uso sweetAlert2 per il messaggio di conferma e se ho conferma uso JS o Jquery per forzare il click su un secondo pulsante (nascosto in precedenza con JS) per gestire il PHP di conferma.
Fammi sapere se può esserti utile come soluzione

magre66
Messaggi: 54
Iscritto il: 14 mar 2017, 08:04

Re: Messaggio Conferma

Messaggio da magre66 » 07 lug 2024, 09:20

Grazie,
l'idea è interessante ma non riesco a far apparire il messaggio sweet di conferma. Ho provato ad inserirlo sia come funzione sia direttamente nel blocco if ma rimane bianco. ho testato il codice del messaggio in una blank e funziona

Codice: Seleziona tutto

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>SweetAlert2 Example</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11.1.9/dist/sweetalert2.min.css">
</head>
<body>

    <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11.1.9/dist/sweetalert2.all.min.js"></script>

    <script>
        function showConfirmation() {
            Swal.fire({
                title: 'Conferma?',
                text: "Proseguire? Non potrai annullare questa operazione!",
                icon: 'warning',
                showCancelButton: true,
                confirmButtonColor: '#3085d6',
                cancelButtonColor: '#d33',
                confirmButtonText: 'Sì',
                cancelButtonText: 'No'
            }).then((result) => {
                if (result.isConfirmed) {
                    // Azioni da eseguire se l'utente conferma
                    console.log('Operazione confermata');
                } else {
                    // Azioni da eseguire se l'utente annulla
                    console.log('Operazione annullata');
                }
            });
        }

        window.onload = function() {
            showConfirmation();
        };
    </script>
</body>
</html>
<?php
Non sono esperto nell'utilizzo contemporaneo di diversi linguaggi e probabilmente è più semplice di quello che sembra ma non riesco a venirne fuori
Mario Greco

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

Re: Messaggio Conferma

Messaggio da Fabio » 07 lug 2024, 10:54

Il problema principale con il tuo approccio è che il blocco if ($nrf > 0) viene eseguito sul server, mentre il confirm (o altro) viene eseguito lato client. Di conseguenza, il confirm non può influenzare l'esecuzione del codice PHP.
Puoi utilizzare una combinazione di PHP e JavaScript con una chiamata AJAX.
Oppure nella tua pagina php eseguire un javascript di conferma che, in base alla scelta, ricarica la pagina passandogli un parametro che indica l'azione successiva da svolgere.
Devi conservarti il file in una variabile globale o in una cartella temporanea, a seconda se lo carichi nel database o nel file system
Es.:

Codice: Seleziona tutto

if (isset($_GET['confirm'])) {
    $confirm = $_GET['confirm'];
    
    if ($confirm == 0) {
        // Operazione annullata
        exit;
    } else {
        // Procedi con il caricamento del file
        // ...
        exit;
    }
}

$nrf = verificaNomeFile($file_name); // Funzione che verifica se il file esiste già

if ($nrf > 0) {
    echo "<script>
    var conferma = confirm('File già stato importato. Procedere comunque?');
    if (conferma) {
        window.location.href = window.location.href + '&confirm=1';
    } else {
        window.location.href = window.location.href + '&confirm=0';
    }
    </script>";
    exit; 
}

Vincenzo
Messaggi: 139
Iscritto il: 11 apr 2014, 11:06

Re: Messaggio Conferma

Messaggio da Vincenzo » 07 lug 2024, 11:57

Credo di essermi trovato in questa situazione tempo fa, se non ricordo male, ho fatto così:

- creato un campo FORZATURA con un checkbox nel form, inizialmente nascosto.
- nella onvalidate, se c'è un problema, segnalo il problema con il messaggio, e mostro il campo FORZATURA, nel messaggio indico anche "se si vuol procedere lo stesso, selezionate forzatura".
- nella onvalidate, se riscontro il problema, ma c'è FORZATURA a true proseguo senza dare errori, altrimenti appunto mostro il messaggio di prima.

E' più bello sicuramente porre la domanda al volo e proseguire o meno, mentre nella soluzione sopra, l'utente riceve il messaggio di errore, deve selezionare il checkbox forzatura e rifare submit, inoltre se si usa il programma da un po', da parte dell'utente "esperto", una funzionalità aggiuntiva potrebbe essere quella di visualizzare da subito il checkbox forzatura, permettendo all'utente di attivarlo subito e di fatto dire "senti anche se c'è un problema prosegui lo stesso, so quello che sto facendo" :roll: :lol:

:mrgreen:

magre66
Messaggi: 54
Iscritto il: 14 mar 2017, 08:04

Re: Messaggio Conferma

Messaggio da magre66 » 07 lug 2024, 17:24

Grazie a tutti per i suggerimenti,
alla fine non ne venivo fuori e non ho più tempo per cui ho fatto una cosa molto grezza:

- ho spostato il codice da eseguire se una blank
- ho creato una control con una label con il messaggio "File duplicato"
- il blocco if con dei sc_redir
- se true punta alla control
- se false punta alla blank
- Nella control ho gestito il pulsante OK con un sc_redir alla blank e il pulsante Esci con un sc_redir alla control di partenza

Ovviamente in tutti i redir ho passato i parametri necessari

Non mi piace ma funziona. Quando avrò tempo riprenderò l'argomento perchè mi piacerebbe trovare una soluzione più lineare
Mario Greco

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

Re: Messaggio Conferma

Messaggio da rino » 23 lug 2024, 10:54

un vecchio problema di logica batch.
le importazioni di massa vanno sempre viste come batch che alla fine docono cosa è accaduto permettendo fasi di recupero.
in pratica si inizia da un file in input che genera due file di output , uno corretto l altro dele eccezioni ,qeuste vanno successivamente analizzate e trattate per come serve.
Permettere una decisione online per le importazioni non è mai saggio ,spcie se si hanno numeri superiori a 10 .
esiste un esmeppio di improtazione fiel excel che opera esattamebte con questa logica ,la più sicura ed affidabile, anch eperchè permette il recupero in caso di interruzioni , il risparmio di tempo e risorse ecc.
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

magre66
Messaggi: 54
Iscritto il: 14 mar 2017, 08:04

Re: Messaggio Conferma

Messaggio da magre66 » 29 lug 2024, 07:57

Ciao Rino,
grazie per la precisazione. Il problema in questo caso non è gestire le eccezioni una volta avviato il processo di importazione, che, a seconda del caso, vengono gestite con la logica che descrivi o con altre a seconda delle policy progettuali ma gestire la situazione in cui un file sia già stato caricato con lo stesso nome (scriptcase numera progressivamente i file con lo stesso nome nomefile(1), (2) ecc) e lasciare all'utente la scelta se caricare il doppione oppure no. Nella prima edizione, se il nome era uguale, il sistema non avviava l'importazione e obbligava l'utente a rinominare il file se voleva procedere, ma questa soluzione non piaceva al committente che ha chiesto la conferma diretta.
Quando troverò una soluzione più elegante di quella che ho implementato la condividerò
Mario Greco

Rispondi

Chi c’è in linea

Visitano il forum: Ahrefs [Bot] e 7 ospiti