PHP: 显示是/否确认对话框

22

我的PHP页面有一个链接可以删除MySQL表中的一条数据。我希望当我点击“删除”链接时,会弹出一个确认框,并询问“您确定要删除吗?” ,并显示两个按钮:“是”和“否”。当我点击“是”时,我希望删除MySQL表中的数据;当我点击“否”时,则不做任何操作。


1
你的问题确切在哪里? - Bombe
你应该总是使用表单/提交按钮来确认类似这样的操作。永远不要依赖Javascript。阅读此文章以了解原因! - Mez
15个回答

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

1
最简单有效的方法就是这样做,效果非常好!谢谢。 - Bhimbim
2
我正在使用Yii框架工作,不知怎么的,看到这个代码后我也意识到可以在Yii中这样写:'options'=>array('onclick'=>'return confirm("Are you sure?");') - Gjordis

19
<input name="_delete_" type="submit" value="Delete" onclick="return confirm('Are you sure?')">

14

你可以使用JavaScript来提示:

在这里找到了这个例子 - 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>

另一种方法

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

警告:如果用户只是在浏览器中导航到最终URL - delete.page?id=1,那么此JavaScript将无法阻止记录被删除。


4
我通常的做法是创建一个删除页面,如果请求方法为“GET”,则显示确认表单,如果方法为“POST”且用户选择了“是”选项,则删除数据。
然后,在带有删除链接的页面中,我添加一个onclick函数(或者只使用jQuery confirm plugin),该函数使用AJAX发布到链接,绕过确认页面。
以下是伪代码的想法:

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

带有删除链接的页面:

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

1
你可以像三元操作符一样处理 onClick 属性,即针对“ok”和“cancel”条件进行处理。
情境: 这里有一个场景,我想展示一个确认框,在执行删除操作时会询问“确定”或“取消”。如果用户点击“确定”,那么表单操作将重定向到页面位置;如果点击“取消”,页面不会响应。
进一步解释:我有一个按钮,类型为“submit”,它最初使用表单标记的默认表单操作。我希望在具有相同输入类型的删除按���上实现上述情景。
所以下面的代码对我来说正常工作。
onClick="return confirm('Are you sure you want to Delete ?')?this.form.action='<?php echo $_SERVER['PHP_SELF'] ?>':false;"

完整代码
<input type="submit" name="action" id="Delete" value="Delete" onClick="return confirm('Are you sure you want to Delete ?')?this.form.action='<?php echo $_SERVER['PHP_SELF'] ?>':false;">

顺便说一下,我正在使用PHP将这段代码作为行内代码实现在HTML元素中。所以我使用了“echo $_SERVER['PHP_SELF']”。

希望这对您也有效。 谢谢


请添加一些进一步的解释。为什么需要修改表单操作?为什么不最初设置表单操作? - Nico Haase
1
实际上,最初在表单标签中添加了一个表单操作,该操作由具有input type="submit"的“添加详细信息”按钮使用。我希望在具有相同输入类型的删除按钮上实现上述情况,因此我在其中传递了不同的表单操作。 - Ankur prajapati

1
<a onclick="javascript:return confirm('Are You Confirm Deletion');" href="delete_customer.php?a=<?php echo $row['id']; ?>"  class="btn btn-danger a-btn-slide-text" style="color: white; width:86px; height:37px;" > <span class="glyphicon glyphicon-remove" aria-hidden="true"></span><span><strong></a></strong></span> 

2
虽然这段代码可能解决了问题,但是包括解释它如何以及为什么解决了问题将有助于提高您的帖子质量,并可能导致更多的赞。请记住,您正在回答未来读者的问题,而不仅仅是现在提问的人。请编辑您的答案以添加解释,并指出适用的限制和假设。 - Makyen

0

试试这个:

<td>
    <a onclick="return confirm(\'Are you sure?\');" href="'.base_url('category/delete_category/'.$row->category_id).'" class="btn btn-danger btn-sm"><i class="fa fa-trash"></i> Delete Coupon</a>
</td>

1
虽然这段代码片段可能解决了问题,但包括解释真的有助于提高您的帖子质量。请记住,您正在为未来的读者回答问题,而这些人可能不知道您的代码建议原因。请尽量不要在代码中添加过多的解释性注释,这会降低代码和解释的可读性! - Filnor
请分享更多细节。为什么您的代码包含没有任何PHP标记的内联PHP? - Nico Haase

0

我也在寻找一种方法来实现它,最终通过使用表单和formaction属性解决了这个问题:

<input type="submit" name="del_something" formaction="<addresstothispage>" value="delete" />
<?php if(isset($_POST['del_something'])) print '<div>Are you sure? <input type="submit" name="del_confirm" value="yes!" formaction="action.php" />
<input type="submit" name="del_no" value="no!" formaction="<addresstothispage>" />';?>

action.php 会检查 isset($_POST['del_confirm']) 并调用相应的 PHP 脚本(用于数据库操作或其他操作)。完美,无需 JavaScript。使用 formaction 属性,删除按钮可以成为任何表单的一部分,并仍然调用不同的表单操作(例如返回到相同页面,但设置了按钮)。

如果按下按钮,则确认按钮将显示。


0

用 PHP 实现这个的方法是在 PHP 内部使用一个对话框系统,例如 GTKDialogs: http://www.kksou.com/php-gtk2/articles/setup-a-dialog-box---Part-2---simple-yes-no-dialog.php JavaScript 的方式可能会更简单,但要记住当 JavaScript 被关闭时,这种方法不起作用(除非您检查启用 JavaScript 并加入此代码!)。 这可以通过 onclick 处理程序来完成,就像 tsvanharen 发布的那样,或者使用页面内的简单文本对话框而不是一个烦人的弹出窗口。

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

我在其中使用了原型(因此使用了$()标签和show()/hide()函数),但你可以轻松地将其更改为不需要原型的版本:

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

同样的,这个功能需要 JavaScript 才能工作,但几乎没有其他选择。


1
即使在服务器上安装了phpgtk(这是无意义的,因为它需要图形界面,而在运行Linux的Web服务器上从未安装过),它也会在服务器上打开该对话框,而不是在浏览器内或用户的计算机上:您无法从服务器上打开客户端上的GTK窗口。 - Pascal MARTIN

0

<input type="submit" name="submit" value="提交" onclick="return confirm('确定吗?');"/> 你也可以在按钮上执行此操作!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接