Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> pobranie pliku i wyslanie emaila po Submit
robert1974
post
Post #1





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

Ostrzeżenie: (0%)
-----


czesc,
troche sie zaplatalem...

mam prosta forme z name, email i guzik Submit.

po wcisnieciu Submit chce by:
1. zapisalo sie do bazy name, email
2. sciagnal sie plik

opcja1 ktora probuje:
  1. <form action="downloadFile.php" method="post">


a w php mam wowczas:

  1. <?php
  2.  
  3.  
  4. // We'll be outputting a PDF
  5. header('Content-type: application/pdf');
  6.  
  7. // It will be called downloaded.pdf
  8. header('Content-Disposition: attachment; filename="downloaded.pdf"');
  9.  
  10. // The PDF source is in original.pdf
  11. readfile('original.pdf');
  12. ?>


na poczatku tego php moge dodac zapisa do bazy, ale jak pobrac do niego wartosci name i email





Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 25)
Aqu
post
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 58
Dołączył: 14.07.2012

Ostrzeżenie: (0%)
-----


  1. <input type="text" name="email"/>


  1. $_POST['email'] // zmienna w ktorej masz tresc tego pola
Go to the top of the page
+Quote Post
robert1974
post
Post #3





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

Ostrzeżenie: (0%)
-----


zaraz probuje, dzieki

pytanie:
jesli robie tak:
  1. <form name="before_form" method="POST" action="">


to wtedy przeladowuje akutalna strone. I wtedy moge uzyc var_dump($_POST); by zobacz ustawione wartosci.


a tuta robie:
  1. <form action="downloadFile.php" method="post">


czyli z odp rozumiem, ze $POST bedzie dostepna w downloadFile.php pliku. A w jaki sposob moglbym zobaczyc co rzeczywiscie tam jest dostepne? bo var_dump($_POST); mi tam nie zadziala.

..........................................



albo jeszcze inaczej czy daloby sie zrobic to w ten sposob:

  1. <form name="before_form" method="POST" action="">


by przeladowac obecna strone, wtedy moge sprawdzic czy $POST name i email sa ustawione i zapisac je do bazy, tylko jak wowczs zapoczatkowac pobieranie pliku?
Go to the top of the page
+Quote Post
Aqu
post
Post #4





Grupa: Zarejestrowani
Postów: 279
Pomógł: 58
Dołączył: 14.07.2012

Ostrzeżenie: (0%)
-----


po prostu zakończ skrypt za tym:
  1. var_dump($_POST); exit;
Go to the top of the page
+Quote Post
robert1974
post
Post #5





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

Ostrzeżenie: (0%)
-----


genialne, dzieki. teraz php pokazuje co dostaje w $POST a zatem latwiej mi zakododowac jego zawartosc.







jeszcze musze dopytac:

1. w przypadku uzycia oddzilenego php ktory sciaga plik, zapisuje do bazy i wysyla email .... jesli potrzebuja jeszcze jakiesj wartosc ktora nie jest w form a zatem nie jest dostepna w POST to co najlepiej zrobic? Czy wstawic ja do form jako hidden wartosc by w ten sposob byla dostepna w php?

2. czy nie da sie zrobic tego (jak pisalem w opcji2) by nie uzywac dodatkowego pliku php, a zeby logika wyslania emaila, zapisu do bazy (te dwie wiem ze sie da) oraz sciagniecia pliku byly czescia glownej strony?

cos jak:
  1. <?php
  2. if((!isset($_POST['BtnSubmit']) || (isset($_POST['BtnSubmit']) && strlen($_POST['myEmail'])==0))) //or not pressed, or pressed by with empty field and not entry from email
  3. {
  4. //wyswietlam formularz
  5. }
  6. else
  7. {
  8. //zapis info do bazy
  9.  
  10. //wslanie emaila
  11.  
  12. // no i w (IMG:style_emoticons/default/questionmark.gif) ? jakis sposob podbranie pliku (IMG:style_emoticons/default/questionmark.gif) ?
  13. }

Go to the top of the page
+Quote Post
Aqu
post
Post #6





Grupa: Zarejestrowani
Postów: 279
Pomógł: 58
Dołączył: 14.07.2012

Ostrzeżenie: (0%)
-----


1. Ale o jaką wartość chodzi? Czemu nie możesz tego na sztywno wstawić do skryptu?
2. Wstaw po prostu do else ten kod, który teraz masz w oddzielnym pliku.
Go to the top of the page
+Quote Post
robert1974
post
Post #7





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

