javascript - 从数据库 mysql php 删除引导警报

标签 javascript php jquery mysql

所以我有一个使用引导警报创建的通知页面。 这是一个片段,每个通知都是来自数据库一行的回显

<div class="container" >

<?php 
$fetch = $conn->query("SELECT * FROM notifications"); 

while($row = $fetch->fetch_assoc()) {
  $id = ''.$row["id"].'';
  $notification = ''.$row["notifications"].'';

?>

<div class="alert alert-warning alert-dismissable ">
  <a href="#" class="close" data-dismiss="alert" aria-label="close" id="close">
    <form action='deletenotifications.php' method='post' id='myform' >
        <input type='hidden' name='id' id='id' value="<?php echo $id ?>" />
        <span type="submit">&times;</span>
    </form></a>
  <?php echo $notification; ?>
</div>


<?php } ?> 

</div>

用户按下 X 时需要删除通知,因此也需要从数据库中删除通知,因此需要使用 jquery AJAX 方法将包含警报 id 的隐藏表单发送到操作 deletenotication.php

<script type="text/javascript">
 $('#close').click(function(){
   $.post( 
     $('#myform').attr('action'),
     $('#myform :input').serializeArray(),
   );
});
</script>

这里是deletenotification.php 片段

$id = $_POST['id']; 


$sqlf = $conn->query("SELECT * from notifications");

while($rown = $sqlf->fetch_assoc()){
    $idbase = ''.$rown['id'].'';

    if($id == $idbase){
        $sql = $conn->query("DELETE FROM notifications WHERE id=$id"); 

    }

}

正在从数据库中删除,但前提是警报按顺序关闭,并且只删除一个警报,为了删除后续的警报,需要刷新页面。

关闭警报 2、3 和 4 不会删除这些行,除非删除通知 1,

我需要如果用户关闭任何要删除的随机警报,而不是按顺序

谢谢!

最佳答案

您不需要遍历所有结果,只需按 ID 删除特定行即可。这会花费您两次查询而不是一次查询,并且如果数据库中有大量通知,则第一个查询的成本可能会很高。相反,您可以直接通过 ID 进行删除,如下所示。

if ( ! empty( $_POST['id'] ) && (int) $_POST['id'] ) {
    $id  = (int) $_POST['id']; 
    $conn->query("DELETE FROM notifications WHERE id=$id");
}

在上面的示例中,为了安全起见,我将 ID 转换为整数。但实际上,您应该查看在那里使用的数据库类,而使用 prepared statement .

<小时/>

旁白:我注意到有几行像这样带有两个单引号。你不需要所有这些。它们仅在您串联时才有用。或者,如果您定义了一个字符串文字。

$id = ''.$row["id"].'';

相反,只需为其分配 ID 的值即可。

$id = $row['id'];
<小时/>

在响应从数据库中删除行的请求之前使用并验证 CSRF token 也是一个好主意;即,确保该请求是合法的。也许您已经在其他地方这样做了,但我想警告您以防万一。

参见:https://en.wikipedia.org/wiki/Cross-site_request_forgery

关于javascript - 从数据库 mysql php 删除引导警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47144182/

相关文章:

javascript - 防止 jQuery 函数重复效果两次?

php - 类型错误 : Value does not implement interface HTMLInputElement

javascript - 如何删除 Drupal 7 下拉 HTML 选择列表中的禁用选项

javascript - 如何让 IFRAME 占据网页的右半部分?

javascript - 网站上的自定义突出显示失败

php - Cookie 在不同页面上不起作用

php - 如何为 get_headers PHP 函数设置用户代理

PHP 和 mySQL - 多用户应用程序方法

php - 结合 JavaScript 和 PHP

javascript - 在 ng-repeat 中设置 md-datepicker