2010-11-16 6 views
0

Я следил за этим сообщением http://www.the-art-of-web.com/php/dataexport/ и успешно создавал экспорт в файл csv из базы данных, основываясь на текущем поиске пользователя. Но для предотвращения попадания в db в то время как экспорт происходит, поэтому я отключу экспорт, если в представлении или запросе пользователя нет изменений. Проблема, с которой я сталкиваюсь, - это когда пользователь нажимает на экспорт файла, сохраняя его, когда открывается диалоговое окно подтверждения, и если пользователь передумал нажать на отмену. Кнопка экспорта остается отключенной. Единственный способ вернуть пользователя - это изменить запрос и вернуться обратно.Как сохранить файл сохранить как отменить ответ

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

Благодаря

код очень похож на http://www.the-art-of-web.com/php/dataexport/ Где, как вид будет сетка с кучей информации о клиенте из заданного диапазона дат. Если пользователю нравится вид, который они выбирают. Они нажмут кнопку экспорта.

образец кода export.php

function exportCSV(){ 
    document.getElementById("exportCSV").src = "test1.php"; 
    document.getElementById("exportBtn").disabled = true; 
} 

function performSearch(){ 
    //perform search get result and display 
    //if resultset length > 0 
    document.getElementById("exportBtn").disabled = false; 
} 

Сетка дисплей здесь < кнопка ID = "поиск" OnClick = "performSearch()"> Поиск
< кнопка ID = "exportBtn" OnClick =» не exportCSV() "> Экспорт
< IFrame ID =" «стиль = "exportCSV дисплей: нет"/>

test1.php

$ данных = массив (
массива ("Имя" => "Мэри", "фамилия" => "Джонсон", "возраст" => 25),
массива ("Firstname" => "Аманда" , «lastname» => «Miller», «age» => 18),
массив («firstname» => «James», «lastname» => «Brown», «age» => 31),
массив («firstname» => «Patricia», «lastname» => «Williams», «age» => 7),
массив («firstname» => «Michael», «lastname» => «Davis», "age" => 43),
массив ("firstname" => "Sarah", "lastname" => "Miller", "age" => 24),
массив ("firstname" => "Patrick" , "lastname" => "Miller", "a ge "=> 27)
);

# имя файла для скачивания $ filename = "website_data.xls";

header ("Content-Disposition: application/octet-stream; filename = \" $ filename \ "");
header («Content-Type: application/vnd.ms-excel»);

$ flag = false;
Еогеасп ($ данные в виде $ строки) {
если (! $ Флаг) {
# поле отображения/имена столбцов в первой строке
эхо взрывать ("\ т", array_keys ($ строка)). "\ П";
$ flag = true;
}
array_walk ($ row, 'cleanData');
echo implode ("\ t", array_values ​​($ row))."\ П";
}
выход;

function cleanData(&$str) 
{ 
    $str = preg_replace("/\t/", "\\t", $str); 
    $str = preg_replace("/\r?\n/", "\\n", $str); 
    if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"'; 
}  
+0

, пожалуйста, отправьте код, также вам не нужно иметь несколько восклицательных знаков в заголовке – Woot4Moo

+0

показать нам javascript – Galen

+0

Код очень похож на http://www.the-art-of-web.com/ php/dataexport/Где в качестве представления будет сетка с информацией о клиенте с заданным диапазоном дат. Если пользователю нравится вид, который они выбирают. Они нажмут кнопку экспорта. – user332951

ответ

0

Там нет никакого способа, чтобы захватить событие браузера для отмены сохранения файла. Использование подтвердить, если заявление (или нечто подобное), вероятно, лучший УБ для этой ситуации:

if(confirm('are you sure you want to export?')) 
{ 
//export code 
} 
else 
{ 
//cancel code 
} 

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

+0

Я не знаю, понравится ли нашему персоналу QA это решение. Помимо ответа на запись, если для выполнения того же кода в сафари он не дает файла в качестве подтверждения диалога, если способ подавить файл сохранить как диалог для Firefox и т. Д., Как сафари. – user332951

+0

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

0

Возможно, вы можете отправить файл дампа через php-скрипт. Там вы (опять же: может быть, я не знаю, если это действительно работает) может проверить состояние соединения с помощью connection_status(). Но если вы отправляете файл через php-скрипт, вам не нужно знать его статус, потому что, если сценарий отключается должным образом, это имеет значение, если передача завершена, если вы просто хотите разблокировать базу данных.

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

+0

Я не могу сохранить файл на сервере, для обеспечения безопасности. Информация о экспорте для многих организаций, где каждый имеет тонны личной личной информации. – user332951

+0

Чтобы отправить дамп через PHP, вам не нужно сохранять его как файл. Просто установите правильные заголовки и «эхо». – KingCrunch

+0

Вот что я сделал. Пожалуйста, посмотрите на опубликованный код. – user332951

Смежные вопросы