работа формы - передача файлов

ivan52

d-i-d grafix
работа формы - передача файлов

есть форма - в ней несколько input'ов
два из которых input type=file - добавление картинки в первую директорию, добавление во вторую директорию

и несколько кнопок сабмитов - добавить картинку №1, картинку №2, записать всю инфу из формы

если добавляю картинку №1 - все ок
но если хочу залить картинку №2 - получается это сделать, если только оба input'a type=fyle заполнены

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

ivan52

d-i-d grafix
вот форма

Originally posted by IntenT
форму покажи
<form type=multipart/data method=post action=1.php>
<input type=file name=img><input type=submit name=img_load>
<input type=file name=bimg><input type=submit name=bimg_load>
</form>

файл 1.php

<?

if (isset ($img_load)) {echo $img;}
if (isset ($bimg_load)) {echo $bimg;}

?>

смысл такой, что если в первый input вставялешь файл - то переменная
$bimg из второго инпута передается нормально

если первый input остается пустым ничего не работает
мне надо чтобы работало!
 

Krisha

pain in the neck
ivan52
Прочтите внимательно вот этот раздел upload и многие вопросы отпадут сами собой. И разберитесь в HTML формами.
 

ivan52

d-i-d grafix
ответы

to TONY2001 - в форум неправильно запостил
<form enctype="multipart/form-data" ... так и есть на самом деле

два инпута - для того чтобы пользователь мог добавить две картинки -одна превью, другая увеличенная версия

соответсвенно - один инпут на маленькую картинку, другой на большую - но работают только вместе

а если человек хочет залить только большую картинку?

-~{}~ 25.03.04 15:19:

to gun2rin
А зачем у тебя два сабмита в одной форме?

---------------
два поста - потому как два действия человек произвести может - добавить маленькую картинку, добавить большую картинку

разбить это на разные формы не желательно, хотелось бы оставить в одной

-~{}~ 25.03.04 15:24:

to Krisha

сам аплоад работает
а с формами вопрос в чем? разбить на три? таблица бьется!
а если все в одной - то ситуация с обязательным заполнением input'a #1

-~{}~ 25.03.04 15:26:

еще подумал а формы поддерживают вложенность?

то есть если будет написано примерно так, мне кажется бред полный получится?

<form>
<input type=text>
<input type=text>
<input type=text>

<form action="file-upload.php" method="post" enctype="multipart/form-data">
Send these files:<br>
<input name="userfile[]" type="file"><br>
<input name="userfile[]" type="file"><br>
<input type="submit" value="Send files">
</form>

<form action="file-upload.php" method="post" enctype="multipart/form-data">
Send these files:<br>
<input name="userfile[]" type="file"><br>
<input name="userfile[]" type="file"><br>
<input type="submit" value="Send files">
</form>

<input type=text>
<input type=text>
<input type=text>

</form>
 

Tn

Guest
Re: ответы

Автор оригинала: ivan52
два инпута - для того чтобы пользователь мог добавить две картинки -одна превью, другая увеличенная версия

соответсвенно - один инпут на маленькую картинку, другой на большую - но работают только вместе

а если человек хочет залить только большую картинку?

два поста - потому как два действия человек произвести может - добавить маленькую картинку, добавить большую картинку

разбить это на разные формы не желательно, хотелось бы оставить в одной
Что мешает сделать 1 сабмит на оба действия, и проверять, какие картинки пришли ?
Почему в другом случае не желательно разбивать на 2 формы ? Какие возникают проблемы с этим решением ?
 

ivan52

d-i-d grafix
ответ еще

один сабмит на оба действия не требуется - именно нужно разделить, чтобы пользователь видел какую картинку он сабмитит

а две разные формы невозможны вот почему
человек добавляет инфу в базу - описание вещи
и при желании еще картинку - в базу заносится только название

соответсвенно форма
<form>
<tr><td colspan=2><input type=text name=id value=$id></td></tr>
<tr><td colspan=2><input type=text name=vesh value=$vesh></td></tr>
<tr><td><select name=image>
<option value=1.gif>
</select></td><td><input type=file name=img><br<input type=submit name=img_load></td></tr>
<tr><td><select name=bimage>
<option value=b1.gif>
</select></td><td><input type=file name=bimg><br<input type=submit name=bimg_load></td></tr>
<tr><td colspan=2><input type=text name=time value=$NOW()></td></tr>
<tr><td colspan=2><input type=text name=price value=$price></td></tr></form>

-~{}~ 25.03.04 15:51:

то есть если человек хочет он добавляет картинку, а потом выбирает ее из списка или выбирает из списка - если уже есть там картинка нужная пользователю

-~{}~ 25.03.04 15:53:

с выбором картинки из списка и добавлением инфы в базу траблов нет

с аплодом первой картинки - тоже, если надо вторую картинку добавить во второй список - возникает вышеописанная проблема

-~{}~ 25.03.04 15:55:

может быть задать значение для первого поста по умолчанию - типа value?

но вроде я по форуму поискал - уже обсуждалось
что такое не возможно
и опять же надо учитывать если человек нажмет случайно сабмит №1 - тогда дополнится не нужная картинка или значение по умолчанию!

-~{}~ 25.03.04 15:59:

надеюсь что понятно описал как выглядит форма - и теперь понятно почему на две не разбить - хочется чтобы добавление картинки в директорию (и в список) было напротив списка! - что логично и более понятно пользователю

но возникает проблема с разбитием на формы - а вложенность формы не поддерживают? или я что-то не правильно кодировал?

можно сделать через всплывающее окно, но не очень удобно, будет грузиться лишнее и потом сложнее будет сделать удаление
 

gun2rin

Новичок
Re: ответ еще

