функция Foreach(). ПОМОГИТЕ!

  • Автор темы Alexygen
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

Alexygen

Гость
#1
Пытаюсь загрузить файл на сервер таким образом:
foreach ($HTTP_POST_VARS as $key => $value) {
move_uploaded_file($_FILES['filename']['tmp_name'],"../modules/catalog/things_images/$new_name");
}

при этом надо в переменной $_FILES['filename']['tmp_name'] указать filename, а этот параметр у меня хранится в переменной $key полученным foreach. Подскажите, пожалуйста, как мне указать правильные параметры move_uploaded_file, чтобы он заработал.

Зарание огромное спасибо!
 
M

MajestiC

Гость
#2
Первое. Избавься от синтаксиса PHP 3. Уже лет 5 используют $_POST вместо $HTTP_POST_VARS.

Второе. filename - это название input в форме, зачем пробегать по всему посту? <input type="file" name="filename">

Третье. А где проверка на is_uploaded_file?

Четвертое. Давай посмотрим на логику твоего вопроса. "а этот параметр у меня хранится в переменной $key полученным foreach". Так кто тебе мешает вместо $_FILES['filename']['tmp_name'] писать $_FILES[$key]['tmp_name']? (Хоть я очень сильно сомневаюсь что этот код рабочий)
 
A

Alexygen

Гость
#3
foreach ($_POST as $key => $value) {
move_uploaded_file($_FILES[$key]['tmp_name'],"../modules/catalog/things_images/$new_name");
}
не работает! а forech я использую потому что имя инпута постоянно разное, т.е. меняется ...
 
O

Oflashp

Гость
#4
Мб поможет, просто вытащил из своих работ недавних:
Код:
<?
$num_of_upforms = 10;
$game_id = $_REQUEST[game_id];
?>
<br>
<form enctype="multipart/form-data" action='index.php' method='post' name='game_upload_image'>
<input name="do" type="hidden" value='game_upload_image'>
<input name="game_id" type="hidden" value='<? echo $game_id;?>'>
<table width="85%" border="0" cellspacing="1" cellpadding="5" class='block'>
<tr>
<th colspan="2" align="left" scope="col" class='block_inside_center_top'><b>Загрузка изображений</b></th>
</tr>
<?
for($i=0;$i <= $num_of_upforms; $i++)
{
?>
<tr>
<th align="left" valign="middle" scope="col" class='block_inside_left'>Изображение <? $num = $i + 1;echo $num;?>:</th>
<input type="hidden" name="MAX_FILE_SIZE" value="30000000" />
<th align="left" valign="middle" scope="col" class='block_inside_right'><input name="image[<? echo $i;?>]" type="file"></th>
</tr>
<?
}
?>
<tr align="center">
<th colspan="2" valign="middle" scope="col"><input type="submit" name="Submit" value="Добавить"></th>
</tr>
</table>
</form>
<br>
А вот обработчик:
Код:
if($do == 'game_upload_image')
{
$width_resized = '155';
$game_id = $_REQUEST['game_id'];
$image = $_FILES['image'];
$num_images = 10;
$time = $glob_time;
//echo $game_id;
if($game_id != '')
{
//echo 1;
$mysql_query_game = mysql_query("SELECT ID FROM game_db WHERE ID = '$game_id' LIMIT 1");
if(mysql_num_rows($mysql_query_game) == 1)
{
//echo 2;
//echo $image['tmp_name']."=>".$valw."<br>";
for($i=0;$i<=$num_images;$i++)
{
if($image['tmp_name'][$i] != '' && $image['type'][$i] == 'image/jpeg' && $image['size'][$i] != '2097152')
{
//echo 4;
$dir = '../games/gallery/';
$new_dir = $dir.$game_id."/";
$new_dir_w = $dir.$game_id."";
if(!is_dir($new_dir))
{
mkdir($new_dir);
}
$mysql_img_insert = mysql_query("INSERT INTO game_gallery(img_id, game_id, img_file, img_folder, date, visible) VALUES ('', '$game_id', '', '$new_dir_w', '$time', '0')");
$id = mysql_insert_id();
$uploadfile = substr(md5(basename($image['name'][$i]).$id),0, 10) . ".jpg";
$em_upload_file = substr(md5(basename($image['name'][$i])),0, 10);
$save_url = $client_dir.$id."/".$uploadfile;
if(move_uploaded_file($image['tmp_name'][$i], $new_dir . $uploadfile))
{
$result .= "Файл - изображение '".$new_dir . $uploadfile."' загружен.<br>";
$num_images = $num_images+1;
$mysql_img_insert = mysql_query("UPDATE game_gallery SET img_file = '$uploadfile', visible = '1' WHERE img_id = '$id'");
}
else
{
$mysql_img_insert = mysql_query("DELETE FROM game_gallery WHERE img_id = '$id'");
$result .= "<br>Ошибка при загрузке файла '".$new_dir . $uploadfile."'";
}
$d = "?d=game_view&id=".$game_id;
}
}

}
}
write_result($result, $d, '', $type);
}
}
 
M

MajestiC

Гость
#5
Для: Oflashp
Ну что это за код? (конструктивная критика)
$game_id = $_REQUEST[game_id]; - у тебя тут должен быть notice (почему в кавычки не взял game_id?)
Почему в html иногда аттрибуты в двойных кавычках, иногда в одинарных?
Сколько можно использовать register_globals? Ну уже сколько можно писать по стандартам PHP 3 (которому уже больше 7 лет), слава богу в php 6 он будет вызывать e_core_error.

&& $image['type'][$i] == 'image/jpeg'
Это ты просто проверяешь разрешение файла, а не его тип. Я тебе отошлю имя файла asdasf.jpg и оно будет иметь type = 'image/jpeg', так как type это mime от разрешения файла. Копай в сторону getimagesize.

$mysql_query_game = mysql_query("SELECT ID FROM game_db WHERE ID = '$game_id' LIMIT 1");
Всё еще надеемся на magic_quotes_gpc? (Это относится ко всем запросам). Не хорошо. Учить mysql_escape_string/mysql_real_escape_string (не смотреть на addslashes) и отказаться от magic_quotes_gpc (настройка php)

Где проверка на is_uploaded_file?

В конце концов лучше использовать шаблонизатор, код-лапша не хорошо выглядит.

не работает! а forech я использую потому что имя инпута постоянно разное, т.е. меняется ...
Не правильная формулировка вопроса. Опиши всю задачу в целом.
 
Статус
Закрыто для дальнейших ответов.