在同一个PHP页面中处理数据库删除操作


Process database delete action in the same PHP page with post

我正在构建用于处理员工休假记录的PHP应用程序。在这个应用程序中,主屏幕填充数据库记录和操作按钮。当用户单击操作按钮时,它从表中获取数据库id,并通过另一个文件删除该记录,然后重定向回同一页面。该机制使用HTML _GET方法实现。这意味着任何人都可以在URL提要中看到行ID,如果有人用不同的行ID请求这个URL, PHP文件会删除记录,因为没有采取任何其他安全措施来防止这种情况发生。而且这个应用程序不使用任何类型的会话。

这是我上面提到的任务的href代码。

echo "<a href='rejectone.php?id=$lvid' class='btn btn-danger btn-xs m-r-1em'>Cancal</a>";

这是我的reject。php代码

<?php
$lid =$_GET['id'];
include 'database.php';
$accval = "Accept";
try {
   $query = "UPDATE leavesrecords SET leavestatus = 'Reject' WHERE lvid = '$lid'";
    $stmt = $con->prepare( $query );
    $stmt->bindParam(1, $id);
    $stmt->execute();
}
catch(PDOException $exception){
    die('ERROR: ' . $exception->getMessage());
}   
header( "refresh:0;url=bs.php" );           
?>

我有两个问题

1)。如何在同一个PHP文件中运行拒绝任务而不重定向到另一个PHP文件

2)。如果我仍然使用jejectone.php文件

,我如何使用HTML _POST方法而不是get方法来传输数据?

谢谢! !

首先改变你的行:

echo "<a href='rejectone.php?id=$lvid' class='btn btn-danger btn-xs m-r-1em'>Cancal</a>";

echo '<a href="javascript:;" class="btn btn-danger btn-xs m-r-1em delete-item" primary-key="'.$lvid.'">Cancal</a>';

如果您的站点没有包含jQuery,您可以在关闭之前将此脚本添加到页面中</head>标记

<script type="text/javascript" src="https://code.jquery.com/jquery-3.1.0.min.js"></script>

将此JavaScript文件添加到页面底部,就在关闭</body>之前

<script type="text/javascript">
$(document).ready(function(){
    $(document).on('click', '.delete-item', function(e){
        e.preventDefault();
        if(!confirm('Are you sure you want to delete this item?')) return false;
        $.post('bs.php', {'id': t.attr('primary-key'), 'delete_item': 1}, function(e){
            window.location = 'bs.php';
        })
    })  
})
</script>

将你的reject .php拷贝到bs.php,但是做以下修改:

if(isset($_POST['delete_item']))
{
    $lid = (int)$_POST['id'];
    include 'database.php';
    $accval = "Accept";
    try {
       $query = "UPDATE leavesrecords SET leavestatus = 'Reject' WHERE lvid = :lid ";
        $stmt = $con->prepare( $query );
        $stmt->bindParam(':lid', $lid );
        $stmt->execute();
    }
    catch(PDOException $exception){
        die('ERROR: ' . $exception->getMessage());
    }
}

使用ajax post方法。详细信息请参阅此处的示例代码和可接受的解决方案的完整示例:删除MySQLi记录,而不显示URL中的id然后使用jquery从页面中删除该记录,这将提供更好的UI体验。