语言:PHP / MySQL
我快疯了,我现在真的要问了……我有一个多文件上传表单:
<input type="file" name="fileupload[]" multiple>
在一些 Javascript 的帮助下,在对该输入进行的每次更改时,它都会在另一个输入中附加一个文件名列表和一个格式化字符串(从文件名中获取),所以 onchange 我们有一个如下所示的布局(假设我们只是添加了一些图片):
几乎类似于: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的Upload Class来处理图片上传,以及他们的 FAQ 教程来处理此页面上的 MULTIPLE 图片上传,在:多上传怎么办?)
如果我只是上传图像,这将非常完美,但是我添加了将每个图像数据添加到我的数据库的功能。& 这就是令人困惑的地方。
我确定关键是将 SQL 查询放在正确的 foreach 中,或者可能再制作一个,但我已经尝试过了,它只为图像上传或标题提供了 1 个良好的结果,而对两者都没有。
我需要将图像上传到站点,然后将其数据(包括图像路径)存储到我的数据库中。
请查看我的代码并启发我如何解决这个问题?一个片段线索现在真的很棒,因为在尝试了所有我能想到的之后我已经很困惑了。非常感谢!