Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Uaktualnienie bazy przy sciąganiu pliku
Forum PHP.pl > Forum > Przedszkole
sadistic_son
Macie jakiś pomysł jak zrobić aby przy kliknięciu w link do pliku na serwerze uaktualnił się rekord w bazie?

Załóżmy że w bazie jest id, nazwa_pliku, ile_razy_sciagniety.

Mamy sobie <a href=index.php?plik=costam.xxx>

Teraz jeśli user kliknie w ten link przekieruje go do strony index a zmiennej $_GET['plik'] przydzieli wartość "costam.xxx". Do tej pory wszystko ok. Ale kiedy podłączyłem do tej strony wysyłanie tego pliku prze znagłówki to strona się nie przeładowuje po kliknięciu w link, więc i zmienna $_GET['plik'] nie istnieje a co za tym idzie nie moge uaktualnic bazy że plik zostal pobrany kolejny raz.

Wygląda to tak:
  1. <a href=index.php?plik=costam.xxx>

  1. <?php
  2. if(isset($_GET['plik'])){
  3. $link = $_GET['plik'];
  4.    
  5. //nagłówki
  6. header("xxxxx");
  7.  
  8. @readfile($link);
  9. }
  10.  
  11. //teraz mialoby sie odbyc uaktualnienie bazy
  12. update_base($link);
  13. //funkcja wyszuka dany rekord i zwiekszy wartosc 'ile_razy_sciagniety' o 1.
  14. ?>
Ale tak sie nie dzieje bo strona sie nie przeladowuje. Po prostu po kliknieciu w link wywala okienko do downloadu i tyle. Nie przekierowuje do index.php

Macie jakis pomysl jak to rozwiazac?

Dzieki.
thomas2411
Sam nie wiem dlaczego tak jest, ale możesz najpierw uaktualniać bazę, a dopiero potem pobierać plik...a co do przekierowania...Możesz zrobić na javascriptcie to, żeby np poczekał 5 sekund po wywołaniu download i następnie przekierował na index.php
Fifi209
Cytat
wysyłanie tego pliku prze znagłówki to strona się nie przeładowuje po kliknięciu w link


Czyli? smile.gif Jakiś błąd? Pamiętaj, że nagłówki wysyłamy jako pierwsze.

Cytat(thomas2411 @ 14.07.2009, 08:32:08 ) *
Sam nie wiem dlaczego tak jest, ale możesz najpierw uaktualniać bazę, a dopiero potem pobierać plik...a co do przekierowania...Możesz zrobić na javascriptcie to, żeby np poczekał 5 sekund po wywołaniu download i następnie przekierował na index.php


To chyba lepiej skorzystać z frames, w końcu nie każdy używa js.
SzamanGN
W kodzie dodaj po header('xxxx');
  1. <?php
  2. header('Location: index.php');
  3. ?>
sadistic_son
Dodałem header('Location: index.php');
Nagłówki są przed <!DOCTYPE html PUBLIC "-//W3C....... czyli na samym poczatku html (po prau funkcjach, logującej itp). I nadal to samo sciana.gif
Jeśli całą sekcję nagłówków obejme w komentarz to wszystko jest ok (oprócze tego oczywiście że nie uruchamia się download). Wygląda jakby po prostu te nagłówki coś psuły. Wygląda to tak:
  1. <?php
  2.  
  3. include"functions.php";
  4.  
  5. //pare funkcji: logująca, wylogowywująca itp itd...
  6. funkcje_jakies();
  7.  
  8.  
  9. //sprawdzenie czy plik jest pobierany: uaktualnienie ilosci download'u
  10.  
  11. if(isset($_GET['file'])){
  12. $link = $_GET['file'];
  13.  
  14. header("Pragma: public");
  15. header("Expires: 0");
  16. header("Cache-Control: no-store, must-revalidate, post-check=0, pre-check=0");
  17. header("Content-Type: application/force-download");
  18. header("Content-Type: application/octet-stream");
  19. header("Content-Type: application/download");
  20. header("Content-Disposition: attachment; filename=\"".basename($link)."\";");
  21. header("Content-Transfer-Encoding: binary");
  22. header("Content-Length: ".filesize($link));
  23. header('Location: index.php');
  24. @readfile($link);
  25. }
  26.  
  27. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  28. <html xmlns="http://www.w3.org/1999/xhtml">
  29. <head>
  30. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  31. <title> itd....
  32. ?>


I dajmy na to że gdzieś na dole chcę wyświetlić nazwę tego pliku czyli $_GET['file']. Wyświetla się ona tylko wtedy jeśli zakomentuje nagłówki. Jeśli nie to w ogóle nie przechodzi do index.php ze strony na której kliknięto w link z downloadem np. <a href="index.php?file=cos.666">

Jest tu jakiś błąd w kodzie czy coś? Czy może w rozumowaniu?
Fifi209
header('Location: index.php');
@readfile($link);

Jak ma odczytać plik skoro przed tym robisz przekierowanie? smile.gif
sadistic_son
Rzecz w tym, że plik odczytuje. Czy jest header('Location: index.php'); czy nie to wszystko dziala tak samo.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.