Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML] Problem z validacją danych w formularzu
Forum PHP.pl > Forum > Przedszkole
horn31
Witam,
Od trzech dni próbuję wstawić validację do formularza z mizernym skutkiem.
Chciałbym aby trzeba było podać poprawnego maila, i checkbox (zgoda na wysyłąnie sybskrypcji) aby był wymagany zaznaczony.
Starałem się kombinować z JavaScript i nie działało, php nie może być, zresztą strona jest w html i nie ma możliwości jego zmiany :-(

Kod daję czysty bo walidację jakich nie wstawiałem to nie było najmniejszej różnicy, nie wiem może użyć całkiem innego formularza?

  1. <p align="center"><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><center>Zapisz się by otrzymywać informację ...... </center></font></b><br>
  2.  
  3. </p><center>
  4. <form method=POST action=form2mail.php>
  5. <table width="500" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#000000">
  6. <tr>
  7. <td><table width="600" border="0" align="center" cellpadding="3" cellspacing="1">
  8. <tr bgcolor="#000000">
  9. </tr>
  10. <tr bgcolor="#000000">
  11. <td align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><br> Imię<font color="green" >*</font>: </font></td>
  12. <td align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
  13. <br> <input name="name" type="text" id="name">
  14. </font></td>
  15. </tr>
  16. <tr bgcolor="#000000">
  17. <td align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><br>Nazwisko<font color="green" >*</font>: </font></td>
  18. <td align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
  19. <br> <input name="nazwisko" type="text" id="nazwisko">
  20. </font></td>
  21. </tr>
  22. <tr bgcolor="#000000">
  23. <td align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><br> Adres e-mail<font color="green" >*</font>: </font></td>
  24. <td align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
  25. <br> <input name="email" type="text" id="email">
  26. </font></td>
  27. </tr>
  28. <tr bgcolor="#000000">
  29. <td align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><br> Zgadzam się na otrzymywanie <br>drogą e-mail informacji o nowościach <br> i promocjach w ofercie. </font></td>
  30. <td align="center">
  31. <font size="2" face="Verdana, Arial, Helvetica, sans-serif">
  32. <br> <input name="zgoda" type="checkbox" id="zgoda" value="Tak">
  33. TAK<font color="green" >*</font></td>
  34. </tr>
  35. <tr bgcolor="#000000">
  36. <td align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">dodatkowe:</font></td>
  37. <td align="left"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
  38. <textarea name="motocykl" cols="40" rows="6" id="motocykl"></textarea>
  39. </font></td>
  40. </tr>
  41. <tr bgcolor="#000000">
  42. <br> <br> <td colspan="2" align="center"><center><br><input type="submit" name="Submit" value="Wyślij"></td>
  43. </tr> <br> <br> <br>
  44.  
  45. </table>

amii
Formularz nie ma nic do tego. Czemu tu nie wrzucasz ciapków -> <form method="POST" action="form2mail.php">
Jak chcesz robić walidację w JS to napisz sobie funkcję a następnie ją podepnij pod zdarzenie onsubmit formularza jeśli dane są ok to zwracasz true w przeciwnym wypadku false
horn31
Wstawiłem w HEAD:
  1. <script type="text/javascript">
  2. <!--
  3.  
  4.  
  5. function email_validate(src)
  6. {
  7. var reg = /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
  8. return reg.test(src);
  9. }
  10.  
  11. // -->
  12. </script>



Następnie:
  1. <form method=POST action=form2mail.php onsubmit="if(email_validate('mail@mail.pl')){submit();}">

  1. <td colspan="2" align="center"><center><br><input type="button" name="Submit" value="Wyślij">
  2. <input type="submit" id="sprawdz" onclick="if(email_validate('mail@mail.pl')){submit();}">


Wstawiłem nawet dwa przyciski aby sprawdzić i nich z tego, wklejałem to wszędzie i pisałem onclick oraz onsubmit różne kombinacje :-(
amii
Co to za dziwne kombinacje. Dajesz:
onsubmit="email_validate(document.getElementById('email').value)"
horn31
Dobra zmieniłem na to co podałeś :-)
Poniżej jak to wygląda w sekcji head:
  1. <script type="text/javascript">
  2. <!--
  3. function email_validate(src)
  4. {
  5. var reg = /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
  6. return reg.test(src);
  7. }
  8.  
  9. // -->
  10. </script>


Oraz poniżej (niestety nic się nie dzieje jak jest type: button i onclick a gdy jest submit i onsubmit to poprostu wysyla maila nawet puste pole):
  1. <form method=POST action=form2mail.php onclick="email_validate(document.getElementById('email').value)">
  2. <table width="500" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#000000">
  3. <tr>
  4. <td><table width="600" border="0" align="center" cellpadding="3" cellspacing="1">
  5. <tr bgcolor="#000000">
  6. <center>
  7. </tr>
  8. <tr bgcolor="#000000">
  9. <td align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><br> Imię<font color="green" >*</font>: </font></td>
  10. <td align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
  11. <br> <input name="name" type="text" id="name">
  12. </font></td>
  13. </tr>
  14. <tr bgcolor="#000000">
  15. <td align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><br>Nazwisko<font color="green" >*</font>: </font></td>
  16. <td align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
  17. <br> <input name="nazwisko" type="text" id="nazwisko">
  18. </font></td>
  19. </tr>
  20. <tr bgcolor="#000000">
  21. <td align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><br> Adres e-mail<font color="green" >*</font>: </font></td>
  22. <td align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
  23. <br> <input name="email" type="text" id="email">
  24. </font></td>
  25. </tr>
  26. <tr bgcolor="#000000">
  27. <td align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><br> Zgadzam się na otrzymywanie <br>drogą e-mail informacji. </font></td>
  28. <td align="center">
  29. <font size="2" face="Verdana, Arial, Helvetica, sans-serif">
  30. <br> <input name="zgoda" type="checkbox" id="zgoda" value="Tak">
  31. TAK<font color="green" >*</font></td>
  32. </tr>
  33. <tr bgcolor="#000000">
  34. <td align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Inne:</font></td>
  35. <td align="left"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
  36. <textarea name="inne" cols="40" rows="6" id="inne"></textarea>
  37. </font></td>
  38. </tr>
  39. <tr bgcolor="#000000">
  40. <br> <br> <td colspan="2" align="center"><center><br><input type="button" name="button" value="Wyślij">
  41.  
  42. </td>
  43. </tr> <br> <br> <br>
  44.  
  45. </table>
amii
Spróbuj:
[JAVASCRIPT] pobierz, plaintext
  1. <form method="POST" action="form2mail.php" onsubmit="return email_validate(document.getElementById('email').value);"
[JAVASCRIPT] pobierz, plaintext
DiH
Sprawdzanie jakichkolwiek danych wyłącznie przy pomocy JS i poleganie na ich prawidłowości, to delikatnie umując naiwność. Stwórz sobie nowy prosty formularz, bez setek zbędnych tagów, zwykły input i jeden checkbox zamknięte w form z action="post" i na tym próbuj.

Sprawdzić, czy adres e-mail jest poprawny powinieneś funkcją:
preg_match

Sprawdzenie, czy checkbox jest zaznaczony:
isset

np. if(isset($_POST['checkbox_name']) { //do... }

kudlatypawelek
Do validatcji po stronie klienta proponuję używać jquery.validate. Dodatkowo wypadałoby zaimplementować sprawdzanie pól po stronie serwera - tak jak radzi mój przedmówca.
horn31
Nie zajmuję się pisaniem witryn dlatego też niewiele rozumiem z poprzednich postów, zadowolę się komunikatem przy źle wypełnionym polu na maila oraz przy braku zaznaczenia checkboxa.
Działa już to że bez wpisanego poprawnie maila nie działa poprostu przycisk wyślij, można klikać i nic się nie dzieje ale gdy wpiszemy maila poprawnie to wysyła.
Prosiłbym o pomoc we wstawieniu alertu, tzn co dopisac w headzie, próbowałem coś wyszukać ale źle wstawiam to na pewno.
Oraz o pomoc gdzie wstawić if(isset($_POST['checkbox_name']) { //do... }
Wstawiłem już:
  1. <script type="text/javascript">
  2. <!--
  3.  
  4.  
  5. function email_validate(src)
  6. {
  7. var reg = /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
  8. return reg.test(src);
  9. }
  10.  
  11. // -->
  12. </script>

oraz:
  1. <form method="POST" action="form2mail.php" onsubmit="return email_validate(document.getElementById('email').value);"


P.S. Jestem wdzięczny że jeszcze nikt mnie nie "zmasakrował" za stan wiedzy....
Pozdrawiam, i dziękuję bo jest już krok do przodu, dzięki Wam
DiH
Tyle, że ja pisałem o PHP, a ty piszesz w JavaScripcie. Kolega powyżej dobrze doradził Ci jQuery, bo po prostu oszczędzi ci to wiele pracy i frustracji. Jak nie teraz, to kiedyś. Jeżeli w head dodasz:
<script src="http://code.jquery.com/jquery-1.6.1.min.js" type="text/javascript"></script>
to spradzenie checkboxa będzie mogło wyglądać np. tak:
Kod
var isChecked = $('#checkBox').attr('checked');
if(isChecked != 'checked') {
  // do...
}

Alert możesz stosować dla siebie, przy testowaniu, natomiast publikując już stronę lepiej byłoby ten komunikat wyświetlić nad formularzem. Przed twoim <form> dodaj np. <div id="msg"></div> a wtedy //do... zamień na:
Kod
$("#msg").text("Proszę zaznaczyć... bla bla");
horn31
Niestety wstawiłem ale nic się nie dzieje, przypuszczam że sporo błędów ma sam szablon strony. Problem w tym że niewiele można w nim zmienić czy go też pokazać na forum, nie należy do mnie....
Wstawiłem też to do heada: <script src="http://code.jquery.com/jquery-1.6.1.min.js" type="text/javascript"></script>
Wstawiłem do head:
  1. var isChecked = $('#checkBox').attr('checked');
  2. if(isChecked != 'checked') {
  3. $("#msg").text("Proszę zaznaczyć... bla bla");
  4. }
  5.  

I przed form jest:
<div id="msg"></div>
Niestety nic sie nie dzieje jak jest email to wysyła wiadomość a jak nie ma to nic sie nie dzieje

Co dopisać do kodu z emaila aby pojawial sie nad komentarzem napis, coś jak do checkboxa, rzeczywiście jest to ciekawe rozwiązanie.
Niestety jestem zbyt toporny jak widac nie jestem w stanie samemu tego zrobic.
DiH
Kod, który ja napisałem to JS, a więc musisz go wrzucić pomiędzy <script type="text/javascript"></script>
Rid
Cytat
Wstawiłem też to do heada: <script src="http://code.jquery.com/jquery-1.6.1.min.js" type="text/javascript"></script>

Niech Pan ściągnie tą bibliotekę ze strony http://code.jquery.com/jquery-1.6.1.min.js i wklei
do folderu gdzie znajduje się Pana stronka/projekt.
Następnie :
<script src="http://code.jquery.com/jquery-1.6.1.min.js" type="text/javascript">
zmienić na:
<script src="c:/mójFolderStrony/jquery-1.6.1.min.js" type="text/javascript">
DiH
Jeżeli testuje to będąc podłączonym do internetu, to co za różnica? Jedynie w czasie dostępu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.