0

Webサイトのファイルアップロードスクリプトを作成しようとしていますが、配列nameからsize値を取得する方法がわかりません(配列はあまり得意ではありません)。

単一のファイルをアップロードして動作させることはできますが、どうすればループさせることができますか?

サーバーにアップロードする必要があり、データベースにもエントリが作成されます。

これが私のコードです...

HTML:

<form method="post" action="" enctype="multipart/form-data">
  <textarea name="reply_message"></textarea>
  <input name="attachments[]" type="file" size="20">
  <input type="submit" name="ReplyForm" value="Send">
</form>

PHP:

if(!empty($_POST['reply_message']))
{
    $reply_messages = $_POST['reply_message'];

    $database->query('INSERT INTO email_response (email_id, message) VALUES (?, ?)', array($email_id, $reply_message));

    if(isset($_FILES['attachments']))
    {
        require("upload.class.php");
        $upload = new upload();

        $last_email_response_id = $database->lastInsertId();
        $attachments = $_FILES['attachments'];

        foreach($attachments as $key => $value)
        {
            print_r($attachments);

            $database->query('INSERT INTO email_attachments (email_id, reply_id, file_name, created) VALUES (?, ?, ?, NOW())', array($email_id, $last_email_response_id, $attachments['name'][0]));

            $last_attachment_id = $database->lastInsertId();

            $upload->set('attachments', ATTACHMENTS.$reply_result->sender_email.'/'.$email_id.'/'.$last_attachment_id);

            $upload->upload();
        }
    }
}

配列(2つのファイルをアップロードする場合):

Array (
  [name] => Array (
    [0] => linkdownarrow.gif
    [1] => overlay-button.png
  )
  [type] => Array (
    [0] => image/gif
    [1] => image/png
  )
  [tmp_name] => Array (
    [0] => F:\xampp\tmp\phpFEC0.tmp
    [1] => F:\xampp\tmp\phpFEC1.tmp
  )
  [error] => Array (
    [0] => 0
    [1] => 0
  )
  [size] => Array (
    [0] => 63
    [1] => 135
  )
)
4

4 に答える 4

0

私はこれで動作するようになりました....

$attachments = $_FILES['attachments'];
if(count($attachments['name']) > 0)
{
    for($i = 0; $i < count($attachments['name']); $i++)
    {
        $database->query('INSERT INTO email_attachments (email_id, reply_id, file_name, file_size, created) VALUES (?, ?, ?, ?, NOW())', array($email_id, $last_email_response_id, $attachments['name'][$i], $attachments['size'][$i]));

        $last_attachment_id = $database->lastInsertId();

        $upload->set('attachments', ATTACHMENTS.$reply_result->sender_email.DS.$email_id.DS.$last_attachment_id);
        $upload->upload();
    }
}
于 2012-08-06T09:31:09.670 に答える
0

別の方法:$_FILES配列を書き換えることができます...

    $attachments = array();

    if(count($_FILES['attachments']) > 0)
    {
      for($i = 0; $i < count($_FILES['attachments']); $i++)
      {
        $attachments[] = array(
          'name' => $_FILES['attachments']['name'][$i],
          'size' => $_FILES['attachments']['size'][$i],
          'tmp_name' => $_FILES['attachments']['tmp_name'][$i],
          'type' => $_FILES['attachments']['type'][$i],
          'error' => $_FILES['attachments']['error'][$i],
        );
      }
    }

    print_r($attachments);

出力は次のようになります。

Array (
  [0] => Array (
    ['name'] => linkdownarrow.gif
    ['type'] => image/gif
    ['tmp_name'] => F:\xampp\tmp\phpFEC0.tmp
    ['error'] => 0
    ['size'] => 63
  )
  [1] => Array (
    ['name'] => overlay-button.png
    ['type'] => image/png
    ['tmp_name'] => F:\xampp\tmp\phpFEC1.tmp
    ['error'] => 0
    ['size'] => 135
  )
)

今、あなたはそれを使うことができます:

    foreach($attachments as $attachment)
    {
        $database->query('INSERT INTO email_attachments (email_id, reply_id, file_name, created) VALUES (?, ?, ?, NOW())', array($email_id, $last_email_response_id, $attachment['name']));
        $last_attachment_id = $database->lastInsertId();
        $upload->set('attachments', ATTACHMENTS.$reply_result->sender_email.'/'.$email_id.'/'.$last_attachment_id);
        $upload->upload();
    }
于 2012-08-06T08:15:26.197 に答える
0
if(count($_FILES['attachments']) > 0) {
    for($i = 0; $i < count($_FILES['attachments']); $i++) {
        move_uploaded_file($_FILES['attachments']['tmp_name'][$i], 'new/path');
        echo 'The name of the file is' . $_FILES['attachments']['name'][$i];
    }
    // or
    foreach($_FILES['attachments'] as $attachment) {
        echo $attachment['name'];
    }
}
于 2012-08-06T08:10:07.323 に答える
0

このようなことを試すことができます。

$img_types = array('image/jpeg', 'image/pjpeg');
$img_count = count($_FILES['attachments']['name']);
for($i = 0; $i < $img_count; $i++) {
    $tmp_name = $_FILES['attachments']['tmp_name'][$i];

    // forget empty file[] fields
    if($tmp_name == '') {
        continue;
    }

    // or more secure way to check allowed file types
    if(in_array($_FILES['attachments']['type'][$i], $img_types)) {
        // resize_images() etc...
    }
}
于 2012-08-06T08:18:33.823 に答える