Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Modyfikowalny formularz + przekazywanie danych
Forum PHP.pl > Forum > Przedszkole
Viroch
Witam!

Potrzebuję zrobić formularz, którego pola (a w zasadzie ich ilość) będą się zmieniać w zależności od potrzeb.

Przykładowo:
Mam pierwszą pozycję - gatunek muzyczny - pole input gatunek_0
Do tego podpozycja - zespól muzyczny - pole input zespol_0_1
I trzecia - piosenka - pole input piosenka_0_0_1.

Zależność jest odgórna tj. pole piosenka jest przypisane do zespół, a ten z kolei do gatunku.

I teraz np wpisuje 1 piosenkę, a chciałbym więcej. Robię button/link opcję dodaj piosenke. Chodzi o to, żeby teraz wygenerowac formularz który zapamięta te dane które już wpisałem i doda mi w formularzu pole (w tym wypadku) piosenka_0_0_2.
Podobna możliwość ma być do podpozycji 2 - tutaj zespół.
Po wybraniu opcji powiedzmy dodaj gatunek powinno mi zostać to co do tej pory wpisałem i utworzyć się kolejny "rząd" pozycji - pola input: gatunek_1, zespol_1_1, piosenka_1_1_1.

Mam nadzieję, że jest to zrozumiałe. Potrzebuje to zrobić w php a nie w JS, gdyż opcji takich może być w zasadzie nieskończenie wiele i robienie ukrytych pól (warstw) w JS byłoby bez sensu.

Myślałem o wykorzystywaniu $_SESSION i rejestrowaniu do nich zmiennych z formularza $_POST. Ale coś nie mogę tego ogarnąć.
Z góry dzięki za pomoc.
Kshyhoo
W zeszłym tygodniu było na forum. Użyj wyszukiwarki.
zbig13
po co od razu sesje? tworzysz zwykly formularz z jednym inputem typu text (liczba piosenek) do tego button wysylajacy. Na stronie ze skryptem umieszczasz cos takiego:
  1. <?php
  2.  
  3. if (!isset($_POST['liczba_piosenek'])) {
  4. $liczba_piosenek = 1;
  5. } else {
  6. $liczba_piosenek = $_POST['liczba_piosenek'];
  7. }
  8. for ($i=0; $i<$liczba_piosenek; $i++) {
  9. /* Wyświetlanie wyników */
  10. }
  11.  
  12. ?>
Viroch
@Kshyhoo - szukałem, szukałem ale nic nie znalazłem...

@zbig13 - no teoretycznie tak, ale jak mam np 8 gatunków w każdym powiedzmy po 3 zespoły i po 5 piosenek, to musiałbym do każdego robić "liczba_piosenek_nrgatunku_nrzespolu" etc.

Nie wiem, być może to jest rozwiązanie... ale dalej nie bardzo wiem jak to zrobić.
Czy robić pola <input type=hidden> z wartością dla każdej liczby pozycji?
No i największy problem, to opcja dodawania poszczególnych pozycji np. dodawanie zespołu do gatunku 1 - czyli submit i np przekazanie zmiennej - dodaj kolejną pozycje do zespołu nr 2 w gatunku 1. Ale to już chyba jakiś button i funkcją JavaScript by trzeba.
Kshyhoo
A ja znalazłem, było to w niedzielę, dwa dni temu TU
Viroch
To rozwiązanie coś nie bardzo mnie przekonywało.

Udało mi się to jednak stworzyć. Tylko mam problem jak to poukładać w tabelkach, żeby 2 poziom w tym wypadku stanowisko zaczynał sie od nowego <tr>. Próbowałem jakoś z rowspan w 1 poziomie ale tak się to dziwnie zapętla.

Podaje kod tego co do tej pory "zdziałałem":
  1. <? 
  2. $pracodawcy=$_POST['liczba_pracodawcow'];
  3. if($_GET['add']=='praco')
  4. {
  5.   $pracodawcy++;
  6. }
  7.  
  8. if($_GET['add']=='stanowisko')
  9. {
  10.   $_POST['liczba_stanowisk_'.$_GET['poz']]++;
  11. }
  12.  
  13. if($_GET['add']=='zadanie')
  14. {
  15.   $_POST['liczba_zadan_'.$_GET['prac_poz'].'_'.$_GET['poz']]++;
  16. }
  17. echo(&#092;"
  18. <script>
  19. function praco(ktory)
  20. {
  21. document.sender.action='?add=praco&poz='+ktory;
  22. document.sender.submit();
  23. }
  24.  
  25. function stan(ktory)
  26. {
  27. document.sender.action='?add=stanowisko&poz='+ktory;
  28. document.sender.submit();
  29. }
  30.  
  31. function zad(ktory,poziom)
  32. {
  33. document.sender.action='?add=zadanie&poz='+ktory+'&prac_poz='+poziom;
  34. document.sender.submit();
  35. }
  36. </script>
  37. \");
  38.  
  39. print \"<form name='sender' action='praco.php' method='post'>\";
  40. print \"<table width=800>\";
  41. for ($i=0; $i<=$pracodawcy; $i++) {
  42.  
  43.   print \"<tr><td>\".$i.\" <input type='text' name='pracodawca_\".$i.\"' value='\".$_POST['pracodawca_'.$i].\"'>\";
  44.   if($i==$pracodawcy){ print \"<br /><a href='javascript:praco(\".$i.\")'>Dodaj pracodawcę</a><br />\"; }
  45.   print \"</td><td>\";
  46.  
  47.   for($j=0; $j<=$_POST['liczba_stanowisk_'.$i];$j++)
  48.   {
  49.    print \"&raquo; \".$i.\"_\".$j.\" <input type='text' name='stanowisko_\".$i.\"_\".$j.\"' value='\".$_POST['stanowisko_'.$i.'_'.$j].\"' /><br />\";
  50.    
  51.      for($s=0; $s<=$_POST['liczba_zadan_'.$i.'_'.$j]; $s++)
  52.      {
  53.        print \"&raquo; \".$i.\"_\".$j.\"_\".$s.\" <input type='text' name='zadanie_\".$i.\"_\".$j.\"_\".$s.\"' value='\".$_POST['zadanie_'.$i.'_'.$j.'_'.$s].\"' /><br />\";
  54.        if($s==$_POST['liczba_zadan_'.$i.'_'.$j])
  55.        {
  56.           print \"<a href='javascript:zad(\".$j.\",\".$i.\")'>Dodaj zadanie</a><br />\";
  57.        }
  58.      }
  59.      print \"<input type='hidden' name='liczba_zadan_\".$i.\"_\".$j.\"' value='\".$_POST['liczba_zadan_'.$i.'_'.$j].\"' />\";
  60.    
  61.    if($j==$_POST['liczba_stanowisk_'.$i])
  62.    {
  63.      print \"<a href='javascript:stan(\".$i.\")'>Dodaj stanowisko</a><br />\"
  64.    }
  65.    print \"</td><td>\";
  66.   }
  67.   print \"<input type='hidden' name='liczba_stanowisk_\".$i.\"' value='\".$_POST['liczba_stanowisk_'.$i].\"' />\";
  68.   
  69.   print \"</td></tr>\";
  70.   
  71. }
  72.  
  73. print \"</table><br />\";
  74. print \"<input type='hidden' name='liczba_pracodawcow' value='\".$pracodawcy.\"' />\";
  75. print \"<input type='submit' value='Wyślij' /></form>\";
  76. ?>
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.