Отменить отправку веб-формы с помощью PHP - PullRequest
1 голос
/ 23 октября 2008

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

Когда кто-то нажимает «добавить изображение», он попадает на страницу с формой на нем. Они могут выбрать файл и нажать кнопку отправки.

Но сейчас я хочу сделать следующее: поместите вторую кнопку отправки с надписью «Отмена» рядом с обычной кнопкой подтверждения. Если кто-то затем решает загрузить, выбирает и нажимает «Отправить», если он нажимает кнопку «Отмена» до полной загрузки файла, PHP должен остановить загрузку файла и удалить его. А потом просто вернитесь к обзору.

Никакой JavaScript не использовался.

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

По сути, сейчас происходит то, что PHP определяет, какая кнопка была отправлена. Если кнопка отправки была отправлена, файл загружен, если кнопка отмены отправлена, он просто возвращается к обзору.

Но PHP выполняет свои задачи один за другим. Поэтому я не думаю, что это сработает. Как мне сказать PHP прекратить делать загрузку?

Ответы [ 4 ]

6 голосов
/ 23 октября 2008

Вы не можете посмотреть на кнопку с php - весь запрос будет отправлен до того, как PHP получит эту информацию.

Что вы можете сделать, это поместить кнопку отмены в другой <form>, например:

<form> <input type="file> <input type="submit" value="upload"> </form>
<form> <input type="submit" value="cancel"> </form>

(Это просто пример, конечно, пропущены биты).

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

1 голос
/ 04 июня 2009

У Грега правильная идея. Вместо того, чтобы следовать большинству или смотреть, как все делается, посмотрите на умные альтернативы, как объяснение Грега выше.

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

используйте iframe и назовите его, например: "myframe". Вы можете легко скрыть это в div. иметь форму с вашими action = "somefile.php" и target = "myframe". добавьте lav Javascript в поле «file» вашей формы: onFocus = "uploadlistener ()". Вы можете назвать эту функцию как угодно, но используйте ее, чтобы проверить, «открыл» ли человек что-либо. браузер автоматически переключит фокусировку, независимо от того, нажал ли пользователь кнопку «Обзор» или если он затем открыл файл. Разница в том, что после того, как файл «выбран», поле ввода снова получает фокус, но помните, что у вас есть прослушиватель события «onFocus ()». Итак: если поле не пустое, вызовите: document.uploadform.submit ()

Используя этот метод, вам даже не нужна кнопка отправки. если вы хотите сделать скин для кнопки «Обзор», просто сделайте ее прозрачной, используя CSS, например: input name = "myfile" type = "file" style = "width: 40px; -moz-opacity: 0; filter: alpha (opacity = 0)" onFocus = "somefunction ()" Чтобы отменить загрузку, просто перенаправьте iframe в другое место, например: input type = "button" value = "cancel" onClick = "document.uploadform.action = 'blank.php'; document.uploadform.submit ()"

Простите, если HTML выше охватывает несколько строк, я публикую здесь впервые.

Чтобы отслеживать прогресс, вам нужно добавить серверный прослушиватель, либо с PHP-5.2, либо некоторый скрипт на Perl, чтобы проверить, сколько байт было загружено до общего размера файла, проверенного до начала загрузки. этот интервал проверки может быть достигнут с помощью некоторого AJAX, или, если вы не знаете термин, посмотрите: HTTP-REQUEST. он запускает код на стороне сервера в фоновом режиме и выводит ответ, который вы видите в браузере, но здесь вы можете записать его в переменную и выполнять свои действия. Я надеюсь, что это было полезно для всех.

0 голосов
/ 30 октября 2008

Если действительно выясняется, что отмена загрузки невозможна, вы можете рассмотреть возможность реализации простой в использовании функции отмены или удаления, чтобы пользователи могли немедленно отменить загрузку изображения (то есть изображение было удалено). Это может быть не полезно в вашем эксперименте, но, возможно, вы можете использовать его в производственном приложении?

0 голосов
/ 24 октября 2008

PHP не может остановить процесс загрузки файла. Ваш PHP-код даже не запускается до тех пор, пока загрузка файла не будет завершена, поэтому к моменту его запуска уже слишком поздно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...