【问题标题】:For loop only inserts one filenameFor 循环只插入一个文件名
【发布时间】:2010-02-02 00:55:38
【问题描述】:
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'");
  } 
}

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

【问题讨论】:

  • 也许你应该检查 $uploadsNeeded 的值
  • 那么 tmp_name 是什么?在其他任何地方都看不到它

标签: php database file insert


【解决方案1】:

上面有 3 个 cmets,包括我的:基本上他们都在说同样的话。您没有为我们提供足够的信息来帮助您诊断问题。所以我建议你迈出调试的第一步:

检查变量的值

您可以使用 print_r 来执行此操作,例如 $_FILES (查看您的服务器正在获取哪些文件的信息)和简单的 echo 语句来检查保存到哪些目录文件。在定义变量后尝试添加echo $uploaddir; 以确保它符合您的预期。

另外,检查 $uploadsNeeded 变量;您没有显示定义它的方式或位置,如果它不是您期望的数字,那可能就是您的问题。

【讨论】:

  • 感谢您的帮助。我完全是在找错树了。
【解决方案2】:

根据您提供给我们的少量信息,我的猜测是您的问题出在以下代码中:

$_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 的攻击!

【讨论】:

    猜你喜欢
    • 2014-07-20
    • 1970-01-01
    • 2013-07-27
    • 2020-01-06
    • 2016-01-09
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    相关资源
    最近更新 更多