Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pole nadawca w formularzu kontaktowym
Forum PHP.pl > Forum > Przedszkole
tomputer
Witam mam sobie na stronie taki formularz kontaktowy:
  1. <?php
  2.  
  3. if (isset($_POST["submit"])) {
  4. $name = $_POST['name'];
  5. $email = $_POST['email'];
  6. $message = $_POST['message'];
  7. $human = intval($_POST['human']);
  8. $to = 'adres_odbiorcy';
  9. $subject = 'Wiadomość z nazwa_strony ';
  10. $body = "OD: $name\n Odpowiedź proszę wysłać na ten adres e-mail: $email\n Treść:\n $message";
  11.  
  12. // Check if name has been entered
  13. if (!$_POST['name']) {
  14. $errName = 'Uzupełnij to pole';
  15. }
  16.  
  17. // Check if email has been entered and is valid
  18. if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
  19. $errEmail = 'Wpisz poprawny adres email';
  20. }
  21.  
  22. //Check if message has been entered
  23. if (!$_POST['message']) {
  24. $errMessage = 'Wpisz treść wiadomości';
  25. }
  26. //Check if simple anti-bot test is correct
  27. if ($human !== 15) {
  28. $errHuman = 'Wpisz poprawny wynik dodawania';
  29. }
  30.  
  31. // If there are no errors, send the email
  32. if (!$errName && !$errEmail && !$errMessage && !$errHuman) {
  33. if (mail ($to, $subject, $body, $from)) {
  34. $result='<div class="alert alert-success">Dziękuję! Odpowiem w możliwie najkrótszym czasie</div>';
  35. } else {
  36. $result='<div class="alert alert-danger">Przepraszam nie udało się wysłać wiadomości! Sprawdź czy poprawnie wypełniłeś/aś formularz</div>';
  37. }
  38. }
  39. }
  40. ?>


oraz kod formularz w html

  1. <form class="" method="post" action="index.php">
  2. <div class="form-group">
  3. <div class="col-sm-10">
  4. <input type="text" class="form-control" id="name" name="name" placeholder="Jak się nazywasz?" value="<?php echo htmlspecialchars($_POST['name']); ?>">
  5. <?php echo "<p class='text-danger'>$errName</p>";?>
  6. </div>
  7. </div>
  8. <div class="form-group">
  9. <div class="col-sm-10">
  10. <input type="email" class="form-control" id="email" name="email" placeholder="Twój adres email" value="<?php echo htmlspecialchars($_POST['email']); ?>">
  11. <?php echo "<p class='text-danger'>$errEmail</p>";?>
  12. </div>
  13. </div>
  14. <div class="form-group">
  15. <div class="col-sm-10">
  16. <textarea class="form-control" rows="4" name="message" placeholder="Wpisz treść wiadomości"><?php echo htmlspecialchars($_POST['message']);?></textarea>
  17. <?php echo "<p class='text-danger'>$errMessage</p>";?>
  18. </div>
  19. </div>
  20. <div class="form-group">
  21. <div class="col-sm-10">
  22. <input type="text" class="form-control" id="human" name="human" placeholder="Wpisz poprawny wynik dodawania: 10+5=?">
  23. <?php echo "<p class='text-danger'>$errHuman</p>";?>
  24. </div>
  25. </div>
  26. <div class="form-group">
  27. <div class="col-sm-10 col-sm-offset-0">
  28. <input id="submit" name="submit" type="submit" value="Wyślij zapytanie" class="btn btn-primary">
  29. </div>
  30. </div>
  31. <div class="form-group">
  32. <div class="col-sm-10 col-sm-offset-0">
  33. <?php echo $result; ?>
  34. </div>
  35. </div>
  36. </form>



Ogólnie formularz działa poprawnie ale mam problem z polem nadawcy!

W klientach pocztowych w polu nadawca jest podany adres serwera pocztowego a po kliknięciu na odpowiedz do wiadomość jest kierowana na ten właśnie adres.
Prosże o podpowiedź jak poprawnie zdefiniowaś pole From w takim formularzu.
viking
Wchodzisz na http://fi2.php.net/manual/en/function.mail.php i czytasz pkt 2.
tomputer
Dzięki przeczytałem ale coś mi jeszcze nie bangla:
dodałem zmienną headers zgodnie z opisem.
  1. <?php
  2. if (isset($_POST["submit"])) {
  3. $name = $_POST['name'];
  4. $email = $_POST['email'];
  5. $headers = 'From: adres@email' . "\r\n" .
  6. 'Reply-To: adres@email' . "\r\n" .
  7. 'X-Mailer: PHP/' . phpversion();
  8. $message = $_POST['message'];
  9. $human = intval($_POST['human']);
  10. $to = 'adres_odbiorcy';
  11. $subject = 'Tytuł';
  12. mail($headers);
  13. $body = "OD: $name\n E-Mail: $email\n Treść:\n $message";
  14. // Check if name has been entered
  15. if (!$_POST['name']) {
  16. $errName = 'Uzupłenij to pole';
  17. }
  18.  
  19. // Check if email has been entered and is valid
  20. if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
  21. $errEmail = 'Wpisz poprawny adres email';
  22. }
  23.  
  24. //Check if message has been entered
  25. if (!$_POST['message']) {
  26. $errMessage = 'Wpisz treść wiadomości';
  27. }
  28. //Check if simple anti-bot test is correct
  29. if ($human !== 15) {
  30. $errHuman = 'Wpisz poprawny wynik dodawania';
  31. }
  32.  
  33. // If there are no errors, send the email
  34. if (!$errName && !$errEmail && !$errMessage && !$errHuman) {
  35. if (mail ($to, $subject, $body, $from)) {
  36. $result='<div class="alert alert-success">Dziękuję! Odpowiem w możliwie najkrótszym czasie</div>';
  37. } else {
  38. $result='<div class="alert alert-danger">Przepraszam nie udało się wysłać wiadomości! Sprawdź czy poprawnie wypełniłeś/aś formularz</div>';
  39. }
  40. }
  41. }
  42. ?>
