我一直都做错了,我曾经从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 ?>
答案 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>