Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Automatyczne wstawianie adresu zwrotnego w formularzu
matizz
post 8.11.2012, 23:49:50
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 8.11.2012

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


Witam!

Jestem w trakcie tworzenia formularza wysyłanego ze strony przez PHP.
Poradziłem sobie z masowym wczytywaniem wartości okienek, sprawdzaniem poprawności maila i innych danych.
Stoję nad następującym problemem:
Chciałbym aby adres nadawcy był taki jak podany w formularzu.

Jeśli w kodzie wpiszę :
  1. $header = "From: costam@cos.pl"
  2. (...)
  3. if (mail($email, temat, $body, $header))
  4. echo "<script>document.location.href='ok.html';</script>";
  5. else
  6. echo "<script>document.location.href='blad.html';</script>";
  7.  

To działa to poprawnie i nadawcą maila jest cośtam.

Jeśli użyję :

  1. $header = "From: $_POST['email']"
  2.  


i podobne kombinacje, to niestety wyskakuje błąd.

Jak powinno wyglądać to polecenie poprawnie napisane?

Nie mogę też znaleźć nigdzie informacji na temat tego jak dodać inną treść do maila np by gotowy mail wyglądał tak:
Kod
Witaj!

[Imię i nazwisko z formularza ] skontaktował się z Tobą za pomocą formularza na stronie.

[Tutaj treść formularza]



Pozdrawiam
Mateusz
Go to the top of the page
+Quote Post
Vion
post 9.11.2012, 00:00:13
Post #2





Grupa: Zarejestrowani
Postów: 112
Pomógł: 2
Dołączył: 27.06.2008

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


podaj jaki to błąd


--------------------
www.zapalara.pl
Go to the top of the page
+Quote Post
b4rt3kk
post 9.11.2012, 01:05:06
Post #3





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Zaglądałeś kiedyś do manuala PHP? wszystko jest elegancko, przystępnie opisane. Raz, że masz odpowiedź na swoje pytanie natychmiast, a dwa masz satysfakcję, że zrobiłeś coś samodzielnie.

Żywcem przykład z manuala:

  1. // To send HTML mail, the Content-type header must be set
  2. $headers = 'MIME-Version: 1.0' . "\r\n";
  3. $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  4.  
  5. // Additional headers
  6. $headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
  7. $headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
  8. $headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
  9. $headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";


Co do drugiej części, zwyczajne łączenie strngów, czyli podstawy. To Ty decydujesz co ma zostać przesłane, nie użytkownik, on może tylko wypełnić treść niektórych pól.

  1. $body = "Witaj! <b>$_POST['imie'] $_POST['nazwisko']</b> skontaktował się z Tobą za pomocą formularza na stronie.<br/>$_POST['tresc']";


Tak przygotowany string przekazujesz do funkcji mail.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
matizz
post 9.11.2012, 22:44:37
Post #4





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 8.11.2012

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


Cytat(b4rt3kk @ 9.11.2012, 01:05:06 ) *
Zaglądałeś kiedyś do manuala PHP? wszystko jest elegancko, przystępnie opisane. Raz, że masz odpowiedź na swoje pytanie natychmiast, a dwa masz satysfakcję, że zrobiłeś coś samodzielnie.

Żywcem przykład z manuala:

  1. // To send HTML mail, the Content-type header must be set
  2. $headers = 'MIME-Version: 1.0' . "\r\n";
  3. $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  4.  
  5. // Additional headers
  6. $headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
  7. $headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
  8. $headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
  9. $headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";


Co do drugiej części, zwyczajne łączenie strngów, czyli podstawy. To Ty decydujesz co ma zostać przesłane, nie użytkownik, on może tylko wypełnić treść niektórych pól.

  1. $body = "Witaj! <b>$_POST['imie'] $_POST['nazwisko']</b> skontaktował się z Tobą za pomocą formularza na stronie.<br/>$_POST['tresc']";


Tak przygotowany string przekazujesz do funkcji mail.



Tak, zaglądałem do manuala, ale to o czym piszesz to nie do końca to, o co mi chodzi.
Było późno więc może nie wyjaśniłem do końca o co mi chodzi.
Ustawiając w ten sposób jak napisałeś nadawcą maila będzie zawsze np "Birthday Reminder".
Ja chciałbym by nadawca maila był taki, jak mail podany przez wypełniającego.
Wtedy wystarczyłoby tylko kliknąć odpowiedz, by mail doszedł do wypełniającego formularz.

Pierwszy kontakt z PHP miałem wczoraj rano więc nie mam żadnego doświadczenia, ale wszystkie manuale i przykłady czytam i staram się je zrozumieć.
Dane wczytuję w trochę inny sposób, ponieważ okienek jest 40 i ciężko by to było przepisywać po kolei.
Zastosowałem automat ze strony http://www.kurshtml.edu.pl/html/wyslanie_f...formularze.html
Teraz spróbuję go przerobić tak by na początku były te dane w formacie strony HTML, a dopiero później wypełniony formularz.

Błąd jest ciekawy - wyświetla niepoprawny typ danej w linijce 32, gdzie kod kończy się na 28.

Pozdrawiam
Mateusz
Go to the top of the page
+Quote Post
abort
post 9.11.2012, 22:55:07
Post #5





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

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


