• 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
867 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ź 499 wizyt
0 głosów
1 odpowiedź 167 wizyt
pytanie zadane 27 lutego 2019 w JavaScript przez Anetka Początkujący (260 p.)
0 głosów
1 odpowiedź 165 wizyt
pytanie zadane 13 lutego 2019 w HTML i CSS przez Byczek_ Bywalec (2,570 p.)

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...