在php中上传多个图像以及单个表单中的文本字段

时间:2014-09-04 11:52:55

标签: php mysql

我在页面上有一个表单。它有6个文本字段,包含6个上传文件字段。我需要将文本和文件路径写入数据库。我在网上看过很多例子,但大多数是上传单个文件或从同一个上传字段上传多个文件。

我是php的新手,所以任何帮助都会非常有用。

非常感谢提前。

我有这个代码用于上传多个图像,但无法解释如何将这些图像与相应的输入字段一起发布。

$valid_formats = array("jpg", "png", "gif", "zip", "bmp");
$max_file_size = 1024*100; //100 kb
$path = "uploads/"; // Upload directory
$count = 0;

if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
    // Loop $_FILES to exeicute all files
    foreach ($_FILES['files']['name'] as $f => $name) {     
        if ($_FILES['files']['error'][$f] == 4) {
            continue; // Skip file if any error found
        }          
        if ($_FILES['files']['error'][$f] == 0) {              
            if ($_FILES['files']['size'][$f] > $max_file_size) {
                $message[] = "$name is too large!.";
                continue; // Skip large files
            }
            elseif( ! in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats) ){
                $message[] = "$name is not a valid format";
                continue; // Skip invalid file formats
            }
            else{ // No error found! Move uploaded files 
                if(move_uploaded_file($_FILES["files"]["tmp_name"][$f], $path.$name))
                $count++; // Number of successfully uploaded file
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

你可以这样做吗?

<form action="">
    <ul>
        <li>
            <label>
                <strong></strong>
                <input type="text" name="name1" />
            </label>
        </li>
        <li>
            <label>
                <strong></strong>
                <input type="file" name="file1" />
            </label>
        </li>
        <li>
            <label>
                <strong></strong>
                <input type="text" name="name2" />
            </label>
        </li>
        <li>
            <label>
                <strong></strong>
                <input type="file" name="file2" />
            </label>
        </li>
        <li>
            <label>
                <strong></strong>
                <input type="text" name="name3" />
            </label>
        </li>
        <li>
            <label>
                <strong></strong>
                <input type="file" name="file3" />
            </label>
        </li>
        <li>
            <label>
                <strong></strong>
                <input type="text" name="name4" />
            </label>
        </li>
        <li>
            <label>
                <strong></strong>
                <input type="file" name="file4" />
            </label>
        </li>
        <li>
            <label>
                <strong></strong>
                <input type="text" name="name5" />
            </label>
        </li>
        <li>
            <label>
                <strong></strong>
                <input type="file" name="file5" />
            </label>
        </li>
        <li>
            <label>
                <strong></strong>
                <input type="file" name="file6" />
            </label>
        </li>
        <li><input type="submit"></li>
    </ul>
</form>

在PHP中,您可以通过这种方式捕获它们:

<?php
    if (count($_FILES) > 0) {

    }
?>

答案 1 :(得分:0)

对于6个领域而言,它不会与一个领域大不相同。

你需要

  • 为文本和文件上载添加额外字段
  • 使用PHP获取所有提交的数据
  • 使用SQL语句插入数据

需要注意的事项:

  • 表单中的每个字段都有一个名称。使名称合理,以便工作容易,例如name="text1"name="file1"name="text2"name="file2"
  • 每次每场都会满满的吗?您是否需要6个字段或不同的数字?如果你想上传任意数量的文件,那么它就是一个不同的故事。您需要使用javascript和ajax来创建一次一次的上传,这将是快速,信息丰富且用户友好的。
  • SQL语句,因为你需要运行6个几乎相同的语句,看看准备好的语句 - 无论如何它们都更好但是你没有任何借口。

更新:现在您的代码已发布;您需要修改代码,以便它将文件名插入数据库中。这不是一个很难的改变。

要处理文本字段,有几种方法。您可以确保它们以text0开头编号。然后,循环遍历文件,您可以使用$_POST['text'.$i]$i作为循环计数器)获取相应的文本字段。或者,您可以先构建一个文本值数组,然后一起处理文本值和文件上传。