gpt4 book ai didi

php - 来自多个上传表单的数组,上传图像然后插入数据库(PHP,MySQL)

转载 作者:可可西里 更新时间:2023-11-01 06:47:06 25 4
gpt4 key购买 nike

语言:PHP/MySQL

我快疯了,我现在真的要问了...我有一个多文件上传表单:

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

在一些 Javascript 的帮助下,每次对此输入进行更改时,它都会在另一个输入中附加文件名列表 + 格式化字符串(从文件名中获取),因此在更改时我们有一个 布局,如图所示下面(假设我们刚刚添加了一些图片):

Multiple Upload Form几乎类似于: http://jsfiddle.net/pxfunc/WWNnV/4/


//这种布局的 HTML 表示形式是...(假设我们添加了 3 张图片)

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

  • image-name-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 . '';

}
} ?>

(我使用 Upload Class by Colin Verot 处理图片上传,他们的常见问题解答教程在 this page, under: What about multiple uploads? 上处理多张图片上传)

如果我只是上传图像,这会很完美,但是我添加了将每个图像数据添加到我的数据库的功能。 & 这就是令人困惑的地方。

我确定关键是将 SQL 查询放在正确的 foreach 中,或者可能制作另一个查询,但我已经尝试过了,它只给我 1 个图像上传或标题的好结果,从来没有两者。

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

请查看我的代码并赐教如何解决这个问题?一个片段线索现在真的很棒,因为在尝试了所有我能想到的之后我已经非常困惑了。非常感谢!

最佳答案

您并没有将 $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;
...
}

关于php - 来自多个上传表单的数组,上传图像然后插入数据库(PHP,MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11195114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com