0

最大 5 つの画像をアップロードしたいフォームがあります。画像の名前と拡張子は、データベース テーブル 'images' に挿入され、_uploads/name_of_the_album/ ディレクトリにアップロードされます。

問題は、いくつかの画像を選択してアップロードすると、最初の画像のみが正しくアップロードされ、他の画像は失敗することです。

これが私のコードです:

if(isset($_FILES['image']) === true){
    $files = $_FILES['image'];

    $allowed_ext = array('jpg', 'jpeg', 'png', 'gif');

    $album_id = (int)$_GET['album_id'];
    $album_name = $_GET['album_name'];

    for($i=0; $i<count($files['name']); $i++){
        $name = $files['name'][$i];
        $tmp_name = $files['tmp_name'][$i];
        $size = $files['size'][$i];

        $ext = explode('.', $files['name'][$i]);
        $ext = strtolower(end($ext));

        $img_name = explode('.', $files['name'][$i]);
        $img_name = strtolower(current($img_name));

                    //do some testing echos to see the result
        //echo $img_name."<br>";

                     //here i'm going to add some validation as soon as
                     // i fix the multi-upload problem

        //insert image into database
        $query_insert_image = "INSERT INTO `images` (album_id, image_name, image_ext) VALUES ({$album_id}, '{$img_name}', '{$ext}') ";
        $insert_image = mysql_query($query_insert_image, $connection) or die(mysql_error());

        if(mysql_affected_rows() == 1){

            move_uploaded_file($tmp_name, '../_uploads/'.$album_name.'/'.$name);
        }

        //redirect
        redirect_to("view_album.php?succeed=1");
    }//end the for loop

    //echo '<pre>',print_r($files, true),'</pre>';
}

そして、ここにフォームのコードの一部があります:

<form action="" method="post" enctype="multipart/form-data" name="formUploadImages" id="formUploadImages">
    <p>
        <label for="image">Choose one or more Image(s):</label><br />
        <input type="file" name="image[]" id="image" /><br />
        <input type="file" name="image[]" id="image" /><br />
        <input type="file" name="image[]" id="image" /><br />
        <input type="file" name="image[]" id="image" /><br />
        <input type="file" name="image[]" id="image" />
    </p>
......

私が間違っていることはありますか?

4

5 に答える 5

3

自分の足元から枝を切っていると思います。

redirect_to("view_album.php?succeed=1");

リダイレクトとは、実行の終了を意味するページの更新を意味します。for最初のループが終了し、最初の画像がアップロードされた後にそのリダイレクトがトリガーさforれると、次の反復に進みません。

そしてもちろん、修正は for ループの後にその行をプッシュすることです (ヘッダーが既に送信されていない限り、リダイレクトの後に何も実行されることを期待しないでください)。

何をするかを行うほとんどの関数redirect_to()(別の関数に基づくコア関数ではありませんheader()) は、実行が停止することも確認します (呼び出し行と/header()呼び出しの別の行があります)。die()exit()

于 2012-08-30T11:31:11.753 に答える
1

私のために働いて、このphpコードを試してください:

for($i=1;$i<6;$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;
}

ルートに「images」という名前のフォルダーを作成すると、すべての画像がこのフォルダーに移動されます。html フォームは次のようになります。

<form action="" method="post" enctype="multipart/form-data" name="formUploadImages" id="formUploadImages">
<p>
    <label for="image">Choose one or more Image(s):</label><br />
    <input type="file" name="image_upload1" id="image_upload1" /><br />
    <input type="file" name="image_upload2" id="image_upload2" /><br />
    <input type="file" name="image_upload3" id="image_upload3" /><br />
    <input type="file" name="image_upload4" id="image_upload4" /><br />
    <input type="file" name="image_upload5" id="image_upload5" />
</p>

……

このコードは私の側で実行されており、必要に応じて編集した後、役立つ場合があります。ハッピーコーディング!

于 2012-08-30T13:23:37.833 に答える
0

1) Web サーバーのルート フォルダーに .htaccess ファイルを作成します。

2) 次のコードを .htaccess ファイルに追加して保存します。

php_value upload_max_filesize 20M
php_value post_max_size 20M
php_value max_execution_time 200
php_value max_input_time 200

これで、html フォームの file フィールドと PHP で利用可能な move_uploaded_file() 関数を使用して、最大 20MB のファイル サイズを簡単な方法でアップロードできます。

于 2012-08-30T11:31:47.917 に答える
0

foreach($_POST['image'] as $report_id){
$sql="INSERT INTO images(album_id, image_name, image_ext) VALUES ('{$album_id}', '{$report_id}', '{$ext}') "; $queryExe=mysql_query($sql); }

"//insert image into database" の後のコードの代わりに、このコードを置き換えます。

于 2012-08-30T11:27:03.877 に答える
0

http://php.net/manual/en/features.file-upload.multiple.php

警告ブロック「PHP 5.2.12以降、max_file_uploads構成...」を読んでください。多分それが問題です。

そして、いくつかの良い例があり、おそらく for の代わりに foreach を使用する必要があります。

于 2012-08-30T11:30:58.663 に答える