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

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

  • sap

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

    Spritz Янв. 24, 2008, 9: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, 9:48 п.п., спустя 37 минут 50 секунд

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

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

    Spritz Янв. 24, 2008, 9:53 п.п., спустя 5 минут 33 секунды

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

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

    Spritz Янв. 24, 2008, 10:23 п.п., спустя 29 минут 23 секунды

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

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

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

    Spritz Янв. 24, 2008, 10:59 п.п., спустя 36 минут 9 секунд

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

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

    Spritz Фев. 1, 2008, 1: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, 11:30 п.п., спустя 10 часов 16 минут 43 секунды

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

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

    Spritz Фев. 4, 2008, 8:34 д.п., спустя 2 дня 9 часов 3 минуты


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

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

    Spritz Фев. 4, 2008, 9: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/');
    ?>
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • sap

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

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

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

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

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

    Spritz Фев. 4, 2008, 7:38 п.п., спустя 29 минут 54 секунды


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

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

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

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

    Spritz Фев. 4, 2008, 8:54 п.п., спустя 1 час 16 минут 24 секунды

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

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