Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP] Nie działa contact-form
Forum PHP.pl > Forum > Przedszkole
TomaszEkk
Dzień dobry,

Tworzę prostą stronę wizytówkę na własne potrzeby, pobrałem prosty szablon html i sobie go przerabiam. Utknąłem na formularzu kontaktowym. Otóż dostaję maila na zdefiniowany adres ale po 1. jest on pusty, po 2. wpada do spamu(pewnie przez dziwną zawartosc), 3. nie ma nadawcy. Jeśli byłby ktoś tak dobry i poprawił mnie w tym co robię:

  1. <h4>Kontakt</h4>
  2. <div class="status alert alert-success" style="display: none"></div>
  3.  
  4. <form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php">
  5. <div class="row-fluid">
  6. <div class="span5">
  7. <label>Imię</label>
  8. <input type="text" class="input-block-level" required="required" placeholder="Twoje imię">
  9. <label>Nazwisko</label>
  10. <input type="text" class="input-block-level" required="required" placeholder="Twoje nazwisko">
  11. <label>Adres e-mail</label>
  12. <input type="text" class="input-block-level" required="required" placeholder="Twój adres e-mail">
  13. </div>
  14. <div class="span7">
  15. <label>Treść wiadomości:</label>
  16. <textarea name="message" id="message" required="required" class="input-block-level" rows="8"></textarea>
  17. </div>
  18.  
  19. </div>
  20. <button type="submit" class="btn btn-primary btn-large pull-right">Wyślij wiadomość</button>
  21. <p> </p>
  22.  
  23. </form>
  24. </div>


Zawartość pliki sendemail.php:
  1. <?php
  2. header('Content-type: application/json');
  3. $status = array(
  4. 'type'=>'success',
  5. 'message'=>'Wiadomość wysłana!'
  6. );
  7.  
  8. $name = @trim(stripslashes($_POST['name']));
  9. $email = @trim(stripslashes($_POST['email']));
  10. $subject = @trim(stripslashes($_POST['subject']));
  11. $message = @trim(stripslashes($_POST['message']));
  12.  
  13. $email_from = $email;
  14. $email_to = 'info@mojadomena.pl';
  15.  
  16. $body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message;
  17.  
  18. $success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>');
  19.  
  20. echo json_encode($status);
  21. die;


Chciałbym dostać po prostu maila z zawartością i to wszystko. Mail info@mojadomena.pl oczywiście istnieje na serwerze.
viking
Nie masz nigdzie w inputach atrybutu name (oprócz textarea) zatem jak się chcesz do nich odwołać? Mają być nazwy takie same jak w POST. Status powinien być określony na podstawie $success bo może zwrócić false jeśli nie wysłano maila.
TomaszEkk
Poprawiłem w ten sposób jednak dalej pusty mail:

  1. <form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php">
  2. <div class="row-fluid">
  3. <div class="span5">
  4. <label>Imię</label>
  5. <input type="text" name="name" id="name" class="input-block-level" required="required" placeholder="Twoje imię">
  6. <label>Temat</label>
  7. <input type="text" name="subject" id="subject" class="input-block-level" required="required" placeholder="Temat wiadomości">
  8. <label>Adres e-mail</label>
  9. <input type="text" name="email" id="email" class="input-block-level" required="required" placeholder="Twój adres e-mail">
  10. </div>
  11. <div class="span7">
  12. <label>Treść wiadomości:</label>
  13. <textarea name="message" id="message" required="required" class="input-block-level" rows="8"></textarea>
  14. </div>
  15.  
  16. </div>
  17. <button type="submit" class="btn btn-primary btn-large pull-right">Wyślij wiadomość</button>
  18. <p> </p>
  19.  
  20. </form>


Mam jeszcze katalog js a w nim parę plików ale nie widzę tu nigdzie odwołań do nich eh.
viking
Na pewno jeśli poprawiłeś $body powinno zawierać treść. Pewnie gdzieś indziej jest problem.
TomaszEkk
Cytat(viking @ 1.12.2016, 09:19:40 ) *
Na pewno jeśli poprawiłeś $body powinno zawierać treść. Pewnie gdzieś indziej jest problem.


Właśnie tego $body nie poprawiłem.. wygląda to tak:
  1. <?php
  2. header('Content-type: application/json');
  3. $status = array(
  4. 'type'=>'success',
  5. 'message'=>'Wiadomość wysłana!'
  6. );
  7.  
  8. $name = @trim(stripslashes($_POST['name']));
  9. $subject = @trim(stripslashes($_POST['subject']));
  10. $email = @trim(stripslashes($_POST['email']));
  11. $message = @trim(stripslashes($_POST['message']));
  12.  
  13. $email_from = $email;
  14. $email_to = 'xys.sikora@gmail.com';
  15.  
  16. $body = 'Imię: ' . $name . "\n\n" . 'E-mail: ' . $email . "\n\n" . 'Temat: ' . $subject . "\n\n" . 'Treść wiadomości: ' . $message;
  17.  
  18. $success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>');
  19.  
  20. echo json_encode($status);
  21. die;


W tym pliku poza zmianami wyswietlanych informacji nic nie zmieniałem.. Już jestem coraz bliżej snitch.gif
emstawicki
Próbowałeś prześledzić skrypt dumpując na poczatku wszystkie zmienne z tablicy POST, a następnie po przypisaniu?
Co to znaczy dziwną zawartość? - może po prostu dodaj nagłówek definiujący content-type.
TomaszEkk
Problem chyba leży w ajaxie. Znalazłem jakaś modyfikację:
  1. //Ajax contact
  2. $('.contact-form').submit(function () {'use strict',
  3. $this = $(this);
  4. $.post("sendemail.php", $(".contact-form").serialize(),function(result){
  5. if(result.type == 'success'){
  6. $this.prev().text(result.message).fadeIn().delay(3000).fadeOut();
  7. }
  8. });
  9. return false;
  10. });


i to wysyła mi dalej bez nadawcy, wszystkie pola puste poza wiadomością. Treść wiadomości jest już widoczna. Raczej zdecyduję się na odpłatną pomoc.
Niree
Usuń ten kod JS, przecież formularz możesz wysłać zwykłym <form>.
emstawicki
  1. $headers = 'MIME-Version: 1.0' . "\r\n";
  2. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  3. $headers .= 'From: Automat <xys.sikora@gmail.com>' . "\r\n";
  4. $success = @mail($email_to, $subject, $body, $headers );


Edytuj to w ten sposób i sprawdź.
Mam nadzieję, że jesteś świadomy że wysyłasz tak naprawdę z konta serwera http ze swojego hostingu a nie z gmaila - to tak odnośnie traktowania wiadomości jako spam - podszywasz się pod konto na nieswojej domenie smile.gif
TomaszEkk
Cytat(emstawicki @ 1.12.2016, 13:31:01 ) *
  1. $headers = 'MIME-Version: 1.0' . "\r\n";
  2. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  3. $headers .= 'From: Automat <@gmail.com>' . "\r\n";
  4. $success = @mail($email_to, $subject, $body, $headers );


Edytuj to w ten sposób i sprawdź.
Mam nadzieję, że jesteś świadomy że wysyłasz tak naprawdę z konta serwera http ze swojego hostingu a nie z gmaila - to tak odnośnie traktowania wiadomości jako spam - podszywasz się pod konto na nieswojej domenie smile.gif


Niestety nic to nie dało, brakuje mi wiedzy i czasu żeby nad tym siedzieć. Jeśli ostatecznie zdecyduję się na ten szablon html to wtedy przeróbka odpłatnie..
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.