a ridagli....

che il form possa inviare è un conto,
che l'invio venga eseguito dal server è un'altro.

in ogni caso il form invia:
quello che conta è cosa fai dopo il submit

i campi li rendi obbligatori dopo aver fatto un controllo alla ricezione.
se sono vuoti non invii. se sono incompleti riporti al form recuperando i dati già inseriti.
metti anche un controllo obbligatorio, e se tutto corrisponde invii

tutto col linguaggio dinamico da te scelto.

ogni soluzione JS è inutile

ovvio: tocca studiare