Uzupełnienie wszystkich Informacji

Witajcie, Mam takie pytanko do speców.
Jak w temacie niżej nakreśliłem mam sobie swój kodzik formularza kontaktowego. Ale pytanie, co mam jeszcze dodać aby wymagane było uzupełnienie wszystkich pól przed wysłaniem, ponieważ miałem problem ze spamerami którzy lecieli tylko po przycisku WYŚLIJ i dostawałem masę pustych wiadomości

Oto Kod

<?php
$field_name = $_POST['cf-name'];
$field_email = $_POST['cf-email'];
$field_message = $_POST['cf-message'];
$mail_to = 'mojmail@domena.pl';
$subject = 'Wiadomość z twojej strony internetowej od '.$field_name;
$body_message = 'Od: '.$field_name."\n";
$body_message .= 'E-mail: '.$field_email."\n";
$body_message .= 'Wiadomosc: '.$field_message;
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers = 'From: '.$mail_to."\r\n";
$headers .= 'Reply-To: '.$field_email."\r\n";
$mail_status = mail($mail_to, $subject, $body_message, $headers);
if ($mail_status) { ?>
<script language="javascript" type="text/javascript">
alert('Dziekujemy za Wiadomość, odezwiemy się niebawem.');
window.location = 'http://google.pl';
</script>
<?php
}
else { ?>
<script language="javascript" type="text/javascript">
alert('Błąd wysłania wiadomośći.');
window.location = 'http://google.pl';
</script>
<?php
}
?>

Natomiast w kodzie strony prezentuje się to tak

<form class=" bd-form-2 "
 action="contact.php"
 name="cf-form" method="post">
    <div class="bd-container-inner">
        <div class="container-fluid">
            <div class=" bd-input-2 form-group">
    <label class="bd-form-label">Imię</label>


<input type="text" class="bd-form-input"
 placeholder="Imie lub nazwa Firmy"
 name="cf-name" >

    
</div>
	
		<div class=" bd-input-5 form-group">
    <label class="bd-form-label">Email</label>


    <input type="text" class="bd-form-input"
 placeholder="Email"
 name="cf-email" >

    
</div>
	
		<div class=" bd-textarea-2 form-group">
    <label class="bd-form-label">Zapytanie</label>


<textarea class="bd-form-input"
 name="cf-message"
 placeholder="Wpisz Treść Zapytania"></textarea>

    
</div>
	
		<a 
 onclick="jQuery(this).closest('form').submit();" href="#" class="bd-linkbutton-14  bd-button-22  bd-own-        margins bd-content-element"    >
    Wyślij
</a>
        </div>
    </div>
</form>

Dodanie atrybutu required w inputach w html plus sprawdzenie w php czy podano wszystkie dane. Choćby głupim isset.
Warto byłoby też rozszerzyć całość o walidację poprawności wprowadzonych danych.

Dzięki za Odpowiedź, ale przyznam się wprost że cięzko u mnie z tym, byłbyś mi w stanie pomóc ?

<input type="text" required> Wystarczy ?

Czyli w tym przypadku

 <input type="text" required class="bd-form-input"
 placeholder="Email"
 name="cf-email" >

Nie, całości na pewno Ci nie napiszę. Mogę jedynie wskazać materiały z informacjami jakie będą Ci potrzebne. Chociaż na podstawie tego co Ci napisałem powinieneś już być w stanie szybko wygooglować sobie potrzebne informacje.

Tutaj masz required: https://www.w3schools.com/tags/att_input_required.asp
Podstawowa walidacja w HTML to określenie odpowiedniego typu inputa: https://www.w3schools.com/tags/att_input_type.asp ewentualnie jeśli to niezbędne zabawa z patternami: https://www.w3schools.com/tags/att_input_pattern.asp
Tyle jako minimum powinno wystarczyć. Walidację w JS na tym poziomie można pominąć.
Sprawdzanie w PHP czy formularz jest uzupełniony: https://www.w3schools.com/php/php_form_required.asp
Walidacja w PHP (też powinna być): https://www.w3schools.com/php/php_form_url_email.asp lub bardziej skomplikowany przykład https://www.w3schools.com/php/php_form_validation.asp

EDIT:
Najważniejsze jest sprawdzenie w PHP bo tego nie da się obejść. Required da się obejść więc nie na wszystkich spamerów to zadziała.

Dziękuje, Obije się o https://www.w3schools.com/php/php_form_required.asp

Powinno zadziałać

Spoko, jak coś to pisz. Chętnie pomagam, ale roboty za nikogo nigdy nie odwalam, no chyba że ma :dollar: :dollar: :dollar: :stuck_out_tongue:.

To oczywiste :stuck_out_tongue:

Powiedz mi jeszcze jak możesz, jak masz ciąg, w php

 if (empty($_POST["name"])) {
    $nameErr = "Name is required";
  } else {
    $name = test_input($_POST["name"]);
  }  

Z poradnika

To odpowiednio u mnie powinien wyglądać tak:

 if (empty($_POST["cf-name"])) {
    $nameErr = "Name is required";
  } else {
    $name = test_input($_POST["name"]);
  }  

