【发布时间】:2017-03-05 04:55:10
【问题描述】:
我正在使用基于Laravel 的OctoberCMS。
我使用Twig 使用循环生成一个简单的图库。
您可以删除单个图像,或使用复选框选择,然后单击任意删除按钮提交。
{{ record.name }}是数据库中的图片名称。
用 Twig 形成表格
<form method="POST" action="/">
<input type="hidden" name="_handler" value="onDelete" >
<!-- Gallery -->
{% for record in records %}
<!-- Image -->
<img src="images/{{ record.name }}.jpg">
<!-- Single Image Name -->
<input type="hidden" name="single" value="{{ record.name }}" />
<!-- Checkbox Image Name -->
<input type="checkbox" name="queued[]" value="{{ record.name }}">
<!-- Delete -->
<button type="submit" name="submit" value="delete">Delete</button>
{% endfor %}
</form>
PHP
function onDelete() {
$path = '/var/www/mysite/images/';
$single = $_POST['single'];
$checkboxes = '';
$checkboxes = isset($_POST['queued']) ? $_POST['queued'] : array();
# Checkbox Delete
if(isset($_POST['queued'])) {
# Delete each in queued array
foreach($checkboxes as $name) {
File::delete("$path$name.jpg");
}
}
# Single Delete
else {
File::delete("$path$single.jpg");
}
}
问题
渲染的 HTML
<form>
<img src="images/image1.jpg">
<input type="hidden" name="single" value="image1" >
<input type="checkbox" name="queued[]" value="image1" />
<img src="images/image2.jpg">
<input type="hidden" name="single" value="image2" >
<input type="checkbox" name="queued[]" value="image2" />
<img src="images/image3.jpg">
<input type="hidden" name="single" value="image3" >
<input type="checkbox" name="queued[]" value="image3" />
</form>
Checkbox Delete 运行 for 循环并有效。
但单次删除总是删除表单上的最后一个name="single",image3。
我尝试将$_POST['single'] 设置为数组name="single[]",但它删除了所有 个文件,因为它们不是type="checkbox",而是始终为isset 并添加到数组中。
我该如何解决这个问题并在同一个表单中使用复选框删除和单次删除?
【问题讨论】: