Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Odczyt danych z powielanego formularza
Forum PHP.pl > Forum > Przedszkole
Kloucek
Witam postaram się w miarę (jak na możliwości wtorkowego poranka) zrozumiale opisać problem

Mam formularz, który powiela się po wduszeniu przycisku. Nazwy poszczególnych pól zmieniają na zasadzie dodania kolejnego indeksu na końcu (prosty javascript). Jestem jeszcze dość zielony w php i nie do końca wiem jak odczytać wpisane dane.

Oczywiście manualne wpisywanie
Kod
print $team1;  
  print $team2;  
  print $team3;  
  ...  
  print $team(i tak do usranej śmierci);


byłoby zapewne głupie i da się to samo osiągnąć za pomocą jakiejś sprytnej pętelki. Dodałem w formularzy pole counter, które jest automatycznie zwiększane o 1 przy każdym dodaniu nowej lini formularza. Pierwsza linia będzie odczytywana zawsze ręcznie, ale reszta ma już indeksy na końcu. Mogę zrobić pętlę w następujący sposób:
Kod
for($i=1; $i<=$counter; $i++){
    print $team1[i];
    print $team2[i];
    print $channel[i];
    print $date[i];
    print $time[i];


Nie wiem tylko jak sprawić, aby ostatni znak stringa z nazwą zmiennej był traktowany jako indeks. I w tym drodzy forumowicze proszę was o pomoc!


formularz można sobie obejrzeć pod www.bartosz.dk/pub
nospor
  1. <?php
  2. for($i=1; $i<=$counter; $i++){
  3.    echo $_POST['time'.$i];
  4. }
  5. ?>

A na przyszlosc nadawaj nazwą nazwy tablicowe (z [] na koncu) to bedziesz mial ladna tablice
Kloucek
Ok, znalazłem rozwiązanie. count($_REQUEST) jest tym czego szukałem! Dzięki za pomoc

No tak, ale natrafiłem na jeszcze jeden problem. Nie potrafię przesłać wartości counter do save.php.

Umieszczenie pola w istniejącym formularzu jakoś mi nie pasuje, bo jego nazwa i tak będzie się zmieniała razem z dodawanymi polami. A cały problem tkwi w tym, że potrzebuje tej ostatniej wartości, aby ograniczyć pętlę. Może jest jakiś sposób aby przesłać wartość zmiennej counter razem z danymi formularza przy wduszeniu send? Mam to zorganizowane tak:

javascript dodający nowe pola formularza:
Kod
function moreFields() {
     counter++;
     var newFields = document.getElementById('readroot').cloneNode(true);
     newFields.id = '';
     newFields.style.display = 'block';
     var newField = newFields.getElementsByTagName('*');
     for (var i=0;i<newField.length;i++) {
         var theName = newField[i].name;
         if (theName)
             newField[i].name = theName + counter;
        
     }
     var insertHere = document.getElementById('writeroot');
     insertHere.parentNode.insertBefore(newFields,insertHere);
     document.getElementById('counter').value = counter;
}


zwykłe pole tekstowe przechowujące jego wartość jest umieszczone tuż za divem który się powiela:
Kod
    <form method="post" action="save.php">
     <input type="text" id="counter" name="counter" />
     <span id="writeroot"></span>

     <input type="button" id="moreFields" value="Add more" />
     <input type="submit" value="Send form" />
     </form>


całość w akcji oczywiście na bartosz.dk/pub
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.