• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wysyłanie maili przez formularz kontaktowy przy pomocy PHP

0 głosów
300 wizyt
pytanie zadane 12 października 2017 w PHP, Symfony, Zend przez svyatogor92 Użytkownik (660 p.)
edycja 12 października 2017 przez svyatogor92

Witam, mam problem z wysyłaniem maili za pomocą php. Oto mój kod:

Formularz kontaktowy:
 

<form id="contact-form" method="POST" action="front-page.php">
   <div class="form-group">
      <label for="email">Email:</label>
      <input name="email" type="email" class="form-control" id="email">
   </div>
   <div class="form-group">
      <label for="subject">Temat:</label>
      <input name="subject" type="subject" class="form-control" id="subject">
   </div>
   <div class="form-group">
      <label for="message">Twoja wiadomość:</label>
      <textarea name="message" class="form-control" rows="8" id="message"></textarea>
   </div>
   <input id="submit" type="submit" class="btn btn-default" value="Wyślij wiadomość"></input>
</form>

PHP:

<?php
if (isset(isset($_POST['email']) && isset($_POST['subject'])) {
    $email = $_POST['email'];
    $subject = $_POST['subject'];
    $body = $_POST['message'];
    $to = 'xyz@gmail.com';

    //headers
    $headers = "From: <".$email.">\r\n";
    $headers .= "Reply-To: ".$email."\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset-utf-8";

    //send
    $send = mail($to, $subject, $body, $headers);
    if ($send) {
        echo '<br>';
        echo 'Thanks for contacting me. I will be with You shorty.';
    } else {
        echo 'error';
    }
}
?>

JS: 

// Form Validation ------------------------------------ //
    // Form is not valid on page load //
    var isFormValid = false;

    // input variables //
    var email = $('#email');
    var subject = $('#subject');
    var message = $('#message');
    var subtmitBtn = $('#submit');

    var form = $('#contact-form');

    var isEmailValid = function () {
        var emailVal = email.val();
        return emailVal.indexOf('@') > -1 && emailVal.length <= 100;
    };

    var isSubjectValid = function () {
        var subjectVal = subject.val();
        return subjectVal.length > 0 && subjectVal.length <= 100;
    };

    var isMessageValid = function () {
        var messageVal = message.val();
        return messageVal.length > 0 && messageVal.length <= 500;
    };

    function formValidation() {
        var isFormValid = isEmailValid() && isSubjectValid() && isMessageValid();

        if (isFormValid === false) {
            alert('Błąd. Proszę sprawdzić czy pola zostały poprawnie wypełnione. / Error. Please check all textareas.');
        } else {
            
            alert('Wiadomość została wysłana. / Succes. Message send.');
            form[0].reset();
        }
    };

    subtmitBtn.click(function(event) {
        event.preventDefault();
        formValidation();
    });

Podstawowa sprawa: Czy ta walidacja przez JS jest potrzebna w przypadku PHP? 
Po drugie jest to strona ONE PAGE na wordpressie i jak sami widzicie kod PHP umieszczam na front-page.php bo chce, aby po wysłaniu maila użytkownik pozostał na stronie głównej. 

Proszę o radę co robię nie tak.

2 odpowiedzi

0 głosów
odpowiedź 12 października 2017 przez Pietrak Pasjonat (19,050 p.)
To nie ma prawa działać. W JS wysyłasz zapytanie do formspree, a nie swojego kodu PHP.

Poza tym funkcja mail() jest upierdliwa i lepiej skorzystać z SMTP np. PHPMailer.

Czy formspree nie zrobić osobnej walidacji formularza w PHP, natomiast używając wysłania przez PHP przydałoby się jakieś walidowanie po stronie serwera, ponieważ JS zawsze można wyłączyć.

Walidacja po stronie JS to tylko aspekt użytkowania i jej wygoda.

On click zamiast on submit to zły pomysł. Formularz można wysłać też enterem.
komentarz 12 października 2017 przez svyatogor92 Użytkownik (660 p.)
Najmocniej przepraszam, zapomniałem usunąć przed zadaniem pytania. Oczywiście bez tego AJAXa to robiłem :)
Z formspree taka sprawa że działało, ale przestało, więc jestem zmuszony zrobić to php-em
komentarz 12 października 2017 przez Pietrak Pasjonat (19,050 p.)
Teraz też nie wysyłasz zapytania do PHP. Musisz wymusić wysłanie formularza albo wysłać go przez AJAX.
komentarz 13 października 2017 przez svyatogor92 Użytkownik (660 p.)
Chodzi o to, że muszę usunąć "event.preventDefault();" Aby PHP zadziałał?
komentarz 13 października 2017 przez Pietrak Pasjonat (19,050 p.)
Jak to usuniesz to wyłączysz walidację. Musisz dodać wysyłanie formularza np. this.submit(); lub użyć AJAX.
0 głosów
odpowiedź 13 października 2017 przez svyatogor92 Użytkownik (660 p.)
Ok poradziłem sobie.
- Trzeba było umieścić kod PHP w podstronie kontaktu, a w formularzu ustawić " action=' ' " jako puste.
- Z JS musiałem usunąć event.preventDefault(); bo wtedy po naciśnięciu nic się nie działo.
- A także przy form[0].reset(); występował problem, domyślam się, że chodzi o to, że przed uruchomieniem PHP mój formularz się czyścił i nie było co wysłać.

Dzięki za wskazówki!
komentarz 13 października 2017 przez Pietrak Pasjonat (19,050 p.)
Teraz nie działa Ci walidacja JS.

Podobne pytania

0 głosów
1 odpowiedź 52 wizyt
0 głosów
1 odpowiedź 69 wizyt
pytanie zadane 13 lutego w HTML i CSS przez Byczek_ Bywalec (2,540 p.)
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

63,340 zapytań

109,599 odpowiedzi

228,959 komentarzy

44,171 pasjonatów

Przeglądających: 206
Pasjonatów: 7 Gości: 199

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...