Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] walidacja formularza
Forum PHP.pl > Forum > Przedszkole
ravenaot
Witam, mam ten oto skrypt, ktory sprawdza pole radio, ale tylko jedno. Jak moge dodac aby sprawdzało mi dodatkowe radio('pyt2') w formularzu i aby nie wyswietlalo zbednych dodatkowych okienek z błedem.
  1. <form name="formularz" id="formularz" method="post" action="pytania_6_10.php" onsubmit="validate(); return false;">
  2. <li class="likert"><input type="radio" name="pyt1" value="Zdecydowanie się nie zgadzam" />1
  3. <li class="likert"><input type="radio" name="pyt1" value="Nie zgadzam się" />2
  4. <li class="likert"><input type="radio" name="pyt1" value="Nie mam zdania" />3
  5. <li class="likert"><input type="radio" name="pyt1" value="Zgadzam się" />4
  6. <li class="likert"><input type="radio" name="pyt1" value="Zdecydowanie się zgadzam " />5
  7.  
  8. <li class="likert"><input type="radio" name="pyt2" value="Zdecydowanie się nie zgadzam" />1
  9. <li class="likert"><input type="radio" name="pyt2" value="Nie zgadzam się" />2
  10. <li class="likert"><input type="radio" name="pyt2" value="Nie mam zdania" />3
  11. <li class="likert"><input type="radio" name="pyt2" value="Zgadzam się" />4
  12. <li class="likert"><input type="radio" name="pyt2" value="Zdecydowanie się zgadzam " />5


  1. <script type="text/javascript">
  2.  
  3. function checkRadio(inputName) {
  4.  
  5. var obj = document.formularz[inputName];
  6. var len = obj.length;
  7.  
  8. for(var i=0; i<len; i++) {
  9.  
  10. if(obj[i].checked) return true;
  11. }
  12. alert('Uzupełnij pola');
  13. return false;
  14. }
  15. function validate(form) {
  16. var noerror = true;
  17. if(!checkRadio('pyt1')) { noerror = false; }
  18. if(noerror) {
  19. document.formularz.submit();
  20. }
  21. }
  22. </script>
_Borys_
  1. <!DOCTYPE HTML>
  2. <meta http-equiv="content-type" content="text/html" charset="utf-8"/>
  3. <script type="text/javascript">
  4. function checkRadio(inputName) {
  5. var obj = document.formularz[inputName];
  6. var len = obj.length;
  7. for(var i=0; i<len; i++) {
  8. if(obj[i].checked) return true;
  9. }
  10. document.getElementById('pepe').style.display = 'block';
  11. return false;
  12. }
  13. function validate(form) {
  14. var noerror = true;
  15. var radio = new Array('pyt1','pyt2');
  16. for(j=0;j<radio.length;j++){
  17. if(!checkRadio(radio[j])) { noerror = false; }
  18. }
  19. if(noerror) {
  20. document.formularz.submit();
  21. }
  22.  
  23. }
  24.  
  25. </script>
  26. </head>
  27.  
  28.  
  29. <form name="formularz" id="formularz" method="post" action="input_radio_validate.htm" onsubmit="validate(); return false;">
  30. <li class="likert"><input type="radio" name="pyt1" value="Zdecydowanie się nie zgadzam" />1</li>
  31. <li class="likert"><input type="radio" name="pyt1" value="Nie zgadzam się" />2</li>
  32. <li class="likert"><input type="radio" name="pyt1" value="Nie mam zdania" />3</li>
  33. <li class="likert"><input type="radio" name="pyt1" value="Zgadzam się" />4</li>
  34. <li class="likert"><input type="radio" name="pyt1" value="Zdecydowanie się zgadzam " />5</li>
  35. <li class="likert"><input type="radio" name="pyt2" value="Zdecydowanie się nie zgadzam" />1</li>
  36. <li class="likert"><input type="radio" name="pyt2" value="Nie zgadzam się" />2</li>
  37. <li class="likert"><input type="radio" name="pyt2" value="Nie mam zdania" />3</li>
  38. <li class="likert"><input type="radio" name="pyt2" value="Zgadzam się" />4</li>
  39. <li class="likert"><input type="radio" name="pyt2" value="Zdecydowanie się zgadzam " />5</li>
  40. <input type="submit" value="OK"/>
  41. </form>
  42. <p id="pepe" style="display: none;">Uzupełnij pola</p>
  43. </body>
  44. </html>
