2

私はPHPを初めて使用し、複数の画像アップローダーを作成しようとしています。私のフォームは次のようになります。

<form action="" method="post" enctype="multipart/form-data">
    <p class="style2">Izberi datoteko: <br /><input type="file" name="image" multiple="multiple" /></p>
    <p class="style2">
        Izberi Album: <br />
            <select name="album_id">
                <?php 
                    foreach ($albums as $album) {
                        echo '<option value="', $album['id'] ,'">', $album['name'] ,'</option>';
                    }
                ?>
            </select>
    </p>
    <p class="style2"><input type="submit" value="Naloži Slike" /></p>
</form>

そして、php側では次のようなことをしました:

if (isset($_FILES['image'], $_POST['album_id'])) {
$image_name = $_FILES['image']['name'];
$image_size = $_FILES['image']['size'];
$image_temp = $_FILES['image']['tmp_name'];

$allowed_ext = array('jpg', 'jpeg', 'png', 'gif');
$a = explode('.', $image_name);
$image_ext = strtolower(end($a));

$album_id = $_POST['album_id'];

$errors = array();

if (empty($image_name) || empty($album_id)) {
    $errors[] = '<p class="style2">Nekaj manjka!</p>';
} else {

    if (in_array($image_ext, $allowed_ext) === false) {
        $errors[] = '<p class="style2">Izbrani tip datoteke ni dovoljen!</p>';
    }

    if ($image_size > 2097152) {
        $errors[] = '<p class="style2">Izbrana datoteka je prevelika! Maksimalna velikost datoteke mora biti 2mb!</p>';
    }           
}

if (!empty($errors)) {
    foreach ($errors as $error) {
        echo $error;
    }
} else {
    upload_image($image_temp, $image_ext, $album_id);
    header('Location: view_album.php?album_id='.$album_id);
    exit();
} 

}

画像をデータベースに入れる関数を作成しました。この関数は次のようになります。

function upload_image($image_temp, $image_ext, $album_id) {
$album_id = (int)$album_id;

mysql_query("INSERT INTO `images` VALUES ('', '". $_SESSION['user_id'] ."', '$album_id', UNIX_TIMESTAMP(), '$image_ext')"); 

$image_id = mysql_insert_id();
$image_file = $image_id.'.'.$image_ext;
move_uploaded_file($image_temp, 'galerija/'.$album_id.'/'.$image_file);

create_thumb('galerija/'.$album_id.'/', $image_file, 'galerija/thumbs/'.$album_id.'/');
}

これは、1つの画像のみをアップロードする場合に問題なく機能します。複数の選択ファイルのフォームを作成しようとしましたが、さらに多くの画像を選択できますが、データベースでは最初の画像しか取得できません。スクリプトを挿入しようとしましforeach()たが、どこにどのように挿入する必要があるのか​​わかりません。データベースにさらに画像をアップロードできるように、スクリプトを変更するにはどうすればよいですか?私はそれを理解することができません。どんな助けでも素晴らしいでしょう!

4

4 に答える 4

3

A. PHP は、そのような複数のファイルを参照することはできません。

交換

  <input type="file" name="image" multiple="multiple" />

 <input type="file" name="image[]" multiple="multiple" />

このファイルをループするには、次のようなものが必要です

foreach ( $_FILES['image']['tmp_name'] as $key => $val ) {

    $fileName = $_FILES['image']['name'][$key];
    $fileSize = $_FILES['image']['size'][$key];
    $fileTemp = $_FILES['image']['tmp_name'][$key];

    $fileExt = pathinfo($fileName, PATHINFO_EXTENSION);
    $fileExt = strtolower($fileExt);

    // Continue
}
于 2012-10-14T21:58:18.370 に答える
2

これは役に立ちます:

<?php
$target = "images/".$_FILES['image_upload']['name'];
$image_upload = mysql_real_escape_string(($_FILES['image_upload']['name']));
move_uploaded_file($_FILES['image_upload']['tmp_name'], $target);
for($i=2;$i<5;$i++)
{
if(!empty($_FILES['image_upload'.$i])):
$target = "images/".$_FILES['image_upload'.$i]['name'];
$image_upload.= ",".mysql_real_escape_string(($_FILES['image_upload'.$i]['name']));
 move_uploaded_file($_FILES['image_upload'.$i]['tmp_name'], $target);
 endif;
 }
 mysql_query("INSERT INTO `images` VALUES ('', '". $_SESSION['user_id'] ."', '$album_id', UNIX_TIMESTAMP(), '$image_upload')");
 ?>

ftp を使用してルートにフォルダーを作成します。「画像」と名付けました。すべての画像がこのフォルダにアップロードされます。あなたの入力タイプの名前を変更してください。

ハッピーコーディング!!

于 2012-10-17T06:50:11.277 に答える
0

name="image" を name="image[]" に変更します

例:

<pre><?php print_r($_FILES); ?></pre>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="image[]" multiple="multiple" />
<input type="submit">
</form>
于 2012-10-14T21:58:20.437 に答える
0

画像を 1 つだけ (foreach ループではなく) 送信したため、データベースに 1 つの画像を受信しましたが、失敗しました:

upload_image($image_temp, $image_ext, $album_id);

次のようなアップロードされた画像の配列を HTML 形式で追加する必要があります。

<input type="file" name"image[]" multiple="multiple" />
<input type="file" name"image[]" multiple="multiple" />

そして、画像のループを受け取ります:

if (isset($_POST["image"]))
{
    $album_id = (int)$_POST['album_id'];

    foreach ($_FILES["image"] as $images)
    {

        $image_temp = $images['tmp_name'];
        $image_name = $images['name'];

        $allowed_ext = array('jpg', 'jpeg', 'png', 'gif');
        $a = explode('.', $image_name);
        $image_ext = strtolower(end($a));


        upload_image($image_temp, $image_ext, $album_id);
    }
}

var_dump($_FILES)HTML形式の配列のチェック用でダンプしていない場合。

あなたもSQLインジェクションの犠牲者であることに注意してください!SQL インジェクションについては、Stackoverflow を参照してください。

于 2012-10-14T21:58:49.880 に答える