Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> pobranie pliku i wyslanie emaila po Submit
robert1974
post 8.04.2015, 13:35:32
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. // questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif? czy tu dadac zapis do bazy questionmark.gifquestionmark.gifquestionmark.gif?
  4.  
  5. // We'll be outputting a PDF
  6. header('Content-type: application/pdf');
  7.  
  8. // It will be called downloaded.pdf
  9. header('Content-Disposition: attachment; filename="downloaded.pdf"');
  10.  
  11. // The PDF source is in original.pdf
  12. readfile('original.pdf');
  13. ?>


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
Aqu
post 8.04.2015, 13:38:52
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 8.04.2015, 14:19:17
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 8.04.2015, 14:20:16
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 8.04.2015, 20:15:03
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 questionmark.gif? jakis sposob podbranie pliku questionmark.gif?
  13. }

Go to the top of the page
+Quote Post
Aqu
post 8.04.2015, 20:29:59
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 8.04.2015, 20:54:12
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 8.04.2015, 20:56:25
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 13.04.2015, 18:17:10
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 smile.gif

@Acu, jeszcze jedno, bo znow utknalem 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 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 sad.gif
Go to the top of the page
+Quote Post
Turson
post 13.04.2015, 18:28:03
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 13.04.2015, 20:28:16
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 13.04.2015, 20:36:06
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 13.04.2015, 21:03:27
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 13.04.2015, 21:07:57
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 13.04.2015, 21:14:27
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 13.04.2015, 21:17:41
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 13.04.2015, 21:23:34
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 13.04.2015, 21:33:11
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(); ?> 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 smile.gif

Ten post edytował robert1974 13.04.2015, 21:37:38
Go to the top of the page
+Quote Post
Turson
post 13.04.2015, 21:45:55
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 13.04.2015, 21:58:39
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

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

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2024 - 14:38