Formularz zgłoszeniowy na stronie (JS, PHP)

0

Cześć, mam takie pytanko czy do zrobienia formularza zgłoszeniowego, który będzie przesyłał wypełniony formularz na maila, trzeba instalować jakieś dodatkowe rzeczy typu PHPMailer, albo importować inne biblioteki PHP?

Nie siedzę jeszcze zbyt mocno w back-endzie, więc wziąłem na szybko gotowca z yt i przerobiłem pod swoje wymagania, tylko jest problem taki, że przed jak i po przerobieniu ten formularz się nie wysyła.

<form action="../javascript/message.php">
     <div class="pole_form" id="polowa">
          <div class="pole">
               <input type="text" id="imie_lub_nick" name="nick">
               <label class="opis_form">Imię lub nick</label>
          </div>
     </div>
     <div class="pole_form" id="polowa">
          <div class="pole">
               <input type="text" id="e_mial" name="mail">
               <label class="opis_form">Adres e-mail</label>
          </div>
     </div>
     <div class="pole_form">
          <div class="pole">
               <input type="text" id="nazwa_ekipy_gupy" name="nazwa">
               <label class="opis_form">Nazwa twojej ekipy lub grupy społeczności</label>
          </div>
     </div>
     <div class="pole_form">
          <div class="pole">
               <input type="text" id="link_do_ekipy_gupy" name="link">
               <label class="opis_form">Link do grupy społecznościowej (opcjonalne)</label>
          </div>
     </div>
     <div class="pole_radio">
          <label class="opis_form">Średnia stała aktywność na kanale</label>
          <div class="radio_buttons">
               <div class="radio_box">
                    <input type="radio" id="10" name="10osob" value="10osob">
                    <label for="10">10 osób</label>
               </div>
               <div class="radio_box">
                    <input type="radio" id="15" name="15osob" value="15osob">
                    <label for="15">15 osób</label>
               </div>
               <div class="radio_box">
                    <input type="radio" id="20" name="20osob" value="20osób">
                    <label for="20">20 osób</label>
               </div>
               <div class="radio_box">
                    <input type="radio" id="pow20" name="pow20osob" value="pow20osób">
                    <label for="pow20">Powyżej 20 osób</label>
               </div>
          </div>
     </div>
     <div class="pole_form">
          <div class="pole">
               <input type="date" required pattern="\d{4}-\d{2}-\d{2}" name="data">
               <label class="opis_form">Wybierz datę rozmowy z administracją</label>
          </div>
     </div>
     <div class="pole_form">
          <div class="pole" id="wiadomość">
               <textarea name="wiadomosc"></textarea>
               <label class="opis_form">Dodatkowe inforamcje</label>
          </div>
     </div>
     <div class="button_form">
          <div class="button_space">
               <button type="submit" id="Polacz_z_serwerem_red">Wyślij</button>
               <span>Wysyłanie...</span>
          </div>
     </div>
