使用带有Codeigniter的$ _POST删除数据库记录

时间:2011-01-26 04:04:24

标签: php codeigniter post uri

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

myview.php (摘录)

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

3 个答案:

答案 0 :(得分:1)

通过uri id查看/删除是完全没问题的,我不敢说使用$_POST是错误的,但为每个删除元素创建一个新的唯一表单非常混乱,并且权衡你的内容获得(我猜没有暴露的身份?),我认为将uri用于删除功能更为“正确”。

如果您只希望某些人能够删除某些记录,请在删除功能本身中以编程方式处理,不要依赖于请求仅通过$_POST发送的事实。这是不可靠的,任何人都可以生成一个帖子请求。

答案 1 :(得分:1)

对于后来遇到这种情况的人来说,这就是我解决问题的方法。

在我的控制器中,我有一个名为delete的方法,用于检查表单字段是否是通过$_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 ....
}

答案 2 :(得分:0)

您的语法错误在于此行:

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