我还有另外一个问题要跟进:Putting PHP array into MySQL with additional columns
我正在尝试根据扩展名将文件放入单独的文件夹中。但是,无论数组打印出来时,文件都以相同的文件名存放在同一文件夹中。
这是我目前拥有的数组:
$files[$key] = array
(
$file_name = basename($guid." - ".$_FILES['file']['name'][$key]),
$file_type = $_FILES['file']['type'][$key],
$file_size = $_FILES['file']['size'][$key],
$file_tmp = $_FILES['file']['tmp_name'][$key],
$extension = strtolower(substr($file_name, strlen($file_name)-4, strlen($file_name))),
$tgt = $_FILES['file']['name'][$key]
);
这是我目前的数组输出:
Array
(
[0] => Array
(
[0] => 966c5853-63b4-4570-a3ee-bd5629688038 - cycles.pdf
[1] => application/pdf
[2] => 331881
[3] => C:\xampp\tmp\php9738.tmp
[4] => .pdf
[5] => cycles.pdf
)
[1] => Array
(
[0] => 966c5853-63b4-4570-a3ee-bd5629688038 - landofstoopid.bmp
[1] => image/bmp
[2] => 310342
[3] => C:\xampp\tmp\php9758.tmp
[4] => .bmp
[5] => landofstoopid.bmp
)
)
这是我生成的SQL查询:
$new = array();
foreach($files as $key => $value)
{
$new[] = "'".implode("','", $value)."', '$guid', '$getthedate', '$gettime', '$mailid', '$target'";
}
$query = "(".implode("), (",$new).")";
这是SQL查询的输出
INSERT INTO files (filename, filetype, filesize, filetempname, guid, dateadded, timeadded, mailid, target)
VALUES ('966c5853-63b4-4570-a3ee-bd5629688038 - cycles.pdf','application/pdf','331881','C:\xampp\tmp\php9738.tmp','.pdf','cycles.pdf', '966c5853-63b4-4570-a3ee-bd5629688038', '13 Jun 2013', '10:25:07', '77', 'files/pics/landofstoopid.bmp'),
('966c5853-63b4-4570-a3ee-bd5629688038 - landofstoopid.bmp','image/bmp','310342','C:\xampp\tmp\php9758.tmp','.bmp','landofstoopid.bmp', '966c5853-63b4-4570-a3ee-bd5629688038', '13 Jun 2013', '10:25:07', '77', 'files/pics/landofstoopid.bmp')
这是我必须确定文件的放置位置
$pics = array(".bmp", ".gif", ".jpg", "jpeg", ".png"); //5
$docs = array(".doc", "docx", ".odt", ".pdf", ".ppt", "pptx", ".rtf", ".txt", ".xls", "xlsx"); //10
$misc = array(".csv", ".htm", "html", ".php", ".pkt", ".rar", ".sql", ".xpi", ".zip"); //9
if (in_array($extension,$pics))
{
$target = "".FILES."/".FUP_PICS."/";
}
else if (in_array($extension,$docs))
{
$target = "".FILES."/".FUP_DOCS."/";
}
else if (in_array($extension,$misc))
{
$target = "".FILES."/".FUP_MISC."/";
}
$target = $target.$tgt;
我在foreach循环中尝试了这个,以获取多个文件的值以及它之外的文件,结果也是一样。
文件的目标始终根据最后的文件名和扩展名确定。如上所述,我有.pdf和.bmp,pdf应该放在docs文件夹中,bmp应该放在pics文件夹中。但是,这两个文件都被发送到pics文件夹,名称已更改为数组中的最后一个文件。
只是想知道我是否可以得到一些关于我哪里出错的指示,或者这是否可能。
我将补充一点,当文件作为单个文件上传时,不会发生此问题,文件将转到正确的文件夹。
提前致谢
答案 0 :(得分:1)
您的代码选择放置文件的文件夹,但您可能应该对无法识别的扩展名执行默认操作。
由于这里的一切似乎都井井有条,因此很可能问题出在其他地方。
你的sql结构让我怀疑你没有在sql代代码迭代之间改变目标。你确定你拼写了正确的变量名吗?是否始终是最后一个文件的扩展名和名称?这看起来像是一个保留变量的问题。
考虑删除代码以确定放置文件的位置并将其替换为函数vis:
function set_target($extension)
{
$target="";
$pics = array(".bmp", ".gif", ".jpg", "jpeg", ".png"); //5
$docs = array(".doc", "docx", ".odt", ".pdf", ".ppt", "pptx", ".rtf", ".txt", ".xls", "xlsx"); //10
$misc = array(".csv", ".htm", "html", ".php", ".pkt", ".rar", ".sql", ".xpi", ".zip"); //9
if (in_array($extension,$pics))
{
$target = "".FILES."/".FUP_PICS."/";
}
else if (in_array($extension,$docs))
{
$target = "".FILES."/".FUP_DOCS."/";
}
else if (in_array($extension,$misc))
{
$target = "".FILES."/".FUP_MISC."/";
}
$target = $target.$tgt;
echo $target."<BR>"; //this line for debugging - should see as many lines as you have files. If not, the problem is in your iteration loop.
return($target);
}
而不是内联代码。这可能有助于揭示目标未正确分配的位置,无论如何都是良好的做法。
或者,不要尝试创建单个SQL查询,只为每个文件生成一个新的SQL。
如果您提供其余代码,您可能会得到更完整的答案,但我的猜测是,这将解决它。生成你的sql的位会很有用。