conferma prima di cancellare con javascript e php

Discussione in 'PHP' iniziata da luigi777, 8 Febbraio 2019.

Status Discussione:
Chiusa ad ulteriori risposte.
  1. luigi777

    luigi777 Utente Attivo

    Registrato:
    14 Febbraio 2008
    Messaggi:
    1.060
    Mi Piace Ricevuti:
    1
    Punteggio:
    38
    Sesso:
    Maschio
    Località:
    Massa, Italy
    ciao ho questo codice vorrei fare che se uno clicca sul cancella deve fare prima un'alert che dice se sei sicuro.

    Il codice è questo:
    PHP:
    <?php
    include($_SERVER['DOCUMENT_ROOT']."/inc.php");
    $sql "DELETE FROM users WHERE id=:userID";
    $stmt $db->prepare($sql);
    $stmt->bindParam(':userID'$_GET["id"], PDO::PARAM_INT);
    $stmt->execute();
    e viene da qui:
    PHP:
    echo '<p><a href="del.php?id='.$row["id"].'">del</a></p>';
    come posso fare?
    Grazie mille.
     
  2. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.518
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    anziché chiamare "del.php" puoi chiamare una funzione javascript, usando questi metodi (secondo necessità) per chiedere la conferma alla cancellazione,

    - alert() displays a message to the user and waits for the user to dismiss the dialog.

    - confirm() displays a message, waits for the user to click an OK or Cancel button and returns a boolean value.

    - prompt() displays a message, waits for the user to enter a string, and returns that string.

    - showModalDialog() displays a modal dialog box containing HTMLformatted content and allows arguments to be passed to, and a value returned from

    alla conferma positiva, invii una richiesta ajax a "del.php" che cancella ….

    quando lo hai sviluppato, ti ringrazio se lo posti
     
  3. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    882
    Mi Piace Ricevuti:
    49
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Documentazione qui :https://sweetalert2.github.io/
    Non è assolutamente necessario inviare dati in asincrono se devi solo ed esclusivamente confermare la scelta utente, poi anche graficamente più accattivante...
    Codice:
    function check_del(e){
        e.preventDefault();
    Swal.fire({
      title: 'Are you sure?',
      text: "You won't be able to revert this!",
      type: 'warning',
      showCancelButton: true,
      confirmButtonColor: '#3085d6',
      cancelButtonColor: '#d33',
      confirmButtonText: 'Yes, delete it!'
    }).then((result) => {
      if (result.value) {
        Swal.fire(
          'Deleted!',
          'Your file has been deleted.',
          'success'
        )
       $(e.currentTarget).submit();
      }
    })
    }
    
    Se non utilizzi form, puoi agganciarlo anche al click del btn...
     
  4. vic53

    vic53 Nuovo Utente

    Registrato:
    9 Febbraio 2019
    Messaggi:
    35
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Occupazione:
    in pensione ( ex sistemista Alitalia Servizi)
    Località:
    Fonte Nuova
    Home Page:
    al posto dell'anchor <a... devi chiamare una funzione javascript in cui fai uso di una confirm tipo questa
    l'ancora diventa
    PHP:
    <?php echo "<p><a onclick='cancellariga(".$row["id"]."')>del</a></p>" ?>
    mentre la funzione
    Codice:
    function cancella(riga) {
      var ris = window.confirm("VUOI CANCELLARE  LA RIGA "+riga+"?... OK PER CONFERMARE!");
          if  (ris)
           {
    .... qui puoi fare una chiamata ajax per cacellare la riga e poi aggiornare la tabella dove non presenti piu la riga cancellata
          }
    }
    
     
  5. luigi777

    luigi777 Utente Attivo

    Registrato:
    14 Febbraio 2008
    Messaggi:
    1.060
    Mi Piace Ricevuti:
    1
    Punteggio:
    38
    Sesso:
    Maschio
    Località:
    Massa, Italy
    ok, ma non so utilizzare ajax .. devo documentarmi e scusa del ritardo ma ho avuto problemi con il notebook.

    EDIT- un'altra cosa.. per far sparire l'url del browser come devo fare.. sempre con ajax?
     
  6. vic53

    vic53 Nuovo Utente

    Registrato:
    9 Febbraio 2019
    Messaggi:
    35
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Occupazione:
    in pensione ( ex sistemista Alitalia Servizi)
    Località:
    Fonte Nuova
    Home Page:
    vedi www.w3schools.com per esempi ajax
     
  7. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    882
    Mi Piace Ricevuti:
    49
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    NON è assolutamente necessario utilizzare AJAX in questo caso.
     
  8. vic53

    vic53 Nuovo Utente

    Registrato:
    9 Febbraio 2019
    Messaggi:
    35
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Occupazione:
    in pensione ( ex sistemista Alitalia Servizi)
    Località:
    Fonte Nuova
    Home Page:
    Il fatto di non utilizzare ajax dipende dalle circostanze del programma visualizzato ed è una scelta del programmatore....
    non concordo con l'affermazione fatta da te...!
     
  9. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    882
    Mi Piace Ricevuti:
    49
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Il caso è questo..... Bene.... @vic53 Dove trovi l'esigenza di inviare i dati con AJAX?
    Semmai, visto che stiamo in tema JS, sarebbe utile scrivere con sintassi aggiornata almeno ECMA6 e supporto di framewok per evitare spaghetti-code....
     
    Ultima modifica: 12 Febbraio 2019
  10. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.518
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    leggendo attentamente il post iniziale, si evince che, dalla riga

    echo '<p><a href="del.php?id='.$row["id"].'">del</a></p>';

    si attiva lo script del.php (in una forma molto simile ad una chiamata ajax)

    per mantenere il più possibile la stessa logica, nulla di meglio che usare una funzione javascript come indicato da @vic53

    le poche righe di codice non arriveranno a rappresentare un piatto di spaghetti
    ed al contempo non c'è la necessità di impiegare un software di terze parti per gestire una risposta "SI / NO"

    ciascun programmatore decide come meglio risolvere il suo compito, con il codice che ritiene più attinente
    e deve poterlo esprimere anche nel forum senza censure
     
  11. vic53

    vic53 Nuovo Utente

    Registrato:
    9 Febbraio 2019
    Messaggi:
    35
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Occupazione:
    in pensione ( ex sistemista Alitalia Servizi)
    Località:
    Fonte Nuova
    Home Page:
    Grazie Marino51
    hai capito la logica della discussione benissimo...
    Non è come pensiamo noi di fare il programma ma come pensa il programmatore e noi possiamo solo dare un consiglio non che si fa cosi o colà perchè c'è sempre un lato oscuro che non consideriamo abbastanza nella programmazione e che ci fa fare sempre un bug inaspettato...
     
  12. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    882
    Mi Piace Ricevuti:
    49
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Questa è una forma simile ad una chiamata AJAX???
    Un controllo lato client (bool) scatena una chiamata ajax???
    Qui non si tratta di programmi /programmatori si parla di buon senso...

    Perchè non farlo con un messaggio COAP.... o MQTT con WS!
    Si va nel ridicolo meglio fermarsi...
    Rimango dell'idea che tutto sarebbe bello e fattibile ma non trovo ancora una correlazione chiara e distinta che faccia pensare all'utilizzo di AJAX!
     
  13. vic53

    vic53 Nuovo Utente

    Registrato:
    9 Febbraio 2019
    Messaggi:
    35
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Occupazione:
    in pensione ( ex sistemista Alitalia Servizi)
    Località:
    Fonte Nuova
    Home Page:
    Beninteso non voglio fare piu commenti ma
    quella non è simile a una chiamata ajax bensi chiama una pagina sul server e apre la nuova pagina HREF per intendersi...
     
  14. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    882
    Mi Piace Ricevuti:
    49
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Ad una semplice richiesta di "Conferma cancellazione" viene consigliato di utilizzare AJAX?
    Avrei capito questa affermazione si avesse usato i "data-" HTML5 no href...
    Cioè per intenderci, state sparando ad una formica con un cannone... Tutto qui...

    Codice:
    <a class="cliccami" href="cancella.php?id=1">
       Delete1
    </a>
    <a class="cliccami" href="cancella.php?id=2">
        Delete2
    </a>
    <script>
         
    var $elem=document.getElementsByClassName('cliccami');
    document.addEventListener('click',($elem)=>{
        $elem.preventDefault();
        if(confirm('SICURO')){
             
           document.location.href=$elem.srcElement.href;
        }
    });
    
    </script>
    
    Pagina cancella.php
    PHP:
    // TUTTO IL CODICE CHE SI VUOLE ESEGUIRE E ALLA FINE
    include($_SERVER['DOCUMENT_ROOT']."/inc.php");
    $sql "DELETE FROM users WHERE id=:userID";
    $stmt $db->prepare($sql);
    $stmt->bindParam(':userID'$_GET["id"], PDO::PARAM_INT);
    $stmt->execute();

    //TORNO SULLA PAGINA
    header('location:'.$_SERVER['HTTP_REFERER']);
    Cosa comporta:
    Non dover gestire eventuali errori in js
    Non attendere risposta dell'effettiva cancellazione dell'elemento
    Non dove aggiornare in modo asincrono la view sulla quale sto lavorando in quanto appena rientra la view si aggiorna
    Non deve effettuare il destroy di nulla (in caso stia utilizzando lib di terze parti)
    _____________________________________________________________________
    Avrei utilizzato AJAX se avesse impostato la domanda in modo diverso!
    Codice:
    <!-- dove ref è il riferimento per eliminare map è il campo sul quale lavorare e set è l'action da eseguire -->
    <a data-ref='1' data-map='id' data-set='delete'>1</a>
    //call è la collection
    /**
    * Metodo per eseguire azioni non definite gestite dal server
    */
    check_actions_item:function(e){
         var self=this;
         var current=$(e.currentTarget);
        self.call.postSimpledata('azioni.php',{ref:current.data('ref'),map:current.data('map'),set_type:current.data('set')}).then(function(data){
         console.log(data);
        //ipotizzando di avere il codice di risposta
        if(data.code===200){
           //aggiorno la visualizzazione dei dati in quanto 1 elemento è stato cancellato!
           self.$el.update_view(data.object_return);
       }
    });
    }
    
    Con queste 3 righette è possibile effettuare le CRUD senza replicare nulla e senza arrivare alla scrittura spaghetti-code...


    Punti di vista...
    _____________________________________________________________________
    Tornando alla richiesta, la soluzione posta sopra funziona con un banalissimo "header('location"...."
     
    Ultima modifica: 13 Febbraio 2019
  15. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.518
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    ebbene si … ci vuole coraggio
    self.call.postSimpledata('azioni.php',{ref:c ………
    non é ajax, é crud o cotto, ma va bene lo stesso

    fine della partecipazione …. a questa discus
     
  16. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    882
    Mi Piace Ricevuti:
    49
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Non è ajax?
    Codice:
    var TestCollections=Backbone.Collection.extend({
        initialize: function(page) {
    
        },
        postSimpledata:function(url,data){
            return Request_AJ(url,'POST',data);
        }
    });
    var Test=Backbone.View.extend({
        el:'#content',
        call:new TestCollections,
    ......
    });
    var Request_AJ=function(link,type_request,parameter){
        return $.ajax({
            url: link,
            type: type_request,
            data: {
                request:parameter
            },
            error: function (e) {
                console.log("errore chiamata", e);
            }
        }).then(function(dataJSON) {
            return StoreLenght(dataJSON);
        });
    };
    
    Quindi Request_AJ sono patate.... scusa non lo sapevo! Credevo fosse AJAX visto che l'ho scritto....!
    La discussione diventa imbarazzante....
    Chiudo senza repliche....
     
  17. Max 1

    Max 1 Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    29 Febbraio 2012
    Messaggi:
    3.772
    Mi Piace Ricevuti:
    283
    Punteggio:
    83
    Sesso:
    Maschio
    Chiudo per troppa polemica!
     
    A borgo italia piace questo elemento.
Sto caricando...
Status Discussione:
Chiusa ad ulteriori risposte.

Condividi questa Pagina