For循环只插入一个文件名

时间:2010-02-02 00:55:38

标签: php database file insert

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'");
  } 
}

出于某种原因,只上传一个所选文件并在数据库中只插入一个文件名。如果有更好的方法通过这个循环来捕获所有这些?

2 个答案:

答案 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的攻击!