Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]mam problem z petla while w PHP
Forum PHP.pl > Forum > Przedszkole
dolar
<?

while (!empty(czytajLinie())) {
if (czytajLinie()=="tak") {
echo "przyznano dostep";
} elseif (czytajLinie()=="nie") {
echo "nie przyznano dostepu";
} elseif (czytajLinie()!="tak" || czytajLinie()!="nie") {
echo "nie znam komendy\n";
}
}

echo "wpisz raz jeszcze polecenie\n";


?>


Witam, jestem nowa i poczakujaca... a w zasadzie to jeszcze raczkujaca tongue.gif. Zatrzymalam sie na dluzej w petlach gdyz jakos tak ciezko mi przyszlo ich zrozumienie, ackzolwiek wszystko idzie do przodu juz smile.gif.
Wyyslilam sobie zadanie, ze petla ma dzialac w momencie gdy pole z funkcji (czytajlinie - to moja wlasna funkacja, gdzie sie wpisuje cos) nie bedzie pusta, inaczej ma ja zakonczyc. I tak: jesli uzytkownik wpisze "tak to ma sie cos wyswietlic, jezeli "nie" to ma sie tez cos wuswietlic, a jezeli nic z powyzszych to tez ma cos sie wyswiertlac... cos mi nie dziala bo jak wpisuje tak to petla wskakuje jakby na poczatek i znowu mam pole do wpisywania zamiast echo dopasowane do slowa "tak"... co jest nie tak?
kapslokk
Pokaż kod tej funkcji czytajLinie - może łatwiej będzie zrozumieć o co Ci tak właściwie chodzi.
dolar

function czytajLinie() {
echo "Wpisz: ";
$handle = fopen ("php://stdin","r");
$line = fgets($handle);
return trim($line);
}


Przepraszam jesli pisze malo czytelnie, ale na prawde jestem dopiero na etapie podstaw smile.gif
kapslokk
Zmień warunek pętli na
  1. while (!empty($linia = czytajLinie())) {
i później w środku odwołuj się do $linia a nie czytajLinie(). W takiej formie jak masz teraz w każdym miejscu gdzie wywołujesz czytajLinie() musisz wpisywac tekst od nowa.
dolar
Dziala!!!

A czy pspba powyzej bylaby tak mila i wytlumaczyla mi jak laikowi dlaczego dziala jak przypisze zmiennej moja funkcje, a jak nie to nie dziala? Bo w chwili obecnej jestem na etapie przestawianie sie na myslenie programistyczne i czasem nie widze rzeczy, ktore powinnam :/. Widze ze po przypisaniu funkcji do zmiennej jest ona wywolywana tylko raz w warunku petli, a wczesniej mialam ja wywolywana kilka razy tak? Dlatego nie dzialalo?
kapslokk
Funkcja czytajLinie() przy KAŻDYM wywołaniu pobiera tekst z wejścia - czyli za pierwszym razem gdy sprawdzasz czy polecenie nie jest puste i poźniej gdy porownujesz do konkretnych stringow. Potrzebujesz pobrać polecenie jeden raz i później na nim już operować. Teoretycznie Twój kod też działał, tylko trzeba było wpisać np 2x tak. smile.gif
dolar
Baardzo dziekuje za pomoc. Wiem, ze moje pierwsze kroki i zadania i problemy moga wydac sie czasem blahe, ale jestem mega zadowolona z udzielonej mi pomocy iw razie problemow bede tutaj stalym uzytkownikiem smile.gif
Pozdrawiam!
Tomplus
Daj POMÓGŁ tym którzy ci pomogli w rozwiązaniu problemu.
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.