我使用基于OctoberCMS的Laravel。
我使用Twig使用循环生成一个简单的图库。
您可以删除单张图片,或选中复选框,然后点击任何删除按钮进行提交。
{{ record.name }}
是数据库中的图像名称。
<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>
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
且添加到数组中。
如何解决此问题,并以相同的形式进行复选框删除和单删除?
答案 0 :(得分:2)
你对我不是很直观。添加名为&#34的按钮;删除已选中的图像&#34;会更好。 无论如何,您可以设置提交的动态值
{% for record in records %}
<!-- [...] -->
<button type="submit" name="submit" value="{{ record.name }}">Delete</button>
{% endfor %}
然后
function onDelete() {
$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 {
$nameFile = $_POST['submit']; // <-----
File::delete("$path$nameFile.jpg");
}
}