2009-08-06 19 views
17

Meine PHP-Seite hat einen Link, um ein MySQL-Tabellendatum zu löschen. Ich möchte, dass es so ist, dass wenn ich auf den "Löschen" -Link klicke, ein Bestätigungsfeld erscheinen sollte und es fragen sollte "Bist du sicher, du willst löschen?", Mit zwei Buttons: 'ja' und 'nein' . Wenn ich auf "Ja" klicke, möchte ich die Daten der MySQL-Tabelle löschen. Wenn ich auf "Nein" klicke, sollte nichts passieren.PHP: Ja/Nein-Bestätigungsdialog anzeigen

+0

Wo genau ist dein Problem? – Bombe

+2

Hinweis: Header

Antwort

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

die einfachste und effektivste Art, dies zu tun, arbeiten wie Charme!, Danke. – Bhimbim

+2

Arbeitete am Yii-Framework, und irgendwie sah ich, dass dies auch auf yii zu erkennen war, "options" => array ('onclick' => 'return confirm ("Bist du sicher?");') ' – Gjordis

8

Sie JavaScript verwenden können, um Sie aufzufordern:

dies hier gefunden - 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> 

Ein anderer Weg

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

Warnung: Dieses JavaScript wird das nicht aufhören Datensätze gelöscht werden, wenn sie nur n avigate auf den endgültigen URL - delete.page?id=1 in ihrem Browser

0

Der PHP-Weg, dies zu tun, um ein Dialogsystem innerhalb php.for Beispiel GTKDialogs würde: http://www.kksou.com/php-gtk2/articles/setup-a-dialog-box---Part-2---simple-yes-no-dialog.php Der Javacript Weg ist wahrscheinlich ein bisschen leichter , aber erinnern Sie sich, wenn Javascript deaktiviert ist, funktioniert das nicht (außer wenn Sie Javascript aktiviert zu aktivieren und dann fügen Sie dies !?) Dies könnte mit einem Onclick-Handler wie Tsvanharen veröffentlicht werden, oder mit einem einfachen Textdialog innerhalb der Seite anstelle eines quälenden Popups.

<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> 

Ich benutze Prototyp (daher der $() Tag und die Show()/hide()) für sie. aber Sie können es leicht ändern, um ohne Prototyp zu arbeiten:

<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> 

Nochmals, das funktioniert nicht ohne Javascript, aber fast keine Optionen.

+1

Selbst wenn phpgtk auf dem Server installiert wurde (was Unsinn bedeutet, da es eine grafische Oberfläche erfordert, die niemals auf Webservern unter Linux installiert wird), würde das Dialogfeld auf dem Server geöffnet und nicht im Browser oder auf der Rechner des Benutzers: Sie können vom Server aus kein GTK-Fenster auf dem Client öffnen –

9

Sie sollten immer eine Form/Post-Taste verwenden, um so etwas zu bestätigen. Verlassen Sie sich nie auf Javascript. Lesen Sie this um zu verstehen, warum!

+3

Ein Bestätigungsdialog hat nichts mit dem Problem in Ihrer Geschichte zu tun. Ein Bestätigungsdialog ist eine Benutzerfreundlichkeitsfunktion, die verhindert, dass ein Benutzer versehentlich auf eine Schaltfläche zum Löschen klickt. In Ihrem Link verwendeten sie Javascript für die Authentifizierung, was wirklich eine dumme Sache ist. –

0

Wenn Sie etwas löschen, sollten Sie immer POST und nicht GET verwenden, daher ist die Verwendung von confirm() eine schlechte Idee. Was ich in Ihrer Situation mache, ist ein modales Popup wie jqModal und ein Formular mit Ja/Nein-Schaltflächen im Popup anzuzeigen.

+0

Wie verhindert 'confirm()' die Verwendung von POST? –

2

Normalerweise erstellt ich eine Löschseite, die ein Bestätigungsformular anzeigt, wenn die Anforderungsmethode "GET" ist, und löscht die Daten, wenn die Methode "POST" war und der Benutzer die Option "Yes" gewählt hat.

Dann, auf der Seite mit dem Link zum Löschen, füge ich eine onclick -Funktion hinzu (oder einfach die jQuery confirm plugin), die AJAX verwendet, um den Link zu posten, unter Umgehung der Bestätigungsseite.

Hier ist die Idee in Pseudo-Code:

löschen.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> 

Seite mit Lösch Link:

<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

Dies ist die einfachste Antwort, danke. –

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

Hat dieses Skript und danach tought i i gehen, um das Internet zu überprüfen.
Ja, das ist eine alte Bedrohung, aber da es keine ähnliche Version zu geben scheint, dachte ich, ich würde dazu beitragen.
Am einfachsten & einfachste Weg funktioniert auf allen Browsern mit/in jedem Element oder Feld.

Sie können window.open zu einem anderen Befehl ändern zu laufen, wenn Bestätigung TRUE, das gleiche mit void(0) ist, wenn Konformation NULL oder abgebrochen ist.

0

Der beste Weg, den ich gefunden habe, ist hier.

HTML CODE

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

Fügen Sie diese PARAGRAF HEAD

$(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; 
    }); 
}); 

Sie sollten hinzufügen JQuery und Bootstrap für diese zu arbeiten.

0

<input type="submit" name="submit" value="submit" onclick="return confirm('Are you sure?');"/> Sie können diese Aktion auch auf Button ausführen!