ravenaot
Waliduje super, ale nie dodaje zaś do bazy danych, zauwazyłem ze jak skasuje:; return false; z ponizszego kodu to dodaje do bazy danych, walidacja rowniez bedzie działac, ale wyswietli komunikat i od razu przejdzie do nastepnej strony czyli "pytania_6_10.php"

  1.  
  2. <form name="formularz" id="formularz" method="post" action="pytania_6_10.php" onsubmit="validate(); return false;">

  1. <form name="formularz" id="formularz" method="post" action="pytania_6_10.php" onsubmit="validate()">
_Borys_
return false; musi być bo w przeciwnym razie przerzuca na następną stronę już po zaznaczeniu jednego radio, jeśli jest false to przerzuci dopiero po zaznaczeniu obydwóch radio. A czemu nie wrzuca do bazy to nie wiem, może coś z zapytaniem do bazy nie tak.
W każdym razie u mnie działa, w $_POST widać kliknięte radia.
Pamiętaj że masz teraz w $_POST pyt1 i pyt2, i dostosuj do tego zapytanie do bazy.
ravenaot
To jest moje zapytania do bazy, zapytania działa bezbłednie bez javascriptu. Czy cos powiniene tutaj poprawic ?
  1. require_once('bazadanych.php');
  2. // Łączenie się z bazą danych.
  3. $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
  4.  
  5. if (isset($_POST['submit2'])) {
  6. // Pobieranie danych do profilu z żądania POST.
  7. $pyt1 = $_POST['pyt1'];
  8. $pyt2 = $_POST['pyt2'];
  9. $pole3 = $_POST['pole3'];
  10. $ip = $_SERVER['REMOTE_ADDR'];
  11.  
  12. $query = "INSERT INTO odpowiedzi VALUES ('$pole3','$pyt1','$pyt2','$ip')";
  13. mysqli_query($dbc, $query);
  14. mysqli_close($dbc);
  15.  
  16. }
_Borys_
Wygląda ok, sprawdź co ci zwraca $_POST, wpisz
  1. print_r($_POST);
  2. if (isset($_POST['submit2'])){
ravenaot
  1. Array ( [pyt1] => Zdecydowanie się nie zgadzam [pyt2] => Zdecydowanie się nie zgadzam [pole3] => 55 [submit2] => Dalej )



Zwraca taki komunikat
_Borys_
Może masz indeks w bazie i pole3 musi być niepowtarzalne;
Zobacz czy baza wywala błąd
  1. mysqli_query($dbc, $query) OR die(mysqli_error($dbc));
  2. mysqli_close($dbc);
ravenaot
'pole3' to pobieranie ID z sesji z poprzedniej strony i w bazie jest auto increment.

błędu nie wywala.
_Borys_
Tam gdzie masz auto increment to nie wstawiaj żadnej wartości tylko puste '' w insert
  1. $query = "INSERT INTO odpowiedzi VALUES ('','$pyt1','$pyt2','$ip')";

albo
  1. $query = "INSERT INTO odpowiedzi VALUES ('','$pole3','$pyt1','$pyt2','$ip')";

Nie wiem na czym masz auto increment.
Poza tym jak w ten sposób wstawiasz do bazy to ilość pól w VALUES musi się zgadzać z ilością wierszy w tabeli w bazie.
ravenaot
Tak wyglada moj insert do bazy
  1. CREATE TABLE odpowiedzi(
  2. id int NOT NULL AUTO_INCREMENT,
  3. pyt1 varchar( 50 ) NULL ,
  4. pyt2 varchar( 50 ) NULL ,
  5. ip varchar( 60 ) NOT NULL,
  6. PRIMARY KEY (`id`)
  7. );
  8.  
_Borys_
No to wstawiaj tak jak w tym pierwszym przykładzie post wyżej.
ravenaot
Tak własnie mam, dalej nie dodaje. Zastanawiam sie co moze byc jeszcze przyczyna?
_Borys_
U mnie nie zwraca submit2 w $_POST po poprawnej walidacji, pewnie dlatego,że submit jest wywoływany w javascript. Pomyślę nad tym jeszcze.
Na razie można w ten sposób
  1. if (!empty($_POST['pyt1']) && !empty($_POST['pyt2'])) {
ravenaot
Borys jesteś wielki, działa jak nalezy! Dzieki za pomoc, czy ten sposob jest wystarczajacy w pełni i nie potrzeba go modyfikować ?
_Borys_
No należałoby zabezpieczyć przed sql injection.
ravenaot
w przypadku pola tekstowego będzie podobnie ?
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.