HTML复选框和表单中的单个输入

时间:2017-03-05 04:55:10

标签: php html checkbox twig

我使用基于OctoberCMSLaravel

我使用Twig使用循环生成一个简单的图库。

您可以删除单张图片,或选中复选框,然后点击任何删除按钮进行提交。

{{ record.name }}是数据库中的图像名称。

带有树枝的表格

gallery

<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且添加到数组中。

如何解决此问题,并以相同的形式进行复选框删除和单删除?

1 个答案:

答案 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");
    }

}