A w Kodzie zamiast

<label class="bd-form-label">Imię</label>
        

    <input type="text" class="bd-form-input"
 placeholder="Imie lub nazwa Firmy"
 name="cf-name" >

Powinno być
Imię

    <input type="text" class="bd-form-input"
 placeholder="Imie lub nazwa Firmy"
 name="cf-name" >
<span class="error">* <?php echo $nameErr;?></span>

Dobrze kombinuje ?

oczywiście to przykład jednej tabeli

Jeśli formularz i jego obsługę masz w tym samym pliku czyli contact.php to tak, dobrze kombinujesz. Masz tylko 2 błędy. Pierwszy to musisz jeszcze tutaj zmienić nazwę:

$name = test_input($_POST["name"]);

Drugi to musisz napisać sobie funkcję test_input bo taka nie istnieje i jest ona tylko jako przykład. Przyczym jeśli nie chcesz walidować danych tylko sprawdzać czy są podane to możesz pro prostu zastąpić to czymś takim:

$field_name = $_POST["name"];

Tylko wcześniej utwórz zmienne bez wartości w taki sposób:

$field_name = '';
$field_email = '';
$field_message = '';

Sprawdź z łaski swojej teraz to w takim razie. Dziękuje

<?php
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["cf-name"])) {
    $nameErr = "Name is required";
  } else {
    $field_name = $_POST["cf-name"];
  }

  if (empty($_POST["cf-email"])) {
   $emailErr = "Email is required";
  } else {
    $field_name = $_POST["cf-email"];
  }


  if (empty($_POST["cf-message"])) {
    $comment = "";
  } else {
    $field_name = $_POST["cf-message"];
  }

}
$field_name = $_POST['cf-name'];
$field_email = $_POST['cf-email'];
$field_message = $_POST['cf-message'];
$mail_to = 'xxx@xxxs.pl';
$subject = 'Wiadomość z xxx.pl od '.$field_name;
$body_message = 'Od: '.$field_name."\n";
$body_message .= 'E-mail: '.$field_email."\n";
$body_message .= 'Wiadomosc: '.$field_message."Content-type: text/plain; charset=UTF-8";
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers = 'From: '.$mail_to."\r\n";
$headers .= 'Reply-To: '.$field_email."\r\n";
$mail_status = mail($mail_to, $subject, $body_message, $headers);
if ($mail_status) { ?>
<script language="javascript" type="text/javascript">
alert('Dziekujemy za Wiadomość, odezwiemy się niebawem.');
window.location = 'http://xxx.pl';
</script>
<?php
}
else { ?>
<script language="javascript" type="text/javascript">
alert('Błąd wysłania wiadomośći.');
window.location = 'http://xxx.pl';
</script>
<?php
}
?>

To już jest niepotrzebne bo wartości nadajesz w IFach

$field_name = $_POST['cf-name'];
$field_email = $_POST['cf-email'];
$field_message = $_POST['cf-message'];

Plus jeszcze przeniesienie kilku linijek do innego ifa i finalnie powinno być coś takiego:

<?php
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["cf-name"])) {
    $nameErr = "Name is required";
  } else {
    $field_name = $_POST["cf-name"];
  }

  if (empty($_POST["cf-email"])) {
   $emailErr = "Email is required";
  } else {
    $field_name = $_POST["cf-email"];
  }


  if (empty($_POST["cf-message"])) {
    $comment = "";
  } else {
    $field_name = $_POST["cf-message"];
  }
  
  $mail_to = 'xxx@xxxs.pl';
  $subject = 'Wiadomość z xxx.pl od '.$field_name;
  $body_message = 'Od: '.$field_name."\n";
  $body_message .= 'E-mail: '.$field_email."\n";
  $body_message .= 'Wiadomosc: '.$field_message."Content-type: text/plain; charset=UTF-8";
  $headers  = 'MIME-Version: 1.0' . "\r\n";
  $headers = 'From: '.$mail_to."\r\n";
  $headers .= 'Reply-To: '.$field_email."\r\n";
  $mail_status = mail($mail_to, $subject, $body_message, $headers);
  if ($mail_status) { ?>
  <script language="javascript" type="text/javascript">
  alert('Dziekujemy za Wiadomość, odezwiemy się niebawem.');
  window.location = 'http://xxx.pl';
  </script>
  <?php
  }

}
else { ?>
<script language="javascript" type="text/javascript">
alert('Błąd wysłania wiadomośći.');
window.location = 'http://xxx.pl';
</script>
<?php
}
?>

Przy czym jeśli to jest cały Twój plik i formularz trzymasz w innym pliku to możesz zrezygnować z podawania błędów bo ich nie używasz, w tedy sprawdzanie będzie wyglądało mniej więcej tak:

  if (!empty($_POST["cf-email"])) {
    $field_name = $_POST["cf-email"];
  }

No i musisz nadawać wartości odpowiednim zmiennym, a nie za każdym razem:

$field_name = $_POST["cf-name"];
$field_name = $_POST["cf-email"];
$field_name = $_POST["cf-message"];

To jest duży błąd.