0

複数の画像 (.jpg/.png/etc) をアップロードする方法を見つけるのに苦労しました。私の仕事では、5枚の写真をデータベースレコードにアップロードしようとしていました. これまでのところ、5 つのレコードを 1 つのレコードにまとめてアップロードするのに苦労しています。私は Ws3 Web サイトの PHP を使用しましたが、正常に動作しますが、このコードは 1 つの画像のみを対象としています。

PHP コード -

 $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 2000000)
&& in_array($extension, $allowedExts))
{
  if ($_FILES["file"]["error"] > 0)
  {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
  }
  else
  {

    if (file_exists("upload/" . $_FILES["file"]["name"]))
    {

    }
    else
    {
        move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . uniqid() . "_" . $_FILES["file"]["name"]);
    }
  }
}
else
{
    $error =  "Invalid file";
}

私のHTMLは次のとおりです。

<label for="file">Filename:</label>
        <input type="file" name="file" id="file">

        <input type="file" name="file" id="file">

        <input type="file" name="file" id="file">

        <input type="file" name="file" id="file">

        <input type="file" name="file" id="file">

どんなアドバイスでも大歓迎です!乾杯

4

3 に答える 3

6

まず、enctype="multipart/form-data"フォームに追加します。次に、fileフィールドの名前を次のように変更します。

<input type="file" name="file[]" id="file" >
<input type="file" name="file[]" id="file" >
<input type="file" name="file[]" id="file" >

これにより、送信されたファイルの配列が作成されます。これで、ファイルに対して実行できるようにforeachなります。簡単な例:

foreach ($_FILES['file']['name'] as $f => $name) {

}

既存のコードの周りに、[$f]すべての$_FILES["file"]変数に追加します。など$_FILES["file"]["size"]に変更する必要が$_FILES["file"]["size"][$f]あります。ではforeachを参照$nameして$_FILES["file"]["name"][$f]いるので、代わりに使用できます$name

スクリプトに基づく完全な php コード:

foreach ($_FILES['file']['name'] as $f => $name) {
 $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $name);
    $extension = end($temp);

if ((($_FILES["file"]["type"][$f] == "image/gif")
|| ($_FILES["file"]["type"][$f] == "image/jpeg")
|| ($_FILES["file"]["type"][$f] == "image/jpg")
|| ($_FILES["file"]["type"][$f] == "image/png"))
&& ($_FILES["file"]["size"][$f] < 2000000)
&& in_array($extension, $allowedExts))
{
  if ($_FILES["file"]["error"][$f] > 0)
  {
    echo "Return Code: " . $_FILES["file"]["error"][$f] . "<br>";
  }
  else
  {

    if (file_exists("upload/" . $name))
    {

    }
    else
    {
        move_uploaded_file($_FILES["file"]["tmp_name"][$f], "upload/" . uniqid() . "_" . $name);
    }
  }
}
else
{
    $error =  "Invalid file";
}
}

最後に、さまざまなサイトで PHP について詳しく学ぶことをお勧めします。W3schools は簡単ですが、最良の選択肢ではありません。例として、これをチェックしています:

    if ((($_FILES["file"]["type"][$f] == "image/gif")
|| ($_FILES["file"]["type"][$f] == "image/jpeg")
|| ($_FILES["file"]["type"][$f] == "image/jpg")
|| ($_FILES["file"]["type"][$f] == "image/png"))
&& ($_FILES["file"]["size"][$f] < 2000000)
&& in_array($extension, $allowedExts))

ただし、次のように、配列だけで十分です。

    if ($_FILES["file"]["size"][$f] < 2000000 && in_array($extension, $allowedExts))

$_FILES["file"]["type"]常に期待どおりの型を返すとは限りません。オーディオ ファイルやビデオ ファイルで何度も見られます。W3schools スクリプトを参照する MIME タイプに関する SO に関する別の投稿: PHP: $_FILES["file"]["type"] is useless

StackOverflow で新しい質問をする前に、検索してください。私はちょうどあなたのために長い答えを書きましたが、同じことがこの種の質問に対してすでに何度も行われています. https://stackoverflow.com/search?q=multiple+upload+php

それがあなたの質問に答えてくれることを願っています。PHP の学習を頑張ってください。

于 2013-10-30T15:23:10.000 に答える
0

問題は HTML にあると思います...次の 5 つではなく:

<input type="file" name="file" id="file">

次のようにしてみてください。

<input type="file" name="file[]">

同じ入力名で複数のファイルを送信しようとするのではなく、ファイルの配列を送信します。

補足として、複数の要素で同じ id 属性を使用しないでください。おそらく、クラスを使用するつもりでしたか?

于 2013-10-30T19:32:53.063 に答える