1

javascriptand (html5)を使用してデータベースに画像を複数アップロードしたいのですがphp、問題があります。私のコードは、すべてではなく、選択された最新の写真である 1 つの画像をアップロードするだけです。この問題を解決するにはどうすればよいですか?また、どうすればよいですか?

私は開発者のmozilla html5を使用しています:ここ

複数の画像を選択し、ボタンをクリックしUpload Imageて結果を表示することで、コードをテストできます。

私の完全な CODDE からのデモ

私のjsコード:

function doClick() {
    var el = document.getElementById("fileElem");
    if (el) {
        el.click();
    }
}

function handleFiles(files) {
    var d = document.getElementById("fileList");
    if (!files.length) {
        d.innerHTML = "<p>No files selected!</p>";
    } else {
        var list = document.createElement("ul");
        d.appendChild(list);
        for (var i = 0; i < files.length; i++) {
            var li = document.createElement("li");
            list.appendChild(li);

            var img = document.createElement("img");
            img.src = window.URL.createObjectURL(files[i]);;
            img.height = 60;
            img.onload = function () {
                window.URL.revokeObjectURL(this.src);
            }
            li.appendChild(img);

            var info = document.createElement("span");
            info.innerHTML = files[i].name + ": " + files[i].size + " bytes";
            li.appendChild(info);
        }
    }
}

私のphpコード:

<?php 
  foreach ($_FILES[ 'userfile'] as $key=>$value{ 
      echo '<pre>';
      print_r($value);
  }
?>

私のhtmlコード:

<html>

    <head>
        <title>file input click() demo</title>
        <script type="text/javascript" src="html5java.js"></script>
    </head>

    <body>
<a href="javascript:doClick()">Select some files</a>

        <div id="fileList"></div>
        <form action="up.php" method="post" enctype="multipart/form-data">
            <input type="file" name="userfile[]" id="fileElem" multiple accept="image/*"
            style="display:none" onchange="handleFiles(this.files)">
            <input type="submit" value="Upload Images">
        </form>
    </body>

</html>
4

1 に答える 1

1

問題は、PHP の複数のファイルが $_FILES['userfile'][x]['name'] などとして保存されないことです。それらは $_FILES['userfile']['name']['x' として保存されます。 ]。

そのため、最善の方法は通常、files 配列をループして、配列をより論理的なパターンに並べ替えることです。以下のような関数は、期待どおりに機能するように変換するのに非常にうまく機能します(2番目のコメントから取得:http://php.net/manual/en/features.file-upload.multiple.php

<?php
    public static function fixGlobalFilesArray($files) {
        $ret = array();

        if(isset($files['tmp_name']))
        {
            if (is_array($files['tmp_name']))
            {
                foreach($files['name'] as $idx => $name)
                {
                    $ret[$idx] = array(
                        'name' => $name,
                        'tmp_name' => $files['tmp_name'][$idx],
                        'size' => $files['size'][$idx],
                        'type' => $files['type'][$idx],
                        'error' => $files['error'][$idx]
                    );
                }
            }
            else
            {
                $ret = $files;
            }
        }
        else
        {
            foreach ($files as $key => $value)
            {
                $ret[$key] = self::fixGlobalFilesArray($value);
            }
        }

        return $ret;
    }
?>
于 2012-11-16T19:22:44.943 に答える