Cytat(matizz @ 9.11.2012, 22:44:37 ) *
Ja chciałbym by nadawca maila był taki, jak mail podany przez wypełniającego.

Obawiam się, że na takie rzeczy niekoniecznie musi chcieć zgodzić się serwer SMTP (poczty). Używasz swojego własnego, czy zewnętrznego? Od razu uprzedzę, że jak zewnętrznego, to niestety, ale nic nie zrobisz - na "chceniu" się skończy. A jak własnego, to jakiego? sendmail, postfix, qmail? Lepiej wtedy poszukać wsparcia na grupach uniksowych (od poczty elektronicznej). Bo tu coponiektózy mogą się znać, ale to nie jest główny cel tego forum.

Cytat(matizz @ 9.11.2012, 22:44:37 ) *
Błąd jest ciekawy - wyświetla niepoprawny typ danej w linijce 32, gdzie kod kończy się na 28.

Dziwne.
Go to the top of the page
+Quote Post
vifus
post 9.11.2012, 23:05:42
Post #6





Grupa: Zarejestrowani
Postów: 109
Pomógł: 13
Dołączył: 7.04.2012

Ostrzeżenie: (10%)
X----


nie wiem czy do końca Cię rozumiem, ale:

  1.  
  2. <?PHP
  3. $adresat = 'adres@serwer.pl';
  4. $email = $_POST['email'];
  5. $content = $_POST['content'];
  6.  
  7. $header = "From: ".$email." \nContent-Type:".
  8. ' text/plain;charset="iso-8859-2"'.
  9. "\nContent-Transfer-Encoding: 8bit";
  10.  
  11. mail($adresat, 'List ze strony', $content, $header)
  12.  
  13. ?>


powinno działać.

Ten post edytował vifus 9.11.2012, 23:06:29


--------------------
Zlecenia PHP / MYSQL / JAVASCRIPT / C++ / CSS / HTML na PW
Go to the top of the page
+Quote Post
abort
post 9.11.2012, 23:21:37
Post #7





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

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


Hm. Dziwne, ale w manualu jak konstruują nagłówki, to wszędzie używają sekwencji \r\n (patrz wyżej post usera b4rt3kk). U ciebie jest tylko \n.
Dalej w treści manual już stosuje tylko \n - wnioskuję z tego, że użycie \r\n jest celowe i ma znaczenie.
Go to the top of the page
+Quote Post
vifus
post 9.11.2012, 23:24:20
Post #8





Grupa: Zarejestrowani
Postów: 109
Pomógł: 13
Dołączył: 7.04.2012

Ostrzeżenie: (10%)
X----


być może, przed chwilą sprawdziłem powyższy kod i działa jak należy wink.gif


--------------------
Zlecenia PHP / MYSQL / JAVASCRIPT / C++ / CSS / HTML na PW
Go to the top of the page
+Quote Post
b4rt3kk
post 10.11.2012, 10:55:42
Post #9





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Cytat(vifus @ 9.11.2012, 23:24:20 ) *
być może, przed chwilą sprawdziłem powyższy kod i działa jak należy wink.gif


Równie dobrze można użyć PHP_EOL, jest to kwestia interpretacji nagłówków przez klienta (dla platform Unixowych i Windowsowych).


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
matizz
post 11.11.2012, 00:26:32
Post #10





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 8.11.2012

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


Dziękuje za pomoc.
W tym momencie kod wysyłania maila wygląda tak:

  1. <?php
  2.  
  3. ini_set('display_errors','1');
  4.  
  5. $ok = 0;
  6.  
  7. if (empty($_POST['email']))
  8. {
  9. echo "Pole E-Mail jest puste !";
  10. }
  11. elseif (empty($_POST['imie']))
  12. {
  13. echo "Pole Imie jest puste !";
  14. }
  15. else
  16. {
  17. $ok = 1;
  18. }
  19. //formatowanie treści maila
  20. $from = $_POST['email'];
  21. $head =
  22. "MIME-Version: 1.0 \r\n" .
  23. "Content-Type: text/plain; charset=UTF-8 \r\n" .
  24. "Content-Transfer-Encoding: 8bit \r\n" .
  25. "From: ktostam@cośtam.pl \r\n" .
  26. "Reply-to: ".$from."\r\n";
  27.  
  28.  
  29.  
  30. // wysyłanie maila
  31. if($ok = 1)
  32. {
  33. if (mail('odkogostam@gdzieśtam.pl', 'temat', 'tresc', $head))
  34. echo "<script>document.location.href='ok.html';</script>";
  35. else
  36. echo "<script>document.location.href='blad.html';</script>";
  37. }
  38.  
  39. ?>


Zamiast bawić się w rozbudowane drzewa If - elsif dodałem zmienną pomocniczą "ok".
Jeśli pola imię i email są wypełnione (na razie nie sprawdzam jeszcze poprawności emaila) to zmienna = 1 i wysyła maila.

Muszę opracować jakiś system powiadomieć o błędnym mailu.
W tym momencie informacja o braku wypełnienia wyświetla się na nowej stronie, a po powrocie trzeba wszystko wypełniać od nowa.

Pozdrawiam
Mateusz
Go to the top of the page
+Quote Post

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: 4.07.2025 - 23:53