2009-08-06 71 views
17

Trang PHP của tôi có liên kết để xóa một bảng dữ liệu MySQL. Tôi muốn nó được như vậy mà khi tôi nhấp vào liên kết 'xóa' một hộp xác nhận sẽ xuất hiện và nó sẽ hỏi "bạn có chắc chắn, bạn muốn xóa?", Với hai nút: 'có' và 'không' . Khi tôi nhấp vào có, tôi muốn xóa dữ liệu của bảng MySQL và khi tôi nhấp vào không, không có gì xảy ra.PHP: Hiển thị hộp thoại có/không có xác nhận

+0

Trường hợp chính xác là vấn đề của bạn? – Bombe

+2

Gợi ý: Tiêu đề

Trả lời

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

cách đơn giản và hiệu quả nhất để thực hiện việc này, hoạt động như sự quyến rũ !, cảm ơn. – Bhimbim

+2

Đã được làm việc trên Yii-framework, và bằng cách nào đó nhìn thấy điều này đặt htis cách làm cho tôi nhận ra nó trên yii quá, ''options' => mảng ('onclick' => 'return xác nhận (" Bạn có chắc chắn? ");') ' – Gjordis

8

Bạn có thể sử dụng JavaScript để nhắc bạn:

Các mặt hàng này ở đây - 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> 

Một cách khác

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

Warning: JavaScript này sẽ không dừng lại hồ sơ bị xóa nếu họ chỉ n iều hướng tới url thức - delete.page?id=1 trong trình duyệt của họ

0

Cách PHP để làm điều này sẽ được sử dụng một hệ thống hộp thoại bên php.for dụ GTKDialogs: http://www.kksou.com/php-gtk2/articles/setup-a-dialog-box---Part-2---simple-yes-no-dialog.php Cách javacript có lẽ là một chút dễ dàng hơn , nhưng hãy nhớ khi javascript được tắt, điều này không hoạt động (trừ khi bạn kiểm tra javascript để được kích hoạt và sau đó thêm này !?) Điều này có thể với một handler onclick như tsvanharen được đăng, hoặc với một hộp thoại văn bản đơn giản bên trong trang thay vì một cửa sổ bật lên dai dẳng.

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

Tôi sử dụng mẫu thử nghiệm (do đó thẻ $() và chương trình()/ẩn()) cho nó. nhưng bạn có thể dễ dàng thay đổi nó để hoạt động mà không cần mẫu thử nghiệm:

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

Một lần nữa, điều này không hoạt động mà không có javascript, nhưng hầu như không có tùy chọn.

+1

Thậm chí nếu phpgtk được cài đặt trên máy chủ (điều này là vô nghĩa, vì nó yêu cầu giao diện đồ họa, không bao giờ được cài đặt trên máy chủ web chạy Linux), nó sẽ mở hộp thoại đó trên máy chủ chứ không phải bên trong trình duyệt hay trên máy của người dùng: bạn không thể, từ máy chủ, mở một cửa sổ GTK trên máy khách –

9

Bạn nên luôn sử dụng nút biểu mẫu/bài đăng để xác nhận điều gì đó tương tự. Không bao giờ dựa vào Javascript. Đọc this để hiểu tại sao!

+3

Một hộp thoại xác nhận không liên quan gì đến vấn đề trong câu chuyện của bạn. Hộp thoại xác nhận là tính năng hữu ích để ngăn người dùng nhấp vào nút xóa một cách tình cờ. Trong liên kết của bạn, họ đã sử dụng javascript để xác thực thực sự là điều ngu ngốc để làm .. –

0

Nếu bạn đang xóa nội dung nào đó, bạn phải luôn sử dụng POST chứ không phải GET, vì vậy việc sử dụng xác nhận() là một ý tưởng tồi. Những gì tôi làm trong trường hợp của bạn là sử dụng cửa sổ bật lên phương thức như jqModal và hiển thị biểu mẫu có các nút có/không bên trong cửa sổ bật lên.

+0

cách 'confirm()' ngăn bạn sử dụng POST? –

2

Điều tôi thường làm là tạo trang xóa hiển thị biểu mẫu xác nhận nếu phương thức yêu cầu là "NHẬN" và xóa dữ liệu nếu phương thức là "POST" và người dùng đã chọn tùy chọn "Có".

Sau đó, trong trang có liên kết xóa, tôi thêm chức năng onclick (hoặc chỉ sử dụng jQuery confirm plugin) sử dụng AJAX để đăng lên liên kết, bỏ qua trang xác nhận.

Đây là ý tưởng trong mã giả:

xóa.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> 

trang với liên kết xóa:

<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

Đây là câu trả lời đơn giản nhất, cảm ơn. –

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

Did kịch bản này và sau đó tôi tought tôi đi kiểm tra internet quá.
Vâng đây là một mối đe dọa cũ nhưng có vẻ như không có bất kỳ phiên bản tương tự như tôi nghĩ tôi sẽ đóng góp.
Dễ nhất & cách đơn giản nhất hoạt động trên tất cả các trình duyệt có/trong bất kỳ phần tử hoặc trường nào.

Bạn có thể thay đổi window.open thành bất kỳ lệnh nào khác để chạy khi xác nhận là TRUE, tương tự với void(0) nếu cấu hình là NULL hoặc bị hủy.

0

Cách tốt nhất mà tôi tìm thấy ở đây.

HTML MÃ

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

thêm video này vào ĐẦU PHẦN

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

Bạn nên thêm Jquery và Bootstrap để làm việc này.

0

<input type="submit" name="submit" value="submit" onclick="return confirm('Are you sure?');"/> bạn cũng có thể thực hiện thao tác này trên Nút!

Các vấn đề liên quan