Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Циклическое занесение в массив

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Goodizer

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем!
Помогите разобраться.
Есть страница с формой
index.html

Код:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
function val()
{
   (function()
   {
   $('form').append('<input type="button" name="add_folder" value="+" onClick="text()" /><input type="file" name="file[]" /><br />');
   }());
}
function text()
{
   (function()
   {
   $('form').append('<input type="text" name="folder[]" /><br />');
   }());
}
</script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>
<body>
<form action="handler.php" method="post" enctype="multipart/form-data">
<input type="submit" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="button" name="clone" value="Еще 1 файл" onClick="val()" /><br /><br />
<input type="button" name="add_folder" value="+" onClick="text()" /><input id="file" type="file" name="file[]" /><br />
</form>
</body>
</html>

Обьясняю
Например есть папка, неважно как называется, с содержимым:
styles/style.css
images/img1.png
images/img2.png
index.php
Мне надо все как есть переместить в инную неважно какую папку.
Формы нужно добавлять по порядку,  тоесть:
(+ - добавления поля для именования создаваемой папки)
там где есть папка нужно нажимать + и вводить имя создаваемой папки
сначала нужно загружать файлы которые находятся в папках, а потом файлы вне папок(в нашем примере index.php последний)
Пример, как должно выглядеть на странице:
[input type=file] style.css
[input type=text] styles
 
<input type=file name=file[]> img.png
<input type=text name=folder[]> images
 
<input type=file name=file[]> img2.png
<input type=text name=folder[]> images
 
<input type=file name=file[]> index.php
 
Файл обработки
handler.php

Код:
<?php
if (!empty($_FILES['file']['name']) && empty($_POST['folder']))
{
   foreach($_FILES['file']['name'] as $k => $v)
   {
   $arr = $_FILES['file']['name'][$k];
   echo '<pre>';
   print_r($arr);
   echo '</pre>';
   }
 
}
if (!empty($_FILES['file']['name']) && !empty($_POST['folder']))
{
$count = count($_POST['folder']) + count($_FILES['file']['name']);
 
$i = 0;
   foreach($_POST['folder'] as $k => $v)
   {
   $i++;
   $dir = $_POST['folder'][$k];
   $filename = $_FILES['file']['name'][$k];
   echo '<pre>';
   print_r($dir.'/'.$filename);
   echo '</pre>';
   }
   foreach($_FILES['file']['name'] as $f => $n)
   {
   $filename = $_FILES['file']['name'][$i];
   echo '<pre>';
   print_r($filename);
   echo '</pre>';
   $i++;
   }
}
?>

 
не могу понять почему он выдает нотайсы:
 
 
styles/style.css      -    2 масива $dir'./.'$filename[$i]
images/img.png      -    2 масива $dir'./.'$filename[$i]
images/img2.txt      -    2 масива $dir'./.'$filename[$i]
index.php            - массив $filname[$i]  - это уже четвертое значение, тоесть [3]
 
 
Notice: Undefined offset: 4 in C:\xampp\htdocs\php-busters.com\rand_lessons.php on line 29
 
Notice: Undefined offset: 5 in C:\xampp\htdocs\php-busters.com\rand_lessons.php on line 29
 
Notice: Undefined offset: 6 in C:\xampp\htdocs\php-busters.com\rand_lessons.php on line 29
 
Может есть иное решение
Помогите плз хто знает!
Заранее благодарю!

Всего записей: 12 | Зарегистр. 06-07-2013 | Отправлено: 17:53 06-07-2013 | Исправлено: Cheery, 00:39 07-07-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Goodizer

Цитата:
$i = 0;  
   foreach($_POST['folder'] as $k => $v)  
   {  
   $i++;  
   $dir = $_POST['folder'][$k];  
   $filename = $_FILES['file']['name'][$k];  
   echo '<pre>';  
   print_r($dir.'/'.$filename);  
   echo '</pre>';  
   }  
   foreach($_FILES['file']['name'] as $f => $n)  
   {  
   $filename = $_FILES['file']['name'][$i];  
   echo '<pre>';  
   print_r($filename);  
   echo '</pre>';  
   $i++;  
   }  

После выхода из первого цикла ваш $i = 2
в следующем вы обращаетесь к $i = 2 (есть), $i = 3 (тоже есть), $i = 4 (нет) и так далее.

Цитата:
$filename = $_FILES['file']['name'][$i];  

может тут $f вместо $i?


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:48 07-07-2013
Goodizer

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
$filename = $_FILES['file']['name'][$i];
 
может тут $f вместо $i?  

 
Если поставить $f то цикл выдаст:
styles/style.css
images/img.png  - 1ый цикл
images/img2.txt
 
style.css
img.png    -2ой цикл(тоесть он заново проходится)
img2.txt
index.php
 
 
Я понимаю именно почему он выдает нотайсы,
Я не понимаю зачем он идет аж до 6-го значения, если index.php третье(последнее),
может while-ом пройтись?

Всего записей: 12 | Зарегистр. 06-07-2013 | Отправлено: 14:27 07-07-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Goodizer

Цитата:
Я не понимаю зачем он идет аж до 6-го значения,

потому что вы увеличивали $i в первом цикле и продолжаете его увеличивать во втором.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:58 07-07-2013
Goodizer

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Тогда как мне сделать так чтобы цикл не выдавал лишние значения, в то время когда он возвращает повторные:
 
styles/style.css
images/img.png
images/img2.txt
style.css
img.png
img2.txt
index.php
 
а надо чтобы возвращал:
 
styles/style.css
images/img.png
images/img2.txt
index.php

Всего записей: 12 | Зарегистр. 06-07-2013 | Отправлено: 00:52 08-07-2013 | Исправлено: Cheery, 01:13 08-07-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Goodizer
ну назовите массив для тех файлов, что не в определенной папке, иначе, и не парьтесь.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:18 08-07-2013 | Исправлено: Cheery, 01:18 08-07-2013
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Циклическое занесение в массив


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru