Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Вставка нескольких изображений и возврат назад по кнопке браузера (https://javascript.ru/forum/dom-window/62700-vstavka-neskolkikh-izobrazhenijj-i-vozvrat-nazad-po-knopke-brauzera.html)

St. 24.04.2016 17:13

Вставка нескольких изображений и возврат назад по кнопке браузера
 
Нажимаю "Добавить еще изображение", выбираю файл - и так три раза подряд. Потом нажимаю кнопку "Загрузить". Все нармально.
Теперь пытаюсь вернуться назад, нажимаю кнопку браузера назад. И вот проблема, надо повторно опять добавлять изображения. Т.е. вернуться назад по кнопе браузера не получается. :cray:
Как решить это? Подскажите пожалуйста (код ниже).
Это глюк браузера (opera) или не совсем правильный код?

<?php
//
// JavaScript.
//
echo '<script>
function insert()
{
var newspan = document.createElement("span");
str  = \'<table width="100%" style="margin-top: 2px; margin-bottom: 2px;" align="left" cellspacing="0" cellpadding="0" border="0">\';
str += \'<tr>\';
str += \'<td>\';
str += \'<input type="file" size="70" name="download_image[]">\';
str += \'</td>\';
str += \'</tr>\';
str += \'</table>\';
newspan.innerHTML = str;
list.appendChild(newspan);
}
</script>';

// Форма.
echo '<form method="post" enctype="multipart/form-data" name="file_edit_form" action="http://127.0.0.1/index.php?action=qwerty">';
echo '<div id="list">';
// Вставить сюда.
echo '</div>';

echo '<a onclick="insert();">';
echo 'Добавить еще изображение';
echo '</a>';

echo '<br>';

echo '<input type="submit" value="Загрузить" name="submit_form" />';
echo '</form>';
?>

laimas 25.04.2016 06:10

Цитата:

Сообщение от St.
И вот проблема, надо повторно опять добавлять изображения.

Это не беда, а правильное поведение браузера.

St. 25.04.2016 11:48

Вложений: 1
Цитата:

Сообщение от laimas (Сообщение 414900)
Это не беда, а правильное поведение браузера.

Как не беда?
Когда вставляешь 10-ть изображений 640x480, а одно изображение не 640х480 - а больше. Выводится сообщение о ошибке и кнопка вернуться назад:

echo '<a href="javascript:history.back()">Назад</a>';

Возврат назад происходит, но изображения приходиться вставлять заново. Для пользователя это не очень удобно.

Эти кусочки кода из моего пректа.
Посоветуйте, как, что (хочу, чтобы пользователю было удобно)...

Если кому интересно.
Код с ограничением по количеству вставляемых изображений, здесь (как делал я): http://forum.php.su/topic.php?forum=60&topic=6879

laimas 25.04.2016 12:55

А вот так. Поле file поле особое, это в textarea браузер может подставить ранее введенный текст, а в поле file нет, у него свойство value между прочим и то только для чтения.

Сбрасывайте то поле (если их несколько), в которое выбрано не удовлетворяющее условию, или отправляйте Ajax только те, что отвечают условию, если поле multiple, или распределяйте обязанности между клиентом и сервером, серверу ведь все равно проверять это вновь, если ошибки, то те, что ОК запомнить временно, вернуть ошибку, как все ОК, в каталог.

Заставить браузер поступать так как вы хотите - забудьте.

St. 25.04.2016 15:05

У меня форма, а там есть кнопка отправить, после нажатия на кнопку выполняется другой файл php (action). А получится сделать так! Нажимаем на кнопку отправить, вызывается js и проверяет $_FILES, если ок, выполняется другой файл php. Иначе показать окно alert.

П.С.
Блин, не складываютcя другие моменты - не подходит такой вариант.
Просто, для интереса, с кнопкой отправить, можно сделать изврат?

laimas 25.04.2016 16:50

Цитата:

Сообщение от St.
А получится сделать так! Нажимаем на кнопку отправить, вызывается js и проверяет $_FILES, если ок, выполняется другой файл php. Иначе показать окно alert.

Цитата:

Сообщение от St.
не подходит такой вариант.

Не какой-то там, а $_FILES, и говорите не подходит? А если я отправляю вам кучу вообще хлама, даже не изображения, а всякую хрень якобы картинки? И учтите, что будет подделан и реферер, и куки будут, не будет только одного - вашего JS с проверкой. Что тогда, примете на веру, что ваш JS проверил? Да за ради бога, нужен хлам, собирайте.

Кроме варианта сервер->клиент (а сервер просто обязан проверять, пофигу что там было на клиенте), я еще говорил о двух чисто клиентских решениях, в зависимости от того, что за поле/поля у формы.

Цитата:

Сообщение от St.
Просто, для интереса, с кнопкой отправить, можно сделать изврат?

Какой "изврат"?

St. 26.04.2016 11:09

Блин. :stop: Сдаюсь.
Я не знаю возможностей JS, поэтому возникают куча проблем, как можно, а как нельзя. Я наверное откажусь от js, а вставку изображений напишу полностью на PHP, плюс там нет этой проблемы с возвратом назад. Хотел как лучше, а получилось как всегда. :thanks:

Сделаю так (вставить изображений можно 7, и пепец...):

for ($x=0; $x<7; $x++)
    {
    echo '<input type="file" size="75" name="download[]" title="' . $txt['text_files_info'] . '">';
    }

Если есть другие варианты - напишите их здесь.
Наверное, тема закрывается...

laimas 26.04.2016 15:41

Цитата:

Сообщение от St.
Я наверное откажусь от js, а вставку изображений напишу полностью на PHP, плюс там нет этой проблемы с возвратом назад.

Что в вашем понимании "вставка изображений"? Если речь идет о загрузке пользователями изображений на сервер, то каким же образом без клиента (Я наверное откажусь от js - с js, без него, это уже второй вопрос, он тут может выступать как помощник, а можно и без) это можно сделать?

St. 26.04.2016 16:35

Цитата:

Если речь идет о загрузке пользователями изображений на сервер
Именно так.

Все ожидал, но это
Цитата:

Это не беда, а правильное поведение браузера
:) Блин, блин, блин.

П.С.
Попробывал JS+PHP - не получилось (проблема с возвратом назад), вернулся полностью на PHP (не совсем удобно)...
Если есть возможность, предложите свой вариант js+php для загрузки изображений (файлов) на сервер (клиентская часть). Пример бы на js+php...

laimas 26.04.2016 17:19

Если Пример бы на js+php, то Ajax, я говорил об этом.

St. 26.04.2016 18:18

Цитата:

Сообщение от laimas (Сообщение 415064)
Если Пример бы на js+php, то Ajax, я говорил об этом.

Ajax - это еще одна сложность для меня. Как им пользоваться на *nix компах? У меня сервер на FreeBSD (апач, mysql, php).
Вот нашел (Ajax для новичков): https://habrahabr.ru/post/14246/ :blink:
Жаль, жаль, за чтобы зацепиться (примеры бы JS+PHP).

laimas 26.04.2016 18:56

Цитата:

Сообщение от St.
Как им пользоваться на *nix компах?

Ajax, это всего лишь технология взаимодействия клиент->сервер, и какой у вас сервер не имеет значения.

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

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

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

Сервер с успехом может хранить документы временно в сессии, плюс в этом в том, что в случаях когда пользователь покинул страницу, не закончив все операции, весь мусор удалит сборщик мусора, при этом при Ajax продлевать время жизни сессии не составит труда, а значит и не пропадет уже загруженное.

То есть этот сценарий в любом случае должен присутствовать вне зависимости от того проверяет ли клиент условия загрузки.

На клиенте же можно также проверять условия, например, в случае если выбранное изображение не соответствует условию, то можно этому полю ввода (индексу в коллекции, если поле с мульти выбром) присвоить метку. А оправляя форму на сервер помещать в FormData() только те изображения, которые не имеют меток "плохой".

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

St. 27.04.2016 18:34

Смотрел еще SMF (Simple Machines Forum: www.simplemachines.org), организацию загрузки пользователем файлов на сервер. Ну что сказать... Добавить еще файл, добавить еще файл - JavaScript. При добавление скажем 10-ти файлов, если один не отвечает условиям - предется заново добавлять все 10-ть файлов.

Тему можно закрыть, а правильно - тему в сторону. Ajax - тоже пока в сторону.

laimas!
Если можно, емаил ваш мне в личку и ваше имя (потом разберемся).
Спасибо.

Спасибо также пиплам с www.simplemachines.ru (GeorgG, digger, огненная ALINA и др.)

laimas 27.04.2016 19:19

Цитата:

Сообщение от St.
При добавление скажем 10-ти файлов, если один не отвечает условиям - предется заново добавлять все 10-ть файлов.

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

Цитата:

Сообщение от St.
Если можно, емаил ваш мне в личку и ваше имя (потом разберемся).

Я не даю своих контактов на право и налево, у меня просто не хватает времени на разговоры. :)

St. 28.04.2016 13:12

Всего доброго. :)


Часовой пояс GMT +3, время: 02:01.