Odbieranie wartości z dynamicznych formularzy

witam,

Mam np taki kod:

i teraz w php mam odbieranie tych danych np.

$q = $_POST[‘question’];

foreach($q as $question => $position) {

echo $position . ’

';

}

Tych pól input może być więcej np. jeszcze z 5 razy. Nie wiadomo ile jest tych pól input pomiędzy ponieważ

te pola są generowane dynamicznie, to user ustala sobie ile tych pól ma być. I teraz czy istnieje jakiś sposób aby po wywołaniu ‘foreach’ pokazały się najpierw

np te trzy pierwsze wartości potem gdzieś dalej w kodzie mogę sobie wywołać te dwie następne itd. Bo teraz to wypisuje mi oczywiście wszystkie naraz a ja chcę

to poprostu odzielić jakoś.

Zamiast foreach powinieneś, w takim przypadku, zastosować pętlę for + funkcję count.

http://pl.wikibooks.org/wiki/PHP/Instrukcja_for

Zobacz: Proste wyświetlanie tablic

http://www.php.net/manual/pl/function.count.php

http://www.php.net/manual/pl/control-structures.for.php

$array = $_POST['question'];$i = 0, $x = count($array); $i  $x; $i++) {  echo $array[$i]. ';[/code]

Które elementy zostaną wyświetlone to już kwestia doboru odpowiednich instrukcji inicjalizujących i wyrażenia warunkowego. Numer ostatniego wyświetlonego elementu, następnego, samą tablice z tymi danymi, i inne przydatne dane możesz przechowywać np. w sesji/bazie/ciastkach/pliku itp. Aby dynamicznie, po załadowaniu strony, wyświetlać użytkownikowi kolejny wpis, przydało by się skorzystać dodatkowo z dobrodziejstw technologi AJAX. Oczywiście nie zapomnij sprawdzać, czy w ogóle jest co jeszcze wyświetlić, czy kolejny element istnieje.

tylko, że w pętli for nie może być np $i < $x; bo nie wiadomo ile będzie tych formularzy bo one są generowane w JS za pomocą pętli for:

for(var j=1; j <= ilosc_opcji; j++){

tmp_question = tmp_question + ‘’;

}

Po prostu skrypt kilka razy będzie wchodził do tej pętli, zależy to od użytkownika. Więc name=“question[]” niczym się nie różni od innych i tu pojawia się właśnie problem.

Chyba, że utworzyć sobie np

Hm, jak to nie wiadomo? A przy użyciu count() nie możesz tego sprawdzić, zliczyć?

no mogę zliczyć ale to mi zliczy wszystkie razem a nie że np. w pierwszej części kodu np 3 inputy potem np 5 itd.

Jezu, ty nie znasz podstaw.

for (licznik, warunek, operacja po przejściu pętli)

Tak jak 177 ci powiedział cout masz całość.

A dalej masz dzielić wg swojego uznania, ew wg jakiegoś warunku …

tak wiem że trzeba to sprawdzać po warunku tylko nie wiem jak ten właśnie warunek sobie stworzyć, po czym ma sprawdzać

Wszystko zależy od skryptu.

Dzięki cayman3_11 bardzo mi to pomogło. Powiedz mi jeszcze jeśli mam skrypt

$topic = $_POST['topic']; foreach($topic as $topic = $war)

W ten sposób nie przekażesz całej tablicy, a jedynie słowo Array.

Sam zobacz: http://ideone.com/l9gEv

To samo ujrzysz w źródle wygenerowanej strony.

Możesz tam dać wartość konkretnych kluczy, po kolei.

<input type="hidden" value="'.$topic[0].'" name="topic[]" />input type="hidden" value="'.$topic[1].'" name="topic[]" /input type="hidden" value="'.$topic[2].'" name="topic[]" / [/code]



I w ogóle element hidden w formularzu to raczej średni pomysł, na przekazanie tych danych dalej.

Może lepiej użyć sesji, na przykład? http://www.php.net/manual/pl/book.session.php

Wtedy będziesz mógł sobie przechować całość, w prosty sposób.


[code=php]$_SESSION['topic'] = $topic;

 Myślę, że warto poczytać o tym.

jesli przysyłam normalna wartość to sesja mi działa natomiast jeśli ustawię tablicę to już nie, a robię to tak:

ustawiam sesje:

$_SESSION['topic'] = $a;[/code]

i potem odbieram w następnym pliku:

[code=php]if ($_SESSION[‘topic’]) echo ‘tak’;
‘nie’; 

i co tu jest nie tak?

Hm. A dobrze używasz tych sesji, masz:

session_start();[/code]

? http://www.php.net/manual/pl/function.session-start.php

Jesteś pewny, że przekazujesz (przypisujesz) tablicę?

Co pokazuje

[code=php]var_dump($a);

przed i

var_dump($_SESSION['topic']);[/code]

po ?