• 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

VPS Starter Arubacloud
0 głosów
1,122 wizyt
pytanie zadane 12 października 2017 w PHP przez svyatogor92 Użytkownik (670 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 (18,850 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 (670 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 (18,850 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 (670 p.)
Chodzi o to, że muszę usunąć "event.preventDefault();" Aby PHP zadziałał?
komentarz 13 października 2017 przez Pietrak Pasjonat (18,850 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 (670 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 (18,850 p.)
Teraz nie działa Ci walidacja JS.

Podobne pytania

0 głosów
1 odpowiedź 805 wizyt
0 głosów
1 odpowiedź 191 wizyt
pytanie zadane 27 lutego 2019 w JavaScript przez Anetka Początkujący (260 p.)
0 głosów
1 odpowiedź 188 wizyt
pytanie zadane 13 lutego 2019 w HTML i CSS przez Byczek_ Bywalec (2,570 p.)

93,025 zapytań

141,990 odpowiedzi

321,293 komentarzy

62,374 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...