Ostrzeżenie: (0%)
-----


ad2.
jak pobieranie pliku przeniose to dostaje blad typu:

Warning: Cannot modify header information - headers already sent by (output started at /moj-plik-download/index.php:5) in /moj-plik-download/index.php on line 173

Go to the top of the page
+Quote Post
Aqu
post
Post #8





Grupa: Zarejestrowani
Postów: 279
Pomógł: 58
Dołączył: 14.07.2012

Ostrzeżenie: (0%)
-----


Bo przed header wysyłasz coś innego do przeglądarki (html, echo w php).

http://phpedia.pl/wiki/Cannot_add_header_i...rs_already_sent
Go to the top of the page
+Quote Post
robert1974
post
Post #9





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

Ostrzeżenie: (0%)
-----


tak, wiem, czytalem o tym, to prawda wysylam, ale to by oznaczalo ze moj else musialby robic tylko te rzeczy i nic nie rysowac.
Czyli moze jednak w oddzilnym pliku sprobuje (IMG:style_emoticons/default/smile.gif)

@Acu, jeszcze jedno, bo znow utknalem (IMG:style_emoticons/default/smile.gif)

wciskam guzik DOWNLOAD, ...jesli uzywam tej opcji (<form action="downloadFile.php" method="post">) to $POST wartosci sa dostepne w downloadFile.php i to dziala juz OK: pobieram plik i zapisuje info do bazy.


... tylko ze jeszcze to na stronie glownej (gdzie jest guzik) musze sie jakos dobrac do tych wartosci z $POST, bo teraz po kliknieciu ten guzik DOWNLOAD musi zniknac i wypisac musze podziekowania.

na stronie glownej dodalem dla debugowania : var_dump($_POST); ale zarowno przed wcisnieciem guzika jak i po, tablica $POST jest pusta.

rozumiem, ze to zachowawnie jest zwiazane z <form action="downloadFile.php" method="post"> bo w przeszlosci gdy uzywalem <form name="before_form" method="POST" action=""> (akcja pusta) to $POST byl dostepny na stronie glownej/wywolujacej.

....


jeszcze taki mialem pomysl, ale tez niewypal (IMG:style_emoticons/default/sad.gif)

chcialem w tym skrypcie php na jego koncu zrobic tak:

$_SESSION['FM_downloaded'] = true;
header("Location: ". $_SERVER['REQUEST_URI']);

a potem w glownym programie sprawdzac czy zmienna sesyjna jest ustawiona i jesli tak, to nie wyswietlac ponownie formularza. Niestety poniewaz w tym php mam juz na koncu:

  1. header('Content-type: application/pdf');
  2.  
  3. // It will be called downloaded.pdf
  4. header('Content-Disposition: attachment; filename="downloaded.pdf"');
  5.  
  6. // The PDF source is in original.pdf
  7. readfile('original.pdf');



to wywolanie trugi raz: header("Location: ". $_SERVER['REQUEST_URI']); nie dziala


jakis pomysl ktos moze?



ogolnie, tak jak pisalem wyzej, daze to tego by po wypelnioneniu formularza i wcisnieciu guzika Submit od razu sciagal sie plik (i to sie robi) ale tez by przeladowywala sie strona glowna i juz nie pojawial formularz.

