使用PHP数组很难

时间:2012-08-06 08:02:02

标签: php arrays file upload pdo

我正在尝试为我的网站制作文件上传脚本,但我无法弄清楚如何从我的数组中获取namesize值(我对数组不是很好)

我可以让它上传单个文件,但我怎样才能让它循环?

我需要将其上传到我的服务器,并且还在数据库中创建了一个条目。

这是我的代码......

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();
        }
    }
}

数组(上传两个文件):

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 个答案:

答案 0 :(得分: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'];
    }
}

答案 1 :(得分: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();
    }

答案 2 :(得分: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...
    }
}

答案 3 :(得分: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();
    }
}