один сабмит на оба действия не требуется - именно нужно разделить, чтобы пользователь видел какую картинку он сабмитит
Какие-то инопланетные вещи ты говоришь. Что? Значит если будет два инпута и один сабмит, пользователь не поймет какую картинку он шлет? Один инпут малая картинка, другой большая. Хочешь грузи одну, хочешь другую, хочешь обе сразу. Что тебе не нравится. Или у тебя пользователи инопланетяне?
 

ivan52

d-i-d grafix
Re: Re: ответ еще

Originally posted by gun2rin
Какие-то инопланетные вещи ты говоришь. Что? Значит если будет два инпута и один сабмит, пользователь не поймет какую картинку он шлет? Один инпут малая картинка, другой большая. Хочешь грузи одну, хочешь другую, хочешь обе сразу. Что тебе не нравится. Или у тебя пользователи инопланетяне?
мне надо сделать так, чтобы пользователь аплодил либо одну картинку, либо другую - две сразу не требуется, пользователь не инопланетянин - но если будет в форме 20 input'ов - и один сабмит - который все будет постить в базу в виде текста - то все понятно, а если мы хотим кроме insert'a в базу заливать еще картинки в директорию, то требуется еще submit'ы (в зависимости от директории и картинки)

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

заливать одновремено и иконку и фулл превью не требуется
надо по очереди, а по очереди не получается

-~{}~ 25.03.04 16:28:

очень длинный пост получается?
можно ли решить проблему?
может я не верно объясняю и путанно?

что именно не понятно в том что я пишу

-~{}~ 25.03.04 16:30:

как можно передать переменную из <input type=file name=file2> если <input type=file name=file1> оставлен пустым?
 

gun2rin

Новичок
Re: Re: Re: ответ еще

а если мы хотим кроме insert'a в базу заливать еще картинки в директорию, то требуется еще submit'ы (в зависимости от директории и картинки)
На самом деле, всеми усилиями пытаюсь понять чего ты хочешь и не понимаю. Ты где нибудь видел приблизительно то, что ты хочешь. Приведи пример.
 

crocodile2u

http://vbolshov.org.ru
Ты пишешь ерунду.

Я для прикола взял твой html-код, (кстати, он у тебя кривой до безобразия). Затем поставил :

<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
print_r($_FILES);
}
?>

Затем выбрал во 2-м инпуте файл и нажал сабмит.
Вот что мне выдал браузер:

Array
(
=> Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)

[bimg] => Array
(
[name] => Communication.jpg
[type] => image/pjpeg
[tmp_name] => C:\WINNT\TEMP\php17E.tmp
[error] => 0
[size] => 170677
)

)

Ищи ошибку, почитай про аплоад.
 

ivan52

d-i-d grafix
Re: Re: Re: Re: ответ еще

Originally posted by gun2rin
На самом деле, всеми усилиями пытаюсь понять чего ты хочешь и не понимаю. Ты где нибудь видел приблизительно то, что ты хочешь. Приведи пример.
нет нигде не видел
но задача понятная - интерфейс для добавления товара в базу
(картинка для товара - превью и большая) храниться не в базе а в определенной директории, в базе только название картинки (в соотв. ячейке)

при добавлении можно выбрать из списка картинку и покажется ее превью (на javascript)

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

если первый инпут пустой, второй не аплодит!
 

gun2rin

Новичок
Это рядовая задача, и ни разу не видел что б в одной форме было два сабмита. Как сказал Tn, что мешает проверять какие картинки пришли? Пришла большая:
файл - в дирректорию, имя в - базу и все остальное. Тоже и с маленькой. Короче опять все заново...
 

ivan52

d-i-d grafix
ответ

да не в сабмитах дело - какая разница, два сабмита или один
ты видел в форме вариант - записать, удалить?
тоже два сабмита с разными action'ами

а здесь два варианта посыла
как раз смысл в том, что хоть один сабмит, хоть два - если первый input пустой, то второй не передается?
почему?!

-~{}~ 25.03.04 17:13:

Originally posted by crocodile2u
Ты пишешь ерунду.

Я для прикола взял твой html-код, (кстати, он у тебя кривой до безобразия). Затем поставил :

код с аплодами взят со страницы
http://detail.phpclub.net/article/upload

то что остальное бред - или кривое, может быть - но работает без отказно и без проблем, но что касается первого input'а

а второй input к сожалению зависит от первого и оторвать его мне не удается! подскажите как - если знаете
 

crocodile2u

http://vbolshov.org.ru
Да сделай ты var_dump для $_FILES после сабмита!

И смотри, что тебе там пришло!
 

ivan52

d-i-d grafix
спасибо

Originally posted by crocodile2u
Да сделай ты var_dump для $_FILES после сабмита!

И смотри, что тебе там пришло!
вот это первый совет - спасибо, попробую - напишу что получается!
 

gun2rin

Новичок
Re: спасибо

Будь по твоему.

Код формы
<form action="1.php" method="post" name="FormName" enctype="multipart/form-data">
<input type="file" name="n1" size="16" border="0">
<input type="submit" name="n1l" border="0">
<input type="file" name="n2" size="16" border="0">
<input type="submit" name="n2l" border="0">
</form>

Код 1.php
PHP:
<?php
echo $_FILES['n1']['tmp_name']."<br/>\n";
echo $_FILES['n2']['tmp_name']."<br/>\n";
?>
И чего у тебя не передается то?
 

crocodile2u

http://vbolshov.org.ru
Re: Re: спасибо

2 gun2rin

И чего у тебя не передается то?
А у него передается... может быть, по наследству... что-то нехорошее...

:) IvanIV - не обижайся, просто почитай про дебаг на факе
 
Сверху