2009-08-06 24 views
17

La mia pagina PHP ha un collegamento per cancellare un dato di tabella MySQL. Voglio che sia in modo tale che quando clicco sul link 'cancella' venga visualizzata una finestra di conferma e dovrebbe chiedere "Sei sicuro di voler eliminare?", Con due pulsanti: "sì" e "no" . Quando clicco sì, voglio cancellare i dati della tabella MySQL e quando clicco no, non dovrebbe accadere nulla.PHP: Mostra finestra di dialogo conferma sì/no

+0

Dove è esattamente il tuo problema? – Bombe

+2

Suggerimento: Intestazione

risposta

47
<a href="http://stackoverflow.com" 
    onclick="return confirm('Are you sure?');">My Link</a> 
+1

il modo più semplice ed efficace per farlo, funziona come un incantesimo!, Grazie. – Bhimbim

+2

Stavo lavorando su Yii-framework, e in qualche modo vedere questo fatto mi ha fatto realizzare anche su yii, ''options' => array ('onclick' => 'return confirm (" Are you sure? ");') ' – Gjordis

8

È possibile utilizzare JavaScript per richiedere:

Abbiamo trovato questo qui - Example

<script> 
function confirmDelete(delUrl) { 
    if (confirm("Are you sure you want to delete")) { 
    document.location = delUrl; 
    } 
} 
</script> 

<a href="javascript:confirmDelete('delete.page?id=1')">Delete</a> 

Un altro modo

<a href="delete.page?id=1" onclick="return confirm('Are you sure you want to delete?')">Delete</a> 

Attenzione: Questa JavaScript non si fermerà la record dall'essere cancellati se solo n Navigate per l'URL finale - delete.page?id=1 nel loro browser

0

Il modo PHP di fare questo sarebbe utilizzando un sistema di dialogo all'interno php.for esempio GTKDialogs: http://www.kksou.com/php-gtk2/articles/setup-a-dialog-box---Part-2---simple-yes-no-dialog.php Il modo Javacript è probabilmente un po 'più facile , ma ricorda quando javascript è disattivato, questo non funziona (eccetto se controlli javascript per essere abilitato e poi aggiungi questo !?) Questo potrebbe essere con un gestore onclick come tsvanharen pubblicato, o con una semplice finestra di testo all'interno della pagina invece di un popup fastidioso.

<a onClick="$('deletefromtable').show();"></a> 
<div id="deletefromtable" style="display:none;"> 
Do you really want to do this?<br/> 
<a href="deleteit.php">Yes</a>|<a onClick="$('deletefromtable').hide();">No</a> 
</div> 

Io uso prototipo (da qui il tag di $() e lo spettacolo()/hide()) per esso. ma è possibile modificare facilmente farlo funzionare senza prototipo:

<a onClick='document.getElementById("deletefromtable").style.display = "block";' href="#">click here to delete</a> 
<div id="deletefromtable" style="display:none;"> 
Do you really want to do this?<br/> 
<a href="deleteit.php">Yes</a>|<a onClick='document.getElementById("deletefromtable").style.display = "none";' href="#">No</a> 
</div> 

Ancora una volta, questo non funziona senza JavaScript, ma quasi nessuna opzione fare.

+1

