Php 使用带有Codeigniter的$\u POST删除数据库记录

Php 使用带有Codeigniter的$\u POST删除数据库记录,php,codeigniter,post,uri,Php,Codeigniter,Post,Uri,我一直在做错事,我过去常常从URI段获取值,但没有意识到这不是理想的方法。所以我改变了我的方法,现在所有的东西都通过$u的帖子。我不确定我做的是否正确,有人能解释一下吗?“我的视图”包含列表数据,列出从数据库中提取的项。每个项目都有两个链接,“查看”和“删除”。代码似乎有效,但不知道是否可以更好地编码。我忘记了表单名称不是唯一的,所以当我去删除一条记录时,它总是删除最新的记录(设置了最后一个隐藏字段) myview.php(代码片段) 通过uri id查看/删除是非常好的,我不会冒险说使用$\

我一直在做错事,我过去常常从URI段获取值,但没有意识到这不是理想的方法。所以我改变了我的方法,现在所有的东西都通过$u的帖子。我不确定我做的是否正确,有人能解释一下吗?“我的视图”包含列表数据,列出从数据库中提取的项。每个项目都有两个链接,“查看”和“删除”。代码似乎有效,但不知道是否可以更好地编码。我忘记了表单名称不是唯一的,所以当我去删除一条记录时,它总是删除最新的记录(设置了最后一个隐藏字段)

myview.php(代码片段)



通过uri id查看/删除是非常好的,我不会冒险说使用
$\u POST
是错误的,但是为每个删除元素创建一个新的唯一表单是非常混乱的,并且与您获得的内容(我想没有公开的id?)相比,我相信将uri用于删除函数更“正确”


如果您只希望某些人能够删除某些记录,请在delete函数中以编程方式进行处理,不要依赖于请求仅通过
$\u POST
发送这一事实。这是不可靠的,任何人都可以生成post请求。

对于以后遇到此问题的任何人,以下是我解决问题的方法

在我的控制器中,我有一个名为
delete
的方法,该方法检查表单字段是否通过
$\u POST
提交。如果没有变量,则使用错误消息将它们重定向到某个位置。如果该字段已通过,则进行常规检查以确保可以删除该记录

if(!isset($_POST['item_id']))
{
    $this->session->set_flashdata('message', 'item cannot be removed!'); 
    redirect("/item");
}


if($this->input->post('item_id')) {         
    ... code ....
    ... code ....
}

您的语法错误与此行有关:

<?php foreach($records as $record): ?>
         <form method="POST" name="myform<?php echo $location->id;?>"      action="/location/delete">
         <a href="/location/view/<?php echo $location->id;?>">View</a> <a href="#" onclick="document.myform<?php echo
 $location->id;?>.submit();">Delete</a>
         <br />
          <input type="hidden" name="location_id" value="<?php echo $location->id;?>">
         </form>
      <?php endforeach ?>


我一直做错了,
-谁说的?如果你的应用程序是受控的,那么通过URI段删除是一个完全可行的解决方案。另外,您的代码将
$records用作$record
,但您将其称为
$location
——这并不正确,我将使用
base\u url()
方法使用绝对url以避免将来出现问题(将项目移动到子文件夹..等等)。为什么不稍微调整一下应用程序并发出异步post请求来删除记录?这样你就不必使用多个表单了。对不起,我的错是,我在发布之前修改了代码,应该是
$record->id
。我计划使用Ajax,但如果有人想禁用JS,我不能依赖它。我不希望用户能够通过URL(例如)删除记录。是的,我已经进行了检查,以确保他们试图删除的记录确实属于他们。我看到了关于跨站点攻击的参考资料。最大的问题是,有人传递了包含记录id的URL(如果他们碰巧知道的话),而这个人在无意中会点击它并发出“再见记录”的声音。因此,你试图阻止的情况是,有人发现了记录id,以及它所属的用户,在另一个网站上创建了链接,欺骗它所属的特定用户,点击链接…:|我认为可能更容易让用户站在枪口前,让他们自己进去删除它
<?php foreach($records as $record): ?>
         <form method="POST" name="myform<?php echo $location->id;?>"      action="/location/delete">
         <a href="/location/view/<?php echo $location->id;?>">View</a> <a href="#" onclick="document.myform<?php echo
 $location->id;?>.submit();">Delete</a>
         <br />
          <input type="hidden" name="location_id" value="<?php echo $location->id;?>">
         </form>
      <?php endforeach ?>
   <form method="POST" name="myform<?php echo $location->id;?>" action="/location/delete">
<?php foreach($records as $record): ?>
    a href="/location/view/<?php echo $location->id;?>">View</a> <a href="#" onclick="document.myform<?php echo $location->id;?>.submit();">Delete</a>
        <br />
        <input type="hidden" name="location_id" value="<?php echo $location->id;?>">
    <?php endforeach ?>
       </form>