Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][PHP] Problem z wysyłką maila z formularza
PROGer
post
Post #1





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 30.04.2015

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


Dostaję komunikat iż wiadomość została wysłana poprawnie, ale ta nie dociera na skrzynkę pocztową:

index.php (fragment)
  1. <div class="row">
  2. <div class="col-sm-6 col-sm-offset-3">
  3. <form id="contact-form" role="form" action="php/contact_me.php">
  4. <div class="ajax-hidden">
  5. <div class="form-group wow fadeInUp">
  6. <label class="sr-only" for="c_name">Name</label>
  7. <input type="text" id="c_name" class="form-control" name="c_name" placeholder="Imię i nazwisko">
  8. </div>
  9.  
  10. <div class="form-group wow fadeInUp" data-wow-delay=".1s">
  11. <label class="sr-only" for="c_email">Email</label>
  12. <input type="email" id="c_email" class="form-control" name="c_email" placeholder="E-mail">
  13. </div>
  14.  
  15. <div class="form-group wow fadeInUp" data-wow-delay=".2s">
  16. <textarea class="form-control" id="c_message" name="c_message" rows="7" placeholder="Wiadomość ..."></textarea>
  17. </div>
  18.  
  19. <button type="submit" class="btn btn-lg btn-block wow fadeInUp" data-wow-delay=".3s">WYŚLIJ WIADOMOŚĆ</button>
  20. </div>
  21. <div class="ajax-response"></div>
  22. </form>
  23.  
  24. </div>
  25.  
  26. </div>



js (fragment)
  1. $('#contact-form').submit(function(e) {
  2.  
  3. e.preventDefault();
  4.  
  5. var c_name = $('#c_name').val();
  6. var c_email = $('#c_email').val();
  7. var c_message = $('#c_message ').val();
  8. var response = $('#contact-form .ajax-response');
  9.  
  10. if (( c_name== '' || c_email == '' || c_message == '') || (!isValidEmailAddress(c_email) )) {
  11. response.fadeIn(500);
  12. response.html('<i class="fa fa-warning"></i> Proszę wypełnić wszystkie pola formularza.');
  13. }
  14.  
  15. else {
  16. $('#contact-form .ajax-hidden').fadeOut(500);
  17. response.html("Wiadomość została wysłana. Odpowiem najszybciej jak to możliwe. Dziekuję za zainteresowanie ofertą.").fadeIn(500);
  18. }
  19. return false;
  20. });