</form>
const form = document.querySelector("form"),
statusTxt = form.querySelector(".button_form .button_space span");
form.onsubmit = (e)=>{
  e.preventDefault();
  statusTxt.style.color = "#000";
  statusTxt.style.display = "inline-block";
  statusTxt.innerText = "Wysyłanie...";
  let xhr = new XMLHttpRequest();
  xhr.open("POST", "https://zeucore.pl/javascript/message.php", true);
  xhr.onload = ()=>{
    if(xhr.readyState == 4 && xhr.status == 200){
      let response = xhr.response;
      if(response.indexOf("Wypełnij wymagane pola! 'Imię lub nick, e-mail, nazwa ekipy/grupy, data'") != -1 || response.indexOf("Podaj prawidłowy adres email!") != -1 || response.indexOf("Coś poszło nie tak, formularz nie został wysłany!") != -1){
        statusTxt.style.color = "#cc0000";
      }else{
        form.reset();
        setTimeout(()=>{
            statusTxt.style.display = "none";
        }, 3000);
      }
      statusTxt.innerText = response;
    }
  }
  let formData = new FormData(form);
  xhr.send(formData);
}
<?php
  $nick = htmlspecialchars($_POST['nick']);
  $mail = htmlspecialchars($_POST['mail']);
  $nazwa = htmlspecialchars($_POST['nazwa']);
  $link = htmlspecialchars($_POST['link']);
  $osob10 = htmlspecialchars($_POST['10osob']);
  $osob15 = htmlspecialchars($_POST['15osob']);
  $osob20 = htmlspecialchars($_POST['20osob']);
  $pow20osob = htmlspecialchars($_POST['pow20osob']);
  $data = htmlspecialchars($_POST['data']);
  $wiadomosc = htmlspecialchars($_POST['wiadomosc']);
  
  if(!empty($nick) && !empty($mail) && !empty($nazwa)){
    if(filter_var($mail, FILTER_VALIDATE_EMAIL)){
      $receiver = "[email protected]";
      $subject = "From: $nick <$mail>";
      $body = "Name: $nick\nEmail: $mail\nNazwa: $nazwa\nLink: $link\nŚrednia osób: $osob10 $osob15 $osob20 $pow20osob\nData: $data\n\nWiadomość: $wiadomosc";
      $sender = "From: $mail";
      if(mail($receiver, $subject, $body, $sender)){
         echo "Formularz został wysłany!";
      }else{
         echo "Coś poszło nie tak, formularz nie został wysłany!";
      }
    }else{
      echo "Podaj prawidłowy adres email!";
    }
  }else{
    echo "Wypełnij wymagane pola! 'Imię lub nick, e-mail, nazwa ekipy/grupy, data'";
  }
?>
2

Pierwsze to w form action masz link do strony jak ścieżka lokalna. Formularz przesyła dane po HTTP czyli musisz wskazać ścieżkę strony jakby była dostępna "z internetu".
Nie nie musisz instalować paczek typu PHPmailer ale one znacznie ułatwiają sprawę przy różnych ustawieniach.

1

Odpowiadaj w postach.
Masz w ogóle jakiś serwer który obsługuje PHP?
Daj ten plik do głównego katalogu strony i odwołuj się przez

<form action ="message.php">
0

Przeniosłem plik message.php i formularz.js do katalogu strony i dalej nic.
Jeśli chodzi o serwer to tak, posiadam z zainstalowanym php, które na pewno działa bo mam podłączonego ts3 php frameworka.
Formularz odnosi się do tej podstrony: https://zeucore.pl/teamspeak3/strefa-premium.php

1

Testowałem ten kod z pierwszego postu i wszystko działa.
Problem prawdopodobnie z połączeniem (lokalizacji) tych trzech plików.

0

Poprzepinałem ten skrypt na wszystkie możliwe sposoby, łączyłem w jeden, testowałem inne gotowce i dalej nic. Prawdopodobnie wina leży po stronie serwera, powinienem posiadać coś więcej oprócz PHP i odblokowanych portów 25 i 587?

2

A co dokładnie się dzieje? Otrzymujesz jakieś napisy na ekranie zgodne z działaniem skryptu o powodzeniu wysłania maila?
Dostajesz jakieś informacje o błędach?
Jak po tych wszystkich kodyfikacjach wygląda ten Twój skrypt?

0

Skrypt wygląda tak samo jak na początku w poście. Skrypt żadnych błędów nie wywala (tak samo konsola nic nie pokazuje console.log(response);) Ktoś wyżej testował ten skrypt i normalnie wszystko przychodziło. Wrzuciłem ten skrypt lokalnie do xampp'a i wywaliło errora o portach więc pomyślałem, że ten sam problem będzie na serwerze więc odblokowałem porty, ale dalej to samo.

http://i.imgur.com/O3hcaiX.png <- tak odblokowałem porty

1 użytkowników online, w tym zalogowanych: 0, gości: 1