for($i = 0; $i < $uploadsNeeded; $i++){
$file_name = $_FILES['uploadFile'. $i]['name'];
$file_name = stripslashes($file_name);
$file_name = str_replace("'","",$file_name);
$uploaddir = "media/files/".$_FILES['uploadFile'. $i]['name'];
$copy = move_uploaded_file($_FILES['uploadFile'. $i]['tmp_name'], $uploaddir);
if($copy){
$res = db_res("INSERT INTO `atest` SET `filename`='$file_name', `article`='$ArticleUri'");
}
}
出于某种原因,只上传一个所选文件并在数据库中只插入一个文件名。如果有更好的方法通过这个循环来捕获所有这些?
答案 0 :(得分:1)
上面有3条评论,包括我的:基本上他们都说同样的话。您没有提供足够的信息来帮助您诊断问题。所以我建议第一步调试:
您可以使用print_r执行此操作,例如$ _FILES(查看服务器获取信息的文件)和简单的echo语句,以检查要保存的目录文件。在定义变量后尝试添加echo $uploaddir;
以确保其符合预期。
另外,检查$ uploadsNeeded变量;如果不是你期望的数字,你就不会显示你在哪里或哪里定义它,那可能就是你的问题。
答案 1 :(得分:0)
根据您提供给我们的小信息, guess 是您的问题在于以下代码:
$_FILES['uploadFile' . $i]
尝试使用此功能,看看它是否有效:
$filesUploaded = Upload('uploadFile', './media/files/');
foreach ($filesUploaded as $fileUploaded)
{
$res = db_res("INSERT INTO `atest` SET `filename` = '" . $fileUploaded . "', `article` = '$ArticleUri';");
}
以下是您需要的Upload()
功能:
function Upload($source, $destination)
{
$result = array();
if (array_key_exists($source, $_FILES) === true)
{
if (is_array($_FILES[$source]['error']) === true)
{
foreach ($_FILES[$source]['error'] as $key => $value)
{
if ($value == UPLOAD_ERR_OK)
{
$filename = str_replace("'", '', stripslashes(basename($_FILES[$source]['name'][$key])));
if (move_uploaded_file($_FILES[$source]['tmp_name'][$key], $destination . $filename) === true)
{
$result[] = $destination . $filename;
}
}
}
}
else
{
$filename = str_replace("'", '', stripslashes(basename($_FILES[$source]['name'])));
if (move_uploaded_file($_FILES[$source]['tmp_name'], $destination . $filename) === true)
{
$result[] = $destination . $filename;
}
}
}
return $result;
}
打印$_FILES
数组对于我们找到代码中可能存在的错误非常有用:
echo '<pre>';
print_r($_FILES);
echo '</pre>';
PS:不要忘记您的SQL查询容易受到SQL Injections的攻击!