contact_me.php
  1. <?php
  2.  
  3. if(empty($_POST['c_name']) ||
  4. empty($_POST['c_email']) ||
  5. empty($_POST['c_message']) ||
  6. !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
  7. {
  8. echo "Wysłanie wiadomości nie powiodło się! Proszę o kontakt bezpośredni na adres email: kontakt@xxx.pl.";
  9. sleep(10);
  10. return false;
  11. }
  12.  
  13. $c_name = $_POST['c_name'];
  14. $c_email = $_POST['c_email'];
  15. $c_message = $_POST['c_message'];
  16.  
  17. // create email body and send it
  18. $to = 'kontakt@xxx.pl'; // put your email
  19. $email_subject = "xxx: $c_name";
  20. $email_body = "$c_message";
  21.  
  22. $headers = "From: $c_email\n";
  23. $headers .="Content-type: text/html; charset=utf-8";
  24. $headers .= "Reply-To: $c_email";
  25.  
  26. mail($to,$email_subject,$email_body,$headers);
  27. header("Location: /");
  28. return true;
  29.  
  30.  
  31. ?>


Od rana nad tym siedzę i nie mogę zlokalizowac błędu wacko.gif

Prośba o wsparcie smile.gif

Ten post edytował PROGer 4.07.2015, 16:40:05
Go to the top of the page
+Quote Post
kapslokk
post
Post #2





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Rozumiem, że w $to jest podany inny email niż teraz? ;D

Z jakiego serwera korzystasz? Na pewno działa tam mail()? Może warto skorzystać z jakiegoś PHPMailera etc ?
Go to the top of the page
+Quote Post
PROGer
post
Post #3





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 30.04.2015

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


emaile podmieniłem teraz na potrzeby przedstawienia problemu na forum smile.gif uciekło mi tam .pl w przykładzie

hekko.pl oni działają na Roundcube Funkcja działa bo na innej stronie korzystam z tego skryptu. Z tym że w tamtym przypadku od razu po wysłaniu maila mam przekierowanie na stronę głównąi tyle. Tu natomiast chciałbym aby po wysłaniu maila pojawił się komunikat iż został on wysłany więc wprowadziłem js. Ale mail nie dociera na skrzynkę.
Do pliku js wchodzę na pewno bo pojawia się komunikat o wysłaniu maila, ale nie jestem pewny czy wchodzę do contact_me pomimo zrobienia action="php/contact_me.php
Jeśli w pliku contact_me powstawiam echo, nic nie drukuje. Jeśli mam rację do dlaczego z index.php nie wchodzę ostatecznie do contact_me.php?

Ten post edytował PROGer 4.07.2015, 16:42:37
Go to the top of the page
+Quote Post
kapslokk
post
Post #4





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Czyli problem rozwiązany, czy nadal maile nie dochodzą?

@edit
Dopiero teraz zauważyłem, że tak naprawdę Twój formularz się w ogóle nie wysyła. Masz e.preventDefault() i return false.

Spróbuj:
  1. $('#contact-form').submit(function(e) {
  2.  
  3. e.preventDefault();
  4.  
  5. var c_name = $('#c_name').val();
  6. var c_email = $('#c_email').val();
  7. var c_message = $('#c_message ').val();
  8. var response = $('#contact-form .ajax-response');
  9.  
  10. if (( c_name== '' || c_email == '' || c_message == '') || (!isValidEmailAddress(c_email) )) {
  11. response.fadeIn(500);
  12. response.html('<i class="fa fa-warning"></i> Proszę wypełnić wszystkie pola formularza.');
  13. }
  14.  
  15. else {
  16. $.ajax({
  17. type: "POST",
  18. data: {
  19. c_name: c_name,
  20. c_email: c_email,
  21. c_message: c_message
  22. },
  23. url: "php/contact_me.php",
  24. success: function(){
  25. $('#contact-form .ajax-hidden').fadeOut(500);
  26. response.html("Wiadomość została wysłana. Odpowiem najszybciej jak to możliwe. Dziekuję za zainteresowanie ofertą.").fadeIn(500);
  27. }
  28. })
  29.  
  30. }
  31. return false;
  32. });


Ten post edytował kapslokk 4.07.2015, 16:48:24
Go to the top of the page
+Quote Post
trueblue
post
Post #5





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Plik php nie jest w ogóle wywoływany.


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





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 30.04.2015

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


Tak podejrzewałem (napisałem to powyżej). Natomiast nie jeste w stanie stwierdzić dlaczego. To:

  1. <form id="contact-form" role="form" action="php/contact_me.php">


nie załatwia sprawy? Jeśli nie to gdzie fo mam wywołać i w jaki sposób?

Ten post edytował PROGer 4.07.2015, 16:46:05
Go to the top of the page
+Quote Post
kapslokk
post
Post #7





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Nie załatwia sprawy, bo masz e.preventDefault().
Wyżej w poście podałem nowy javascript, który powinien działać smile.gif
Go to the top of the page
+Quote Post
PROGer
post
Post #8





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 30.04.2015

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


kapslokk po podmianie twojego javascriptu, jak wywołuje akcję "wyślij wiadomość" na formularzu. Nic się nie dzieje - brak jakiejkolwiek reakcji, nie wyświetla się nawet informacja o wysłaniu wiadomości.

Ten post edytował PROGer 4.07.2015, 17:01:27
Go to the top of the page
+Quote Post
Fred1485
post
Post #9





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

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


W konsoli jakie błędy dostajesz?


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
PROGer
post
Post #10





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 30.04.2015

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


Na żywo to sprawdzam.

Mam taką strukturę katalogów na serwerze:

../public_html/assets/php/contact_me.php

Jak poprawię ścieżkę w taki sposób:
url: "assets/php/contact_me.php",

to po wywołaniu akcji wyśli na formularzu i upływie 5-9 sekund mam info że wiadomość została wysłana, ale ta nadal nie dociera na skrzynkę.

EDIY:
W pliku contact_me.php mam ustawionego sleepa na 10 sekund stąd to opóźnienie o którym pisałem powyżej:

  1. if(empty($_POST['c_name']) ||
  2. empty($_POST['c_email']) ||
  3. empty($_POST['c_message']) ||
  4. !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
  5. {
  6. echo "Wysłanie wiadomości nie powiodło się! Proszę o kontakt bezpośredni na adres email: kontakt@xxx.pl.";
  7. sleep(10);
  8. return false;
  9. }

Kiedy wywaliłem sleep`a formularz od razu wyświetla mi info że wiadomość została wysłana. Morał z tego taki że występuje poprawne przekierowanie na plik contact_me.php ale wartości w POST są puste, a za to powinien odpowiadać ten kawałek kodu w pliku js:
  1. data: {
  2. c_name: c_name,
  3. c_email: c_email,
  4. c_message: c_message
  5. },


EDIT:

znalazłem literówkę w contact_me.php która widać nawet w przytoczonym wyżej fragmencie kodu:

zamiast:
  1. !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))


powinno być:

  1. !filter_var($_POST['c_email'],FILTER_VALIDATE_EMAIL))


dzięki za pomoc, w szczególności kapslokk smile.gif

Ten post edytował PROGer 4.07.2015, 18:15:16
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 Aktualny czas: 21.08.2025 - 23:33