上传包含标题和说明的多个图像

时间:2014-07-30 20:07:14

标签: php

我正在尝试将多个图片上传到图库页面,但每个图片都必须有标题和说明。此外,每张图片都需要调整大小。

我目前可以上传一张图片,其标题和说明如下:

//create gallery folder and image resize code above^^

move_uploaded_file($temp, $path);


$title          =   Input::get('title');
$file_name      =   $file_name;
$added          =   date('Y-m-d H:i:s');
$description    =   Input::get('description');

$insertdata = DB::getInstance()->insert('gallery', array(
    'added'         => $added,
    'title'         => $title,
    'description'   => $description,
    'file_name'     => str_replace("../images/gallery/", "", $file_name),
));

//Error Checking and Success Message etc...
if(!$insertdata)

我当前的表格

 <form action="" method="post" enctype="multipart/form-data">
        Title*:<br />
        <input type="text" name="title" maxlength="60" placeholder="Give this field a title" required>
        <br><br>

        Image Description*:<br />
        <textarea id="description" name="description" rows="8" placeholder="Pop in some details" required></textarea>
        <br><br>


        Add an image:<br />
        <input type="file" name="image" >
        <p id="size">Maximum file size of 5MB</p>

    <input type="submit" value="Add Image">
</form>

我只是不确定我需要添加什么来允许此表单将图像和数据上传到我的表中。

当我尝试下面的表单时,它只会将最后一个条目上传到表格中并跳过第一个条目。

我想对表单做什么:

<form action="" method="post" enctype="multipart/form-data">
        Title*:<br />
        <input type="text" name="title" maxlength="60" placeholder="Give this field a title" required>
        <br><br>

        Image Description*:<br />
        <textarea id="description" name="description" rows="8" placeholder="Pop in some details" required></textarea>
        <br><br>


        Add an image:<br />
        <input type="file" name="image" >
        <p id="size">Maximum file size of 5MB</p>

        <br><br><br><br>

        Title*:<br />
        <input type="text" name="title" maxlength="60" placeholder="Give this field a title" required>
        <br><br>

        Image Description*:<br />
        <textarea id="description" name="description" rows="8" placeholder="Pop in some details" required></textarea>
        <br><br>


        Add an image:<br />
        <input type="file" name="image" >
        <p id="size">Maximum file size of 5MB</p>


    <input type="submit" value="Add Image">
</form>

对此有任何建议或帮助将不胜感激。

以下是此脚本的完整代码。 Pastebin

此代码允许我将文本字段插入表中,即使没有图像存在。

这就是为什么在顶部有if / else语句。

2 个答案:

答案 0 :(得分:2)

上传多个文件时,您需要循环浏览文件:

<?php

function reArrayFiles(&$file_post) {

    $file_ary = array();
    $file_count = count($file_post['name']);
    $file_keys = array_keys($file_post);

    for ($i=0; $i<$file_count; $i++) {
        foreach ($file_keys as $key) {
            $file_ary[$i][$key] = $file_post[$key][$i];
        }
    }

    return $file_ary;
}

?>

reArrayFiles()旨在重新组织数据结构

<?php
require_once 'functions.php';


if(isset($_FILES['image']['tmp_name'], $_POST)) {
    $files = reArrayFiles($_FILES['image']);
    $i = 0;
    foreach ($files as $file) {
        $temp = $file['tmp_name'];
        $path = 'upload/'.$file['name'];//replace
        if(move_uploaded_file($temp, $path)){
            $insertdata = DB::getInstance()->insert('gallery', array(
                'added' => date('Y-m-d H:i:s'),
                'title'=> $_POST['title'][$i],
                'description'=> $_POST['description'][$i],
                'file_name'  => $path,                                              
            ));
        }else{
            echo 'failed to upload';
        }
        $i++;
    }
}else{
    echo 'file not uploaded';
}

?>

答案 1 :(得分:1)

您需要将[]附加到输入元素名称。这使它们作为数组提交。

<form action="" method="post" enctype="multipart/form-data">
        Title*:<br />
        <input type="text" name="title[]" maxlength="60" placeholder="Give this field a title" required>
        <br><br>

        Image Description*:<br />
        <textarea id="description" name="description[]" rows="8" placeholder="Pop in some details" required></textarea>
        <br><br>


        Add an image:<br />
        <input type="file" name="image[]" >
        <p id="size">Maximum file size of 5MB</p>

        <br><br><br><br>

        Title*:<br />
        <input type="text" name="title[]" maxlength="60" placeholder="Give this field a title" required>
        <br><br>

        Image Description*:<br />
        <textarea id="description" name="description[]" rows="8" placeholder="Pop in some details" required></textarea>
        <br><br>


        Add an image:<br />
        <input type="file" name="image[]" >
        <p id="size">Maximum file size of 5MB</p>


    <input type="submit" value="Add Image">
</form>

这样做会使$_POST['title']$_POST['description']成阵列。

至于$_FILES,它会有所不同。 $_FILES['image']仍然会有nametype等值,但它们将是数组。例如,$_FILES['image']['name']将是所有上传文件名的数组。 $_FILES['image']中的其他所有内容都是如此。