Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Dodatkowe pole formularza po wybraniu jednej opcji z innego formularza.
Forum PHP.pl > Forum > Przedszkole
NickOver
Siemka.
Potrzebuję jakąś magiczną sztuczke która po wybraniu w jednym formularzu wartości "inne" pokaże dodatkową komórke, bez przeładowania strony. Jest wogóle coś takiego możliwe? Jeśli jest to jakąś podpowiedz poprosze jak się za to zabrać wink.gif
ghost1511
Jest możliwe. Musisz w Javascript obsłużyć zdarzenie zaznaczenia checkboxa (czy innego pola) i dodać do formularza pole tekstowe.
NickOver
Właśnie w tym problem że to nie będzie checkbox tylko select. Wystarczy tam dac if'a $_POST['jezyk']=inne czy trzeba bardziej kombinowac?
Turson
java script: onchange
NickOver
  1. java script: onchange
jak znam angielski odnosi sie tylko do zmiany, a mi chodzi aby to się pojawiało tylko przy wartosci "inne" da radę to zrobić?
Turson
No tak, ale możesz wykryć jaka opcja jest wybrana i jeżeli wartość=="inne" to pokażesz dodatkowe pole
NickOver
Turson a chciało by Ci się napisać coś takiego? Niestety w js nie pisałem nic, w google jakoś mało o tym pisze, a Tobie pewnie zajmie to pół minutki wink.gif
Z góry dzięki wielkie biggrin.gif
Turson
http://jsfiddle.net/nkzfL/
NickOver
Niestety coś nie działa ;( Mogółby ktoś spojrzeć?
  1. <html>
  2. <head>
  3. <script
  4. type="text/javascript">
  5. $(document).ready(function(){
  6. $("#a").on('change', function(){
  7. if($(this).val()=="inne")
  8. $("#inne").show();
  9. else
  10. $("#inne").hide();
  11. })
  12. })
  13. </script>
  14. </head>
  15. </html>
  16. <?php
  17. include ('db.php');
  18. $a= $_SESSION['id'];
  19. $select=mysql_query("SELECT * FROM lang WHERE kto='$a'");
  20. echo '<table>';
  21. while($r = mysql_fetch_array($select))
  22. {
  23. echo '<tr><td>'.$r["jezyk"].'';
  24. echo '</td><td>'.$r["poziom"].'';
  25. echo '</td></tr>';
  26. }
  27. echo '</table>';
  28. echo '<form action="lang.php" method="POST">
  29. <select id="a" type="text" name="lang">
  30. <option>opcja 1</option>
  31. <option>inne</option>
  32. </select>
  33. <input name="lan" id="inne" style="display:none"><br>
  34. <select type="text" name="lvl">
  35. <option>podstawowy</option>
  36. <option>średni</option>
  37. <option>zaawansowany</option>
  38. </select>
  39. <input type="submit" name="ok" value="Wyślij!">
  40. </form>';
  41. if(isset($_POST['ok']))
  42. {
  43. $lang = trim($_POST['lang']);
  44. $lvl = trim($_POST['lvl']);
  45. $lan = trim($_POST['lan']);
  46. if(isset ($lan))
  47. {
  48. $lang = $lan;
  49. }
  50. $query = "INSERT INTO `lang` (`jezyk`, `poziom`, `kto`) VALUES ('$lang', '$lvl', '$a')";
  51. if(mysql_query($query))
  52. {
  53. echo 'Dodane!!';
  54. header("Location: lang.php");
  55. }
  56. else echo 'Wystąpił błąd';
  57. }
  58. ?>
Turson
Do <head> dokumentu musisz dołączyć bibliotekę jquery
b4rt3kk
Brakuje też dla option atrybutu value, czyli:

  1. <option value="inne">inne</option>
NickOver
Dzięki wielkie wink.gif
Jeszcze jedno i już chyba ostatnie pytanie. Gdy wybieram inne i coś wpisuję działa, przesyła się do bazy jako zmienna $lang,
lecz gdy to dodatkowe pole jest puste nie wysyła mi nic do bazy danych (znaczy wysyła, ale zamienia zmienna $lang na zmienna $lan, lecz ta zamiana miała nastąpić tylko w przypadku jeśli $lan nie jest puste) Gdzie popełniłem błąd?
b4rt3kk
W warunku isset, bo zmienna zostaje każdorazowo utworzona, w tej linii:

  1. $lan = trim($_POST['lan']);


I nie ma znaczenia, to że jest pusta, bo sprawdzasz jedynie czy istnieje. Zmień isset na empty.
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.