viking
I naprawdę w dokumentacji jest mail($headers); ?
tomputer
W dokumentacji jest
  1. mail($to, $subject, $message, $headers);

Niestety formularz pomija cała tą część! Nie dołącza żadnych nagłówków do maila!
viking
W kodzie wyżej masz 2 wywołania mail, jedno totalnie nieprawidłowe - PHP sypie na nim błędami, drugie nie zawiera nagłówków tylko zmienną $from.
tomputer
OK rozumiem że musze pozbyć się pierwszego wywołania mail ($headers)
i zmodyfikowac drugie w kodzie poniżej czyli
  1. if (mail ($to, $subject, $body, $headers)) {
viking
Dokładnie tak.
tomputer
Niestety wciąż gdziec popełniam błąd
w momencie kiedy usuwam zmienną $from i zamieniam na zmienną $headers w części kodu kod poniżej:

  1. if (!$errName && !$errEmail && !$errMessage && !$errHuman) {
  2. if (mail ($to, $subject, $body, $headers)) {
  3. $result='<div class="alert alert-success">Dziękuję! Odpowiem w możliwie najkrótszym czasie</div>';
  4. } else {
  5. $result='<div class="alert alert-danger">Przepraszam nie udało się wysłać wiadomości! Sprawdź czy poprawnie wypełniłeś/aś formularz</div>';
  6. }
  7. }
  8. }


To formularz wyrzuca mi komunikat Przepraszam nie udało się wysłać wiadomości! Sprawdź czy poprawnie wypełniłeś/aś formularz czyli błąd wysyłki! jeśli powracam do poprzedniej formy to wysyłka działa niestety ignoruje zmienne $headers czyli

  1. if (!$errName && !$errEmail && !$errMessage && !$errHuman) {
  2. if (mail ($to, $subject, $body, $from)) {
  3. $result='<div class="alert alert-success">Dziękuję! Odpowiem w możliwie najkrótszym czasie</div>';
  4. } else {
  5. $result='<div class="alert alert-danger">Przepraszam nie udało się wysłać wiadomości! Sprawdź czy poprawnie wypełniłeś/aś formularz</div>';
  6. }
  7. }
  8. }


definicje zmiennych wyglądają tak
  1. $name = $_POST['name'];
  2. $email = $_POST['email'];
  3. $headers = 'From: adres@email' . "\r\n" .
  4. 'Reply-To: adres@email' . "\r\n" .
  5. 'X-Mailer: PHP/' . phpversion();
  6. $message = $_POST['message'];
  7. $human = intval($_POST['human']);
  8. $to = 'adres@email';
  9. $subject = 'Temat';
  10. $body = "OD: $name\n E-Mail: $email\n Treść:\n $message";


OK już działa czyli finalnie kod ma postać:
  1. <?php
  2. if (isset($_POST["submit"])) {
  3. $name = $_POST['name'];
  4. $email = $_POST['email'];
  5. $message = $_POST['message'];
  6. $human = intval($_POST['human']);
  7. $to = 'adres@email';
  8. $subject = 'tutuł';
  9. $body = "OD: $name\n E-Mail: $email\n Treść:\n $message";
  10. $headers = 'MIME-Version: 1.0' . "\r\n";
  11. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  12. $headers .= 'From: Adres strony <adres@email>' . "\r\n";
  13. $headers .= 'Reply-To: '. $_POST['email'] . "\r\n";
  14. // Check if name has been entered
  15. if (!$_POST['name']) {
  16. $errName = 'Uzupłenij to pole';
  17. }
  18.  
  19. // Check if email has been entered and is valid
  20. if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
  21. $errEmail = 'Wpisz poprawny adres email';
  22. }
  23.  
  24. //Check if message has been entered
  25. if (!$_POST['message']) {
  26. $errMessage = 'Wpisz treść wiadomości';
  27. }
  28. //Check if simple anti-bot test is correct
  29. if ($human !== 15) {
  30. $errHuman = 'Wpisz poprawny wynik dodawania';
  31. }
  32.  
  33. // If there are no errors, send the email
  34. if (!$errName && !$errEmail && !$errMessage && !$errHuman) {
  35. if (mail ($to, $subject, $message, $headers)) {
  36. $result='<div class="alert alert-success">Dziękuję! Odpowiem w możliwie najkrótszym czasie</div>';
  37. } else {
  38. $result='<div class="alert alert-danger">Przepraszam nie udało się wysłać wiadomości! Sprawdź czy poprawnie wypełniłeś/aś formularz</div>';
  39. }
  40. }
  41. }
  42. ?>
kreatiff
Nieśmiało zaproponuję przerzucenie się na klasę phpmailer. Albo jakąś alternatywną.
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.