Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: проблема с циклом FOR
 
 автор: AN   (01.07.2009 в 13:27)   письмо автору
 
 

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


for($i=0; $i<21; $i++){

$TopicN=($_POST['Topic'][$i]); // заголовок
if(!empty($TopicN)) { $TopicN=("<h2 class=news>".($_POST['Topic'][$i])."</h2>"); } else { $TopicN=(""); }

$TextN=($_POST['Text'][$i]); // текст
if(!empty($TextN)) { $TextN=("<p class=news>".($_POST['Text'][$i])."</p>"); } else { $TextN=(""); }

$ImgCommentN=($_POST['ImgComment'][$i]); подпись к картинке
if(!empty($ImgCommentN)) { $ImgCommentN=("<p class=imgnews>".($_POST['ImgComment'][$i])."</p>"); } else { $ImgCommentN=(""); }

if (is_uploaded_file($_FILES['attach']['tmp_name'][$i])){

image_700($_FILES['attach']['name'][$i],$_FILES['attach']['tmp_name'][$i],$t,$newsid,$save_dir_pub,$i,$autoimg); // функция преобразования и добавления картинки

$ImgLinkN=("<center><img src=\"".LinkImgPub($newsid, "-".$i)."\" alt=\"".$ImgAltN."\"></center>"); // ссылка на картинку

}
$content.= ($TopicN.$TextN.$ImgLinkN.$ImgCommentN); // все это склеиваем и вносим в базу, 
}


так вот, проблема в том, что если передаются 3, 5, 10 картинок, строка
$ImgLinkN=("<center><img src=\"".LinkImgPub($newsid, "-".$i)."\" alt=\"".$ImgAltN."\"></center>"); - выполняется 20 раз
такое впечетление что if (is_uploaded_file($_FILES['attach']['tmp_name'][$i]))
выполняется только для функции imege_700

я могу эту строку $ImgLinkN=("<center><img src=\"".LinkImgPub($newsid, "-".$i)."\" alt=\"".$ImgAltN."\"></center>");
добавить в конец в функцию image_700 , только как мне получить значение $ImgLinkN из функции ???

кто то поможет, а?

  Ответить  
 
 автор: AN   (01.07.2009 в 13:33)   письмо автору
 
   для: AN   (01.07.2009 в 13:27)
 

то есть уточню, вот тут
if (is_uploaded_file($_FILES['attach']['tmp_name'][$i])){

imege_700($_FILES['attach']['name'][$i],$_FILES['attach']['tmp_name'][$i],$t,$newsid,$save_dir_pub,$i,$autoimg);

$ImgLinkN=("<center><img src=\"".LinkImgPub($newsid, "-".$i)."\" alt=\"".$ImgAltN."\"></center>");
}

при передачи скажем 4 картинок, на сервер закидываются только три,
в базу идет запись от $ImgLinkN
<img src="/00000513-0.jpg">
<img src="/00000513-1.jpg">
<img src="/00000513-2.jpg">
<img src="/00000513-3.jpg">

это правильно, но потом зацикливает, и выводит еще 16 записей с последним присвоенным $i, то есть
<img src="/00000513-3.jpg">
<img src="/00000513-3.jpg">
<img src="/00000513-3.jpg">
<img src="/00000513-3.jpg">
<img src="/00000513-3.jpg">

... и т.д.

вот как тут быть?

  Ответить  
 
 автор: sim5   (01.07.2009 в 14:55)   письмо автору
 
   для: AN   (01.07.2009 в 13:33)
 

Вы не по нужной переменной задаете итерации цикла.

  Ответить  
 
 автор: AN   (01.07.2009 в 15:40)   письмо автору
 
   для: sim5   (01.07.2009 в 14:55)
 

в смысле?

  Ответить  
 
 автор: sim5   (01.07.2009 в 15:48)   письмо автору
 
   для: AN   (01.07.2009 в 15:40)
 

В прямом смысле. Если у вас форма, например, содержит 10 элеметов с текстом, и пять с изображениями, то в чего это перебирать эелементы file по числу элементов с текстом?

  Ответить  
 
 автор: AN   (01.07.2009 в 16:25)   письмо автору
 
   для: sim5   (01.07.2009 в 15:48)
 

просто не всегда будут все поля заполнены, могут быть и пропушены, или первые текстовые, а последние только картинки ...
то есть к количеству передаваемых значений форм привязываться нельзя ...
вот их 20
и как бы задача проверять каждое, если есть, склеивать по порядку и вносить запись в базу в одно поле ...

  Ответить  
 
 автор: sim5   (01.07.2009 в 16:42)   письмо автору
 
   для: AN   (01.07.2009 в 16:25)
 

Вы вместо цикла, распечайте на экран полученные массвы POST и FILES, поймете ошибку.

  Ответить  
 
 автор: AN   (01.07.2009 в 17:12)   письмо автору
 
   для: sim5   (01.07.2009 в 16:42)
 

распечатал, посмотрел, вот для пустой формы, где нет картинки, скажем
[name] => Array (
[0] => 1.jpg
[1] => 2.jpg
[2] =>

то есть это условие выполняетя на i=0, i=1, на i=2 не выполняется
if (is_uploaded_file($_FILES['attach']['tmp_name'][$i])){

image_700($_FILES['attach']['name'][$i],$_FILES['attach']['tmp_name'][$i],$t,$newsid,$save_dir_pub,$i,$autoimg); // функция преобразования и добавления картинки

$ImgLinkN=("<center><img src=\"".LinkImgPub($newsid, "-".$i)."\" alt=\"".$ImgAltN."\"></center>"); // ссылка на картинку

}

я так понимаю переменная $ImgLinkN - запоминает последнее значение при i=1
и начинает его повторять, а как это все можно переиграть?

  Ответить  
 
 автор: AN   (01.07.2009 в 17:19)   письмо автору
 
   для: AN   (01.07.2009 в 17:12)
 

о!
кажись работает, я подставил
else
{
$ImgLinkN=("");
}

шас буду тестить ....

но кажись это топорный метод реализации, да?

  Ответить  
 
 автор: sim5   (01.07.2009 в 22:19)   письмо автору
 
   для: AN   (01.07.2009 в 17:19)
 

Если вы в одном цикле проверяете число полученных записей и подчиненым им изображениям, то это еще не значит, что по счетчику этих записей нужно проверять массив FILES. Да собственно и 21 у вас не выдерживает критки, вы же сами говорите, что не обязательно все 20 записей могут быть, если я вас правильно понял.
Вы получаете форму, и следуя вашему повествованию, это N групп элементов с однотипным набором. Но в каждом таком наборе все таки есть главный элемент, которому подчинены остальные элементы в наборе, а значит число этих элементов и должно определять счетчик для цикла. Если имена элементов групп формы представить как многомерный массив, и в общем форма будет выглядеть многомерным массивом, тогда пройдя цикл по числу принятых главных элементов, можно уже проверять что они имеют - изображение, еще чего-то и т.д....

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования