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

フォームが送信されたときにブラウザがサーバーにIDを送信しないという単純な理由から、純粋なHTML+PHPでそれを行うことはできません。

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 に答える