.... naczytalem sie w google, chyba to jednak nie takie proste, musze zmienic sposob rozwiazania (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
Turson
post
Post #10





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Cytat
ogolnie, tak jak pisalem wyzej, daze to tego by po wypelnioneniu formularza i wcisnieciu guzika Submit od razu sciagal sie plik (i to sie robi) ale tez by przeladowywala sie strona glowna i juz nie pojawial formularz.

Zrób to na odwrót. Po przesłaniu formularza:
- ustaw zmienną sesyjną na true
- przekieruj na stronę formularza
- sprawdz zmienna sesyjna i jezeli jest true to nie wyswietlaj formularza, ustaw zmienna sesyjna na false albo ją usuń i pobieraj plik, w przeciwnym wypadku po prostu pokaz formularz
Go to the top of the page
+Quote Post
robert1974
post
Post #11





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

Ostrzeżenie: (0%)
-----


teraz sobie Wiadomosci ogladalem i wymyslilem cos takiego:

1. na stronie glownej mam formularz
2. wypelniam go i wciskam guzik "Request file", to spowoduje przeladowanie strony glownej, z ustawionymi wartociami w $POST. to pozwoli mi w php na glownej stronie obsluzyc: a.sprawdzenie poprawnosci danych wpisanych przez uzytkownika, b. zapisanie info do bazy, c. wyswietlenie drugiego guzika o nazwie "Download file".
3. wcisniecie guzika "Download file" pobierze plik

taki pomysl, ale czy dobry to sam jeszcze nie wiem.

Cytat(Turson @ 13.04.2015, 19:28:03 ) *
Zrób to na odwrót. Po przesłaniu formularza:
- ustaw zmienną sesyjną na true
- przekieruj na stronę formularza
- sprawdz zmienna sesyjna i jezeli jest true to nie wyswietlaj formularza, ustaw zmienna sesyjna na false albo ją usuń i pobieraj plik, w przeciwnym wypadku po prostu pokaz formularz


to tez super pomysl, zaraz sprawdze w praniu.

@Turson: w Twoim rozwiazaniu otrzymuje ten blad: "Cannot modify header information - headers already sent by ..." z ktorym nie potrafie sobie poradzic. Probuje.
Go to the top of the page
+Quote Post
Turson
post
Post #12





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Wklej treść błędu w Google a na pewno sobie poradzisz. Dość popularny temat. No i pochwal się kodem
Go to the top of the page
+Quote Post
robert1974
post
Post #13





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

Ostrzeżenie: (0%)
-----


tak, buszuje w google, ...no i poradzilem sobie ze przenioslem ta logike (sprawdzenie czy zmienna $SESSION ustawiona jest (przez php)) na sam poczatek glownej strony, wtedy bledu o headerze nie dostaje, ale plik sie czemus nie sciaga. Sprawdzam jeszcze.

wyglada to tak:

formularz jest tak:
  1. <form name="before_form" method="POST" action="downloadFile.php">


w pliku downloadFile.php zapisuje do bazy info i na koncu ustawiam zmienna $SESSION po czym przekierowuje na strone glowna:

  1. ...
  2. $_SESSION['FM_downloaded'] = true;
  3. header("Location: /strona_glowna/");
  4. ?>



a na stronie glownej, na samym poczatku zrobilem:

  1. <?php
  2. if($_SESSION['FM_downloaded'] == true)
  3. {
  4. //echo 'jest';
  5. unset($_SESSION['FM_downloaded']);
  6.  
  7. // We'll be outputting a PDF
  8. header('Content-type: application/pdf');
  9.  
  10. // It will be called downloaded.pdf
  11. header('Content-Disposition: attachment; filename="downloaded.pdf"');
  12.  
  13. // The PDF source is in original.pdf
  14. readfile('original.pdf');
  15. }
  16. ?>
  17.  
  18. i tutaj jest dalsz czesc strony glownej (czesc w HTMLu, czesc w PHP)


czy dam exit; po readfile() czy nie dam, nic nic nie zmienia. Bledu header teraz nie wyrzuca teraz, bo jest na poczastku, ale z jakiegos powodu pliku nie sciaga. A sam kod pobrania pliku powinen byc OK, bo jak go wkleje do php i usune stamtad przekierowanie header("Location: /strona_glowna/"); to dziala.
Go to the top of the page
+Quote Post
Turson
post
Post #14





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Po readfile daj exit
Go to the top of the page
+Quote Post
robert1974
post
Post #15





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

Ostrzeżenie: (0%)
-----


nie pomoga, nie ma zadnego bledu na stronie, ...ale nie sciaga pliku.
Go to the top of the page
+Quote Post
Turson
post
Post #16





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


  1. if($_SESSION['FM_downloaded'] == true)

tutaj powinieneś mieć sprawdzenie czy taki element w sesji w ogóle istnieje i jak istnieje to czy jest prawdą.
Nigdzie nie widzę session_start(), włącz pełne raportowanie błędów
Go to the top of the page
+Quote Post
Aqu
post
Post #17





Grupa: Zarejestrowani
Postów: 279
Pomógł: 58
Dołączył: 14.07.2012

Ostrzeżenie: (0%)
-----


Możesz to wszystko uprościć w ten sposób, że:
form action=""
po naciśnięciu Wyślij javascriptem: otwierasz w nowym oknie downloadFile.php + wysyłasz formularz, na stronie głównej wyświetlasz komunikat

albo na stronie głównej dajesz iframe src="downloadFile.php" 1px i chyba też powinno zadziałać.

Ten post edytował Aqu 13.04.2015, 21:24:29
Go to the top of the page
+Quote Post
robert1974
post
Post #18





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

Ostrzeżenie: (0%)
-----


@Turson:
bravo!!!!
jak wstawialem ten kod sciagania na poczatku strony glownej to wstawilem go nawet przed: <?php session_start(); ?> (IMG:style_emoticons/default/sad.gif) (( shame.
i wtedy nie widzial $_SESSION['FM_downloaded'] czyli nie wchodzil do IF, czyli nie sciagal. Juz dziala. Krok do przodu. Wielkie dzieki.

czyli w sumie wrocilismy do wersji ktora wczesniej rozwazalem z Acu, ze mozna by wszystko zrobic na stronie glownej, bez oddzielnego php. Musze to przemyslec, bo teraz w sumie w php pliku jest tylk zapis do bazy i ustawianie Session.


A co to znaczy wlaczenie pelnego logowania? Oj, sporo nauki przede mna (IMG:style_emoticons/default/smile.gif)

Ten post edytował robert1974 13.04.2015, 21:37:38
Go to the top of the page
+Quote Post
Turson
post
Post #19





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Można w jednym pliku. Pseudokod:
  1. if(!empty($_POST)){
  2. zapisz do bazy
  3. session=true
  4. }
  5. if(session === true){
  6. session=false
  7. pobierz plik
  8. }
  9. wyswietl formularz


miałem na myśli właczenie pełnego raportowania błędów error_reporting
Go to the top of the page
+Quote Post
robert1974
post
Post #20





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

Ostrzeżenie: (0%)
-----


oic... znow cos nie tak... wlasnie patrze, ze jak po pobierz plik robie exit to on juz nie przetwarza reszty strony / reszty kodu z tego pliku.
czyli nie moge zrobic sprawdzenia czy jesli $SESSION ustawiona to nie wyswietlaj formularza ponownie.

znow cos robie zle?
Go to the top of the page
+Quote Post
Turson
post
Post #21





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Więc przenieś pobieranie na sam koniec pliku jak już jest strona załadowana. Tyle że przed pobieraniem bodajże musisz wyczyścic bufor, bo wcześniej był content
Go to the top of the page
+Quote Post
robert1974
post
Post #22





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

Ostrzeżenie: (0%)
-----


zatoczylismy kolo (IMG:style_emoticons/default/smile.gif) , bo jesli przenoisze ta czesc sprawdzajaca i sciagajaca plik nizej to dostaje slynny blad: Warning: Cannot modify header information - headers already sent by

kombinuje jeszcze z tymi funkcjami:
ob_start();
ob_end_flush();
ob_end_clean()

ale wciaz nie ogarniam.
Go to the top of the page
+Quote Post
Nattfarinn
post
Post #23





Grupa: Zarejestrowani
Postów: 136
Pomógł: 22
Dołączył: 19.09.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


Tak tylko dodam: unikaj readfile do pobierania plików. W przypadku większych plików (a wbrew pozorom wcale nie tak dużych) z łatwością przekroczysz limit dostępnej pamięci i wysypiesz aplikację. Readfile wczytuje zawartość całego pliku do pamięci, a na potrzeby pobierania pliku to trochę bez sensu. Dla 1mb plików problem raczej nie wystąpi, ale w ramach "dobrych zwyczajów" proponuję rozważyć jakieś rozwiązanie z porcjowaniem czy wykorzystaniem serwera HTTP do pobierania pliku. (IMG:style_emoticons/default/smile.gif)

Ten post edytował Nattfarinn 14.04.2015, 08:02:36
Go to the top of the page
+Quote Post
robert1974
post
Post #24





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

Ostrzeżenie: (0%)
-----


dzieki za komentarz, dobra uwaga, ja pliki mam akurat male, ... no i wydawalo mi sie ze to wygodne rozwiazanie w stylu, wciaskasz guzik i masz plik u siebie.
niestety, wciaz sie z tym zmagam i cos robie zle.

Ten post edytował robert1974 14.04.2015, 08:07:45
Go to the top of the page
+Quote Post
Turson
post
Post #25





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Przypomniało mi się, że nie musisz używać niczego specjalnego do pobierania pliku. header() na ścieżkę z plikiem powininen wymusic przeglądarce pobieranie
Go to the top of the page
+Quote Post
robert1974
post
Post #26





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 2.11.2014

Ostrzeżenie: (0%)
-----


a ja sie dzis poddalem z tamtym rozwiazaniem :-( ... i sprobowalem swojego pomyslu z 2 krokowym sciagnieciem. Wyglada ze dziala. Ale walka byla. Dzieki za pomoc.

dzieki i za ten kolejny pomysl, sprobuje z tym headerem tylko, ale jak psychicznie odpoczne od tematu (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 01:37