Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak wyswietlic po kolei wartosci z tablicy w formularzu za pomoca submit?
Forum PHP.pl > Forum > Przedszkole
dolar
Witam, Mam za zadanie wyswielac za pomoca wcisniecia przycisku submit (dalej lub wstecz) nazwy piosenek po kolei. One maja sie zapetlac tzn, jesli wcisne dalej to wyskoczy mi piosnka1, jesli wcisne znowu to ma juz byc piosenka2, a nie moge do tego dojsc... :/. Ciagle wysiwetlaja mi sie wszystkie 4. Oto moj kod:


<html>
<head>
<title>NieMa</title>
<meta charset="UTF-8">
</head>
<body>


<form method="post">
<input type="submit" name="wstecz">
<input type="submit" name="dalej">
</form>



</body>
</html>

<?

$playlista = array(
1 => 'piosenka1',
2 => 'piosenka1',
3 => 'piosenka3',
4 => 'piosenka4',

);

$dalej= $_POST['dalej'];
$wstecz= $_POST['wstecz'];



while ($i<5) {
if ($dalej){
echo $playlista[$i]."\n";
$i++;
} else {
$i--;
echo $playlista[$i]."\n";
}
}

Myslalam ze petla zatrzyma sie w momencie gdy uzytkownik ma wcisnac przycisk i poczek az go wcisnie i dopiero pojdzie dalej ta petla, lecz wychodzi na to ze uzytkownik moze ja wcisnac tylko raz i petla sie zapetla do momentu az i<5. Nie wiem czy mozna mnie zrozumiec, ale staram sie wytlumaczyc dosc prsoto smile.gif. W czym tkwi moj problem?
viking
Przycisk jest po stronie przeglądarki a kod PHP wykonuje się dużo wcześniej. Nie widać tu też nigdzie deklaracji zmiennej $i. Wysyłaj input type=hidden z aktualną piosenką.
dolar
$i=1;
while ($i<5) {
if ($dalej)
echo $playlista[$i]."\n";
$i++;
}

ok tutaj zmienilam, ale nie doszlam jeszcze z nauka do hidden, czy moglby mi ktos to wytlumaczyc? albo jak zapisac zeby ten kod dzialal?
emstawicki
Może to coś Tobie wyjaśni zasadę działania formularzy i zmiennych POST.
  1. <?php
  2. $playlista = array(
  3. 1 => 'piosenka1',
  4. 2 => 'piosenka2',
  5. 3 => 'piosenka3',
  6. 4 => 'piosenka4',
  7. );
  8. $i = (isset($_POST['numerek']) && !empty($_POST['numerek'])) ? $_POST['numerek'] : 1;
  9. if (isset($_POST['wstecz']) && $i > 1) $i--;
  10. if (isset($_POST['dalej']) && $i < 4) $i++;
  11. echo "<p>{$playlista[$i]}</p>";
  12. ?>
  13. <form method="post">
  14. <input type="submit" name="wstecz" value="Wstecz!">
  15. <input type="submit" name="dalej" value="Dalej!">
  16. <input type="hidden" name="numerek" value="<?php echo $i;?>">
  17. </form>
dolar
Hmm podobno da sie to zrobic bez uzywania hidden - czy w moim kodzie nie da rady zrobic modyfikacji tak zeby dzialalo? Bo nie wiem w zasadzie czy szlam w dobrym kierunku nawet
emstawicki
Opisz może jak rozumiesz interpretowanie skryptu php, a w szczególności pętli while?
Pętla while działa tak jak ją napisałaś i działa prawidłowo czyli po wciśnięcu przycisku dalej wysyła zmienną POST dalej do skryptu php wyświetla 4 elementy z tablicy.
Równie dobrze mogłabyś to zapisać w ten sposób:
  1. $i=1;
  2. if ($dalej) {
  3. while ($i<5) {
  4. echo $playlista[$i]."\n";
  5. $i++;
  6. }
  7. }

Bo zmienna dalej nie zmieni się przez inkrementacje zmiennej I
dolar
hmm ja myslalam zeby to dzialalo w ten sposob:
Jesli uzytkownik wcisnie przycisk Dalej to wyswietli mi sie piosenka1, jesli ponownie bo wcisnie to wyswietli sie piosenka2 itd i analogicznie do przycisku Wstecz. Chcualam to zrobic na jednej tablicy to raz, a dwa rozumowalam tak, ze petla zatrzymuje sie w momencie kiedy uzytkownik ma wcisnac przycisk Dalej i czeka az go ktos wcisnie, a tutaj widze ze to tak nie dziala. Jak raz wcisnie to juz leci petla az do konca.
viking
Tak jak ci pisałem, zacznij rozróżniać że PHP działa po stronie serwera i przeglądarka otrzymuje wynik jego działania. Parser już dawno skończył swoją pracę. To o czym mówisz możliwe jest w aplikacjach GUI pisanych np w Java albo JS.
emstawicki
Dokładnie jak @viking napisał. Po wczytaniu adresu internetowego przez przeglądarkę ze skryptem php uznajemy że skrypt się wykonał - jak amen w pacierzu.
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.