conferma prima di cancellare con javascript e php

Stato
Chiusa ad ulteriori risposte.

luigi777

Utente Attivo
14 Feb 2008
1.076
1
38
38
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.
 

marino51

Utente Attivo
28 Feb 2013
2.927
166
63
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
 

macus_adi

Utente Attivo
5 Dic 2017
1.310
88
48
IT/SW
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...
 

vic53

Nuovo Utente
9 Feb 2019
35
0
6
Fonte Nuova
www.euro1.it
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.
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
      }
}
 

luigi777

Utente Attivo
14 Feb 2008
1.076
1
38
38
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?
 

macus_adi

Utente Attivo
5 Dic 2017
1.310
88
48
IT/SW
ciao ho questo codice vorrei fare che se uno clicca sul cancella deve fare prima un'alert che dice se sei sicuro.
Il caso è questo..... Bene.... @vic53 Dove trovi l'esigenza di inviare i dati con AJAX?
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 }
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:

marino51

Utente Attivo
28 Feb 2013
2.927
166
63
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
 

vic53

Nuovo Utente
9 Feb 2019
35
0
6
Fonte Nuova
www.euro1.it
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
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...
 

macus_adi

Utente Attivo
5 Dic 2017
1.310
88
48
IT/SW
echo '<p><a href="del.php?id='.$row["id"].'">del</a></p>';
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!
 

vic53

Nuovo Utente
9 Feb 2019
35
0
6
Fonte Nuova
www.euro1.it
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!
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...
 

macus_adi

Utente Attivo
5 Dic 2017
1.310
88
48
IT/SW
leggendo attentamente il post iniziale, si evince che, dalla riga
Ad una semplice richiesta di "Conferma cancellazione" viene consigliato di utilizzare AJAX?
quella non è simile a una chiamata ajax bensi chiama una pagina sul server e apre la nuova pagina HREF per intendersi...
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:

marino51

Utente Attivo
28 Feb 2013
2.927
166
63
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
 

macus_adi

Utente Attivo
5 Dic 2017
1.310
88
48
IT/SW
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....
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.278
330
83
Chiudo per troppa polemica!
 
  • Like
Reactions: borgo italia
Stato
Chiusa ad ulteriori risposte.