ФорумПрограммированиеPHP для идиотов → Переадресация после отдачи файла

Переадресация после отдачи файла

  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 24 января 2008 г. 10:10

    Изначальная задача - экспорт данных в .csv-файл и их удаление из БД. Происходит экспорт по сабмиту формы (так, потому что там еще есть чекбоксы для выбора данных, которые экспортируются, но тут для упрощения я не буду это учитывать).


    // Запрос
    $result = mysql_query ('SELECT * FROM `'.ORDERS_TABLE.'`');
    while ($row = mysql_fetch_array ($result, MYSQL_ASSOC))
    $str .= implode (";", $row)."\r\n";
    // Формирую
    $filename = "export/export_".time().".csv";
    file_put_contents ($filename, $str);
    // Удаляю данные из БД
    mysql_query ('DELETE FROM `'.ORDERS_TABLE.'`');
    // Отдаю
    header ("Content-disposition: filename=".$filename);
    header ("Content-type: application/x-csv");
    readfile ($filename);


    Файл формируется, отдается… НО. Нужно чтобы после этого страницы обновилась, так как данные удалены из БД и тот список, который сейчас на странице, устарел.

    Я понимаю, что после заголовков в коде выше отправить еще один с локейшеном не получится. Пытался сделать на javascript, что-типа

    <input type="submit" name="export" value="Export and delete" onClick="window.location=window.location">

    Но не вышло. Подскажите, пожалуйста, какие-нибуть варианты решения задачи, если это в принципе возможно.
    Или, если невозможно, как поступить, написать красным "обновите страницу"? )))
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 24 января 2008 г. 10:48, спустя 37 минут 50 секунд

    Может я что-то не понял, но может быть сделать ещё одну промежуточную страницу "для скачки" (где нет удаляемых данных), на которую перенаправлять юзера и там уже отдавать ему файл?
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 24 января 2008 г. 10:53, спустя 5 минут 33 секунды

    Допустим, а как тогда вернуть юзера опять на первую страницу?
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 24 января 2008 г. 11:23, спустя 29 минут 23 секунды

    э… в смысле? ну поставить ссылку "Назад" :)

    т.е. в 3 этапа (стандартно: форма-обработка-результат):
    1) страница с данными, там ссылка типа "сформировать файл" на сценарий,
    2) этот сценарий удаляет данные из базы и формирует файл, перенаправляет на страницу с результатом
    3) на этой странице - ссылка для скачки сформированного файла. Там же ставим ссылку на первую страницу.
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 24 января 2008 г. 11:59, спустя 36 минут 9 секунд

    Понял. Спасибо, так наверно и сделаю. Я просто хотел чтобы файл отдавался не уходя со страницы и потом страница обновлялась, но обновить никак не получается, только отдать :)
  • Fedr

    Сообщения: 1 Репутация: N Группа: Кто попало

    Spritz 1 февраля 2008 г. 2:14, спустя 7 дней 14 часов 14 минут

    А ежели так?

    <script language="JavaScript" type="text/javascript">
    <!–
    function GoNah(){
    location="your_page.php";
    }
    setTimeout( \'GoNah()\', 2000 );
    //–>
    </script>'

    Написал по честному, что данные удалены и через (в данном случае 2 секунды) определенный промежуток времени или без него обновил страницу.
    Проверено, работает
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 1 февраля 2008 г. 12:30, спустя 10 часов 16 минут 43 секунды

    Почему бы аякс не применить?
  • aligator

    Сообщения: 52 Репутация: N Группа: Кто попало

    Spritz 3 февраля 2008 г. 21:34, спустя 2 дня 9 часов 3 минуты


    <?php
    echo "<meta http-equiv='Refresh' content='0; url=http://domain.com/index.php'>";
    ?>
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 3 февраля 2008 г. 22:40, спустя 1 час 5 минут 54 секунды



    <?php
    echo "<meta http-equiv='Refresh' content='0; url=http://domain.com/index.php'>";
    ?>



    Тогда уж

    <?php
    header('Location: http://www.example.com/');
    ?>
    adw/0
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 4 февраля 2008 г. 8:08, спустя 9 часов 28 минут 7 секунд

    aligator, adw0rd, я что-то сомневаюсь, что после
    header ("Content-disposition: filename=".$filename);
    header ("Content-type: application/x-csv");

    получится применить ваши советы :)
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 4 февраля 2008 г. 8:38, спустя 29 минут 54 секунды


    aligator, adw0rd, я что-то сомневаюсь, что после
    header ("Content-disposition: filename=".$filename);
    header ("Content-type: application/x-csv");

    получится применить ваши советы :)

    почему?
    все умрут, а я изумруд
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 4 февраля 2008 г. 9:54, спустя 1 час 16 минут 24 секунды

    Потому что получается Warning: Cannot modify header information - headers already sent.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!