从多个上传的形式排列,上传图片,然后插入到数据库(PHP,MySQL的)(Arrays from m

2019-09-18 11:45发布

语言:PHP / MySQL的

我打算在我心里,我真的现在问...我有一个多文件上传表单:

<input type="file" name="fileupload[]" multiple>

随着一些JavaScript的帮助下,在此输入的每处更改,其追加另一个里面输入文件名列表,+一个格式化字符串(从文件名中抢下),所以平变化,我们有如下布局 (假设我们只添加了一些图像):

几乎类似: http://jsfiddle.net/pxfunc/WWNnV/4/


//这样布局的HTML表示将...(假设我们添加3个图像)

<input type="file" name="fileupload[]" multiple>

  • 图像名称-1.JPG <input type="text" value="Image Name 1" name="keyword[]">
  • justsome_file.png <input type="text" value="Justsome File" name="keyword[]">
  • some_Img-031.gif <input type="text" value="Some Img 031" name="keyword[]">

<input type="submit" value="Upload">


我这样说,因为除了上传文件, 我也想将它们添加到我的数据库,基于它的文件名默认标题 (和设置/更改该标题为每个图像我上传它的选项)。 没有与我的形式没有问题。

问题:我的困境在于当表单数据/动作提交的PHP页面中。

我只能设法之一:

  • 上传正确的图像,但得到的所有相同的标题
  • 插入正确的头衔,但得到相同的图像对所有

这是我的PHP操作页面(目前上传正确的图像,但具有相同的所有标题

<?php
// CONNECT TO DATABASE...
// INCLUDE UPLOAD CLASS LIBRARY
include (dirname(__FILE__).'/lib/class.upload.php');


$files = array();
foreach ($_FILES['fileupload'] as $k => $l)
{
    foreach ($l as $i => $v)
    {
        if (!array_key_exists($i, $files))
        $files[$i] = array();
        $files[$i][$k] = $v;
        $imagename = $_POST['keyword'][$i];
    }
}

// create an array here to hold file names
$uploaded = array();
foreach ($files as $file)
 {
            $generate_name = rand(100,99999); 
            $generate_name_extra = rand(200,9999);
            $filenamex = "COVER_PHOTO_".$generate_name.$generate_name_extra."_".time();
            $filenamex_thumb = $filenamex."_thumb";

            $handle = new upload($file);
            if ($handle->uploaded) {
            $this_upload = array();

            ///// 1 ////////////////////////////////////////////////////////////////////
            $handle->file_new_name_body   = $filenamex_thumb;
            $handle->file_force_extension = true;
            $handle->image_resize         = true;
            $handle->image_x              = '300';
            $handle->image_ratio_y        = true;
            $handle->jpeg_quality = '100';

            // ABSOLUTE PATH BELOW
            $handle->process($absoRoot.'covers/thumbs/');
            ////////////////////////////////////////////////////////////////////////////
            if ($handle->processed) {

      // store the image filename
    $this_upload['image'] = $handle->file_dst_name; // Destination file name
    $this_upload['body'] = $handle->file_dst_name_body; // Destination file name body
    $this_upload['extension'] = $handle->file_dst_name_ext; // Destination file extension

        $category_id = $_POST['cat'];
        $hiddenvalues = explode ("|",$_POST["cat"]);
        $category = $hiddenvalues[0];
        $category_name = $hiddenvalues[1];


                $sql = 'INSERT INTO cover (id, img, keyword, category_name, cat_id) VALUES ("", "'.$this_upload['image'].'", "'.$imagename.'", "'.$category_name.'", "'.$category.'")';
                 mysql_query($sql);
        }

    $handle->clean();
        header("Location: ./upload.php");
                $message = "";
    } else {

         echo '  file not uploaded to the wanted location';
         echo '  Error: ' . $handle->error . '';

      }
} ?>

(我用的是上传类由Colin Verot处理图像上传,和他们的FAQ教程来处理多个图片上传此页,下:如果有多次上传

这将工作完美的,如果我只是在上传图片,但我添加添加每个图像数据到我的数据库的功能。 &这是它得到混乱。

我敢肯定,关键是把SQL查询正确的foreach内,或者使一个又一个,但我已经试过了 - 它只是给了我1的好成绩对于任何一个图片上传或标题,从来没有两个。

我需要将图像的数据(包括图像路径)上传到网站,然后将其存储到我的数据库。

请看看我的代码,并开导我如何解决这个问题呢? 一个片段线索真的,现在的我已经尝试过所有我能想到的后非常困惑是巨大的。 非常感谢!

Answer 1:

当你收集的文件信息你覆盖$imagename在每个循环,因此将被分配到最后一个。 尝试将其连接到$files变量(希望这不会弄乱upload你使用类)。

foreach ($l as $i => $v)
{
    if (!array_key_exists($i, $files))
    $files[$i] = array();
    $files[$i][$k] = $v;
    $files[$i]['imagename'] = $_POST['keyword'][$i];
}

然后更新您的$sql字符串引用

$sql = 'INSERT INTO cover (id, img, keyword, category_name, cat_id) 
     VALUES ("", "'.$this_upload['image'].'", "'.$file['imagename'].'", 
         "'.$category_name.'", "'.$category.'")';


Answer 2:

您还没有保存您的$ imagename变量到$ files数组,你只是在每次重新设定它。

    $files[$i][$k] = $v;
    $imagename = $_POST['keyword'][$i];

应该是这样的:

    $files[$i][$k] = array($v, $_POST['keyword'][$i]);
    ...
    foreach ($files as $data) {
        list($file, $imagename) = $data;
        ...
    }


Answer 3:

我认为你的问题一个是你的foreach:

$files = array();
foreach ($_FILES['fileupload'] as $k => $l)
{
    foreach ($l as $i => $v)
    {
        if (!array_key_exists($i, $files))
        $files[$i] = array();
        $files[$i][$k] = $v;
        $imagename = $_POST['keyword'][$i];
    }
}

所以,你正在经历他们的每一个值到适合这种结构的政策正确的文件分配字段:

_FILES => array(
    'name' => array(0 => 'file.txt'),
    'size' => array(0 => 235)
)

这是multifiles正确的,但那么你做:

$imagename = $_POST['keyword'][$i];

这看起来不正确的。 要覆盖VAR与上次每次看着这意味着你将只得到一个输入vlaue。



文章来源: Arrays from multiple upload form, Upload images then insert to database (PHP, MySQL)