Anche se phpgtk è stato installato sul server (che non ha senso, in quanto richiede un'interfaccia grafica, che non è mai installata sui server Web che eseguono Linux), aprirà quella finestra di dialogo sul server, e non all'interno del browser né su macchina dell'utente: non puoi, dal server, aprire una finestra GTK sul client –

9

È necessario utilizzare sempre un pulsante modulo/post per confermare qualcosa di simile. Mai fare affidamento su Javascript. Leggi this per capire perché!

+3

Una finestra di conferma non ha nulla a che fare con il problema nella tua storia. Una finestra di conferma è una funzione di usabilità per impedire all'utente di fare clic su un pulsante di eliminazione per errore. Nel tuo link hanno usato javascript per l'autenticazione che è davvero una cosa stupida da fare .. –

0

Se stai cancellando qualcosa, dovresti sempre usare POST e non GET, quindi usare confirm() è una cattiva idea. Quello che faccio nella tua situazione è usare un popup modale come jqModal e visualizzare un modulo con i pulsanti sì/no all'interno del popup.

+0

come 'confirm()' ti impedisce di usare POST? –

2

Quello che faccio di solito è creare una pagina di cancellazione che mostra un modulo di conferma se il metodo di richiesta è "GET" e cancella i dati se il metodo era "POST" e l'utente ha scelto l'opzione "Sì".

Quindi, nella pagina con il collegamento Elimina, aggiungo una funzione onclick (o semplicemente uso il jQuery confirm plugin) che utilizza AJAX per postare sul collegamento, ignorando la pagina di conferma.

Ecco l'idea in pseudo codice:

eliminare.php:

<?php 
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if ($_POST['confirm'] == 'Yes') { 
     delete_record($_REQUEST['id']); // From GET or POST variables 
    } 
    redirect($_POST['referer']); 
} 
?> 

<form action="delete.php" method="post"> 
    Are you sure? 
    <input type="submit" name="confirm" value="Yes"> 
    <input type="submit" name="confirm" value="No"> 

    <input type="hidden" name="id" value="<?php echo $_GET['id']; ?>"> 
    <input type="hidden" name="referer" value="<?php echo $_SERVER['HTTP_REFERER']; ?>"> 
</form> 

pagina con il link di cancellazione:

<script> 
    function confirmDelete(link) { 
     if (confirm("Are you sure?")) { 
      doAjax(link.href, "POST"); // doAjax needs to send the "confirm" field 
     } 
     return false; 
    } 
</script> 

<a href="delete.php?id=1234" onclick="return confirmDelete(this);">Delete record</a> 
15
<input name="_delete_" type="submit" value="Delete" onclick="return confirm('Are you sure?')"> 
+0

Questa è la risposta più semplice, grazie. –

0
onclick="return confirm('Log Out?')? window.open('?user=logout','_self'): void(0);" 

Forse questo script e poi ho insegnato io a controllare internet troppo.
Sì, questa è una vecchia minaccia ma, poiché sembra non esserci alcuna versione simile, ho pensato di contribuire.
Il modo più semplice & funziona su tutti i browser con/in qualsiasi elemento o campo.

È possibile modificare window.open a qualsiasi altro comando da eseguire quando la conferma è TRUE, lo stesso con void(0) se conformazione è NULL o annullato.

0

Il modo migliore che ho trovato è qui.

CODICE HTML

<a href="delete.cfm" onclick="return confirm('Are you sure you want to delete?');">Delete</a> 

aggiungere questo alla HEAD SEZIONE

$(document).ready(function() { 
    $('a[data-confirm]').click(function(ev) { 
     var href = $(this).attr('href'); 
     if (!$('#dataConfirmModal').length) { 
      $('body').append('<div id="dataConfirmModal" class="modal" role="dialog" aria-labelledby="dataConfirmLabel" aria-hidden="true"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button><h3 id="dataConfirmLabel">Please Confirm</h3></div><div class="modal-body"></div><div class="modal-footer"><button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button><a class="btn btn-primary" id="dataConfirmOK">OK</a></div></div>'); 
     } 
     $('#dataConfirmModal').find('.modal-body').text($(this).attr('data-confirm')); 
     $('#dataConfirmOK').attr('href', href); 
     $('#dataConfirmModal').modal({show:true}); 
     return false; 
    }); 
}); 

Si dovrebbe aggiungere Jquery e Bootstrap per questo al lavoro.

0

<input type="submit" name="submit" value="submit" onclick="return confirm('Are you sure?');"/> è possibile eseguire questa azione anche su Pulsante!

Problemi correlati