Для цикла вставляется только одно имя файла - PullRequest
0 голосов
/ 02 февраля 2010
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 ]

1 голос
/ 02 февраля 2010

3 комментария выше, включая мой: в основном все они говорят одно и то же. Вы не предоставили нам достаточно информации, чтобы помочь вам диагностировать проблему. Поэтому я бы рекомендовал сделать первый шаг к отладке:

Проверьте значения ваших переменных

Вы можете сделать это либо с помощью print_r для таких переменных, как $ _FILES (чтобы увидеть, какие файлы получает ваш сервер), либо с помощью простых операторов echo, чтобы проверить, в какие файлы каталога сохраняются. Попробуйте добавить echo $uploaddir; после определения переменной, чтобы убедиться, что она соответствует вашим ожиданиям.

Также проверьте переменную $ uploadsNeeded; Вы не показываете, как или где вы определяете это, если это не то число, которое вы ожидаете, это может быть вашей проблемой прямо сейчас.

0 голосов
/ 02 февраля 2010

Исходя из небольшой информации, которую вы нам дали, мое предположение заключается в том, что ваша проблема заключается в следующем коде:

$_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 была бы очень полезна для нас, чтобы найти возможные ошибкив вашем коде:

<code>echo '<pre>';
print_r($_FILES);
echo '
';

PS: не забывайте, что ваш SQL-запрос уязвим для SQL-инъекций !

...