1

我有一个包含以下代码的HTML表单:

<input id="image_22" name="images[]" type="file"  />
<input id="image_8" name="images[]" type="file"  />   

我希望能够将表单输入 ID 元素存储在变量中(例如 $imgnumber = 'image_22')。这可能吗?在下面的代码中查看我的评论:

PHP:

for ($i = 0; $i < count($_FILES['images']['name']); $i++) {
        $number_of_file_fields++;
        if ($_FILES['images']['name'][$i] != '') { //check if file field empty or not
            $number_of_uploaded_files++;
            $uploaded_files[] = $_FILES['images']['name'][$i];

            if (move_uploaded_file($_FILES['images']['tmp_name'][$i], $upload_directory . $_FILES['images']['name'][$i])) {

                $number_of_moved_files++;
                // *** COMMENT *** // 
                $imgnumber = CURRENT_FILE_INPUT_ID - this would store e.g. "image_22"
                }

            }

    }

非常感谢您对此的任何帮助:-)

4

2 回答 2

2

只有name输入的和值被提交到服务器端。您可以将 ID 编码到名称中,而不是使用文件数组。

<input id="image_22" name="image_22" type="file"  />
<input id="image_8" name="image_8" type="file"  />

PHP端访问:

foreach($_FILES as $imageName => $file)
{
    // $imageName contains image_22 or image_8
    // $file contains the full array for this particular file
}

编辑:

您更新的 PHP 代码可能是:

foreach($_FILES as $imageName => $file)
{
    $number_of_file_fields++;
    if ($file['name'] != '') { //check if file field empty or not
        $number_of_uploaded_files++;
        $uploaded_files[] = $file['name'];

        if (move_uploaded_file($file['tmp_name'], $upload_directory . $file['name'])) {

            $number_of_moved_files++;
            // *** COMMENT *** // 
            $imgnumber = $imageName; // image_22 or image_8
        }
    }
}

否则,您将不得不将 ID 作为单独的变量发送,例如使用隐藏输入或查询字符串。

于 2012-11-29T10:14:18.270 回答
1

您不能在纯 HTML+PHP 中执行此操作,原因很简单,即在提交表单时浏览器不会将 ID 发送到服务器。

最明显的解决方案是在其他地方添加相关信息,例如name属性。

更新:

而不是:

<input id="image_22" name="images[]" type="file"  />
<input id="image_8" name="images[]" type="file"  />

... 做这个:

<input name="images[22]" type="file"  />
<input name="images[8]" type="file"  />

更新:

如果print_r()您输入,您将看到它的样子:

Array
(
    [images] => Array
        (
            [name] => Array
                (
                    [22] => Test.txt
                    [8] => Blah.exe
                )

            [type] => Array
                (
                    [22] => text/plain
                    [8] => application/octet-stream
                )

            [tmp_name] => Array
                (
                    [22] => D:\Server\PHP\tmp\php7D2D.tmp
                    [8] => D:\Server\PHP\tmp\php7D4E.tmp
                )

            [error] => Array
                (
                    [22] => 0
                    [8] => 0
                )

            [size] => Array
                (
                    [22] => 3695
                    [8] => 432
                )

        )

)
于 2012-11-29T10:14:03.277 回答