[PHP] Błędny wynik skryptu php |
[PHP] Błędny wynik skryptu php |
24.01.2010, 13:21:27
Post
#1
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 24.01.2010 Ostrzeżenie: (0%) |
Witam Was wszystkich
Jestem tu nowy, przed chwilą się zarejestrowałem ponieważ mam problem z PHP. Mam za zadanie zsumować kolejne wyrażenia postaci 1/n (gdzie n=1,2,3,…). Sumowanie należy zakończyć gdy różnica dwóch ostatnio dodanych składników będzie mniejsza od podanej z formularza liczby (np. 0,0001). Napisałem kod ale gdzieś jest błąd (możliwe że wszędzie dopiero zaczynam pisać w php ) ponieważ jakiej liczby (różnicy) bym nie podał suma wychodzi mi zero.
Z góry dzięki za pomoc |
|
|
24.01.2010, 13:27:07
Post
#2
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 19 Dołączył: 25.04.2009 Ostrzeżenie: (0%) |
Dzieje się tak bo nie wygląda na to żebyś do tej pętli w ogóle wchodził.
$p jest równe -1 a $i nigdy nie będzie - więc pętla ani razu się nie wykona. A w ogóle to brakuje $ w paru miejscach, np jest i zamiast $i. Nie wiem czy przepisywałeś to czy kopiowałeś? Ten post edytował qrzysztof 24.01.2010, 13:29:43 -------------------- Znalazłeś sam rozwiązanie swojego problemu? Nie pisz "już wiem, do zamknięcia". Podziel się rozwiązaniem - inni będą mieli łatwiej.
|
|
|
24.01.2010, 13:29:05
Post
#3
|
|
Grupa: Zarejestrowani Postów: 283 Pomógł: 11 Dołączył: 11.10.2004 Skąd: 3c Ostrzeżenie: (10%) |
Poza tym co napisal qrzysztof to w petli przy "i" brakuje Ci znaku $ czyli ma byc nie "i" tylko zmienna $i
Ten post edytował Volume 24.01.2010, 13:30:11 |
|
|
24.01.2010, 13:30:10
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 24.01.2010 Ostrzeżenie: (0%) |
Dzieje się tak bo nie wygląda na to żebyś do tej pętli w ogóle wchodził.
Hmm, właśnie próbowałem jeszcze takie coś, testowe do 1000 i też mi nie działa
Teraz powinno działać ale niestety nie chodzi. Aha to może przez to nie działa Dzięki zaraz sprawdzę :* Ten post edytował Dym71 24.01.2010, 13:31:25 |
|
|
24.01.2010, 13:32:28
Post
#5
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 19 Dołączył: 25.04.2009 Ostrzeżenie: (0%) |
To przypisanie $i=-1 musiałbyś gdzieś poza pętlą na przykład umieścić.
Przy $i=1000 też nie zadziała - bo to wszystko jest w pętli for - a pętla for ani razu się nie wykonuje. I zanim sprawdzisz - popraw jeszcze błąd, o którym napisał Volume. Ten post edytował qrzysztof 24.01.2010, 13:35:51 -------------------- Znalazłeś sam rozwiązanie swojego problemu? Nie pisz "już wiem, do zamknięcia". Podziel się rozwiązaniem - inni będą mieli łatwiej.
|
|
|
24.01.2010, 13:45:29
Post
#6
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 24.01.2010 Ostrzeżenie: (0%) |
To przypisanie $i=-1 musiałbyś gdzieś poza pętlą na przykład umieścić. Przy $i=1000 też nie zadziała - bo to wszystko jest w pętli for - a pętla for ani razu się nie wykonuje. I zanim sprawdzisz - popraw jeszcze błąd, o którym napisał Volume. Poprawiłem błąd który wskazał mi Volume - dzięki. No niestety, chyba źle rozumiem składnię pętli. Skoro $i=1 a $p=1000 to bez modyfikacji $i w środku pętli pętla powinna wykonać się 999 razy (albo 1000 już nie pamiętam ) czy tak? Jeżeli tak to skoro mam umieścić $i=-1 lub $i=1000 zależnie od wersji poza pętlą to jak mam ją kontrolować/przerwać (tzn. chodzi mi o przerwanie jej działania w odpowiednim momencie)? |
|
|
24.01.2010, 13:49:13
Post
#7
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 19 Dołączył: 25.04.2009 Ostrzeżenie: (0%) |
Jeśli chciałbyś żeby wykonała się 999 razy to musiałbyś mieć warunek $i<$p (czyli wykonuj pętle dopóki i$<$p). A masz tam równość (czyli wykonuj pętlę dopóki $i jest równe $p). A więc jeśli nie jest równe to nic się nie wykona ani razu.
-------------------- Znalazłeś sam rozwiązanie swojego problemu? Nie pisz "już wiem, do zamknięcia". Podziel się rozwiązaniem - inni będą mieli łatwiej.
|
|
|
24.01.2010, 13:57:36
Post
#8
|
|
Grupa: Zarejestrowani Postów: 283 Pomógł: 11 Dołączył: 11.10.2004 Skąd: 3c Ostrzeżenie: (10%) |
Cytat No niestety, chyba źle rozumiem składnię pętli. Skoro $i=1 a $p=1000 to bez modyfikacji $i w środku pętli pętla powinna wykonać się 999 razy (albo 1000 już nie pamiętam ) czy tak? Jeżeli tak to skoro mam umieścić $i=-1 lub $i=1000 zależnie od wersji poza pętlą to jak mam ją kontrolować/przerwać (tzn. chodzi mi o przerwanie jej działania w odpowiednim momencie)? Nie bradzo o to chodzi
pierwsze wyrazenie w petli for mowi od jakiej wartosci ma zaczac pozniejsze pokazwyanie wyniku w petli, drugie wyrazenie ile ma byc wykonanych powtorzen ale w tej postaci co Ty napisales to jest w ogole tu bez sensu gdyz ten opertor == jest to operator porownania (np. $a==$b znaczy ze prawda jeśli $a jest równe $b). W przypadku gdy np bys to zapisal w psotaci $i=$p byloby juz bardziej sensownie - ale wtedy petla by sie wykonala nieskonczona ilosc razy - dlatego trzeba jej dac do zrozumienia zeby w koncu sie zatrzymala dlatego nalezy dac zapis np. $i<$p czyli dla Twojego przykladu petla wykona sie 1000 razy jesli $p bedzi erowne 10 to 10 razy (oczywiscie wzgledem pierwszego wyrazenia jesli byloby rowne 0 ($i=0)) itd. Natomiast 3 wyrazenie mowi o ile ma sie zwiekszac wynik w petli. Takze kombinuj. Obadaj podstawy: http://phpkurs.pl/operatory/ i http://phpkurs.pl/struktury/#struktury.for Ten post edytował Volume 24.01.2010, 14:05:12 |
|
|
24.01.2010, 14:46:19
Post
#9
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 24.01.2010 Ostrzeżenie: (0%) |
Kurcze, próbowałem z tą pętlą for i wydaje mi się że rozumiem piszę i niestety albo zero(nie przechodzi ani raz) albo jeden(przechodzi tylko raz).
Poczytałem tamte kursy i stwierdziłem że spróbuję z pętlą while. Jest ona wykorzystywana w sytuacjach, kiedy niezbędne jest wykonywanie jakiejś operacji dopóki nie zostanie spełniony warunek. Czyli:
Napisałem jak ja to rozumiem. Jeżeli źle bo np. w pętli trzeba zastosować inkrementację dla $q to ja nie wiem jak to zrobić. Jakbyście mogli przerobić ten kawałek kodu żeby mi działało to bym był bardzo wdzięczny i może bym zakumał. Nie wiem jakbym miał się zrewanżować Jak ktoś mieszka we Wrocławiu to mogę piwo postawić Ten post edytował Dym71 24.01.2010, 14:48:01 |
|
|
24.01.2010, 14:51:56
Post
#10
|
|
Grupa: Zarejestrowani Postów: 207 Pomógł: 18 Dołączył: 12.04.2009 Skąd: Rypin Ostrzeżenie: (0%) |
Próbowałem to zrobić w taki sposób:
Coś tam zaczyna liczyć, ale przerywa na 1,5 nie wiem dlaczego, wykonuje się tylko 3 razy, dopracuj, przypatrz się może to ci pomoże, ja muszę lecieć i nie mam czasu go dokończyć Zrobiłem to na pętli nieskończonej a w środku jest instrukcja break która przerywa jej wykonanie, kiedy warunek się spełni. |
|
|
24.01.2010, 15:03:39
Post
#11
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 29 Dołączył: 20.05.2009 Ostrzeżenie: (0%) |
Formatowanie html'owskie zrób wg własnego uznania. Ten post edytował Szeszek1992 24.01.2010, 15:20:00 -------------------- |
|
|
24.01.2010, 15:28:23
Post
#12
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 24.01.2010 Ostrzeżenie: (0%) |
Formatowanie html'owskie zrób wg własnego uznania. No dzięki wielkie Po przeczytaniu i zrozumieniu powinno śmigać, ale u mnie nie działa i może coś nie tak mam z serwerem chociaż inne skrypty działają Mam identycznie tylko że dokładność wczytuję z formularza jako $z i niestety po kliknięciu ładuje się, myśli i myśli i nic. Testowałeś to u siebie?? Kod:
Ten post edytował Dym71 24.01.2010, 15:29:31 |
|
|
24.01.2010, 15:38:31
Post
#13
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 29 Dołączył: 20.05.2009 Ostrzeżenie: (0%) |
Dorobiłem formularz do swego kodu;) Działa na pewno, testowałem. Nie zapomnij, że w PHP część ułamkową oddzielamy kropką, a nie przecinkiem. PS $dokladnosc możesz zamienić na $z Ten post edytował Szeszek1992 24.01.2010, 15:41:03 -------------------- |
|
|
24.01.2010, 16:10:11
Post
#14
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 24.01.2010 Ostrzeżenie: (0%) |
Dorobiłem formularz do swego kodu;) Działa na pewno, testowałem. Nie zapomnij, że w PHP część ułamkową oddzielamy kropką, a nie przecinkiem. PS $dokladnosc możesz zamienić na $z Dzięki za wszystko, niestety u mnie nie działa a próbowałem na krasnalu, webserw i easyphp. W identycznej formie po wpisaniu liczby i kliknięciu ok pojawia mi się nowy formularz i nic więcej a gdy do niego wpiszę i kliknę wyślij to jest pusto - nie ma nic. po usunięciu 2 linijki kodu:
i wpisaniu liczby w mój formularz i kliknięciu ok wszystko znika (to samo tylko że nie ma 2 formularzu). Nie wiem w czym rzecz. Może jakieś złe ustawienie PHP, opcja register_globals ma być aktywna? |
|
|
24.01.2010, 16:59:47
Post
#15
|
|
Grupa: Zarejestrowani Postów: 207 Pomógł: 18 Dołączył: 12.04.2009 Skąd: Rypin Ostrzeżenie: (0%) |
Skrypt śmiga, register_globals dla bezpieczeństwa wszędzie powinna być na OFF ustawiona z powodów bezpieczeństwa, możliwe że twoje ustawienie PHP nie daje możliwości używania skróconych nazw $_POST[''], spróbuj $HTTP_POST_VARS[''];
Dla testu cały kod prócz formularza weź sobie w komentarz, mianowicie:
a za wyświetlaniem formularza daj Jak przetestujesz to daj znać co się dzieje |
|
|
24.01.2010, 17:05:40
Post
#16
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 29 Dołączył: 20.05.2009 Ostrzeżenie: (0%) |
Tak dla pewności: Nazwa pliku skryptu musi być taka sama jak nazwa podana w <form>, czyli np. index.php
-------------------- |
|
|
24.01.2010, 17:54:26
Post
#17
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 24.01.2010 Ostrzeżenie: (0%) |
Niestety nawet dając tylko
echo $_POST['z']." - skrócona nazwa tablicy <br />"; echo $HTTP_POST_VARS['z']." - długa nazwa tablicy"; Nie wyświetla mi tego co wpisałem w formularzu. Wyświetla tylko: - skrócona nazwa tablicy - długa nazwa tablicy bez żadnej wartości zmiennej $z Wrzuciłem tutaj trzy pliki: zad7.htm z formularzem zad7.php plik z kodem screen.jpg screen po wpisaniu wartości i kliknięciu ok Jak ktoś może je sprawdzić to bym był bardzo wdzięczny. |
|
|
24.01.2010, 18:06:44
Post
#18
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 29 Dołączył: 20.05.2009 Ostrzeżenie: (0%) |
W zad7.php popraw to, co masz w <form>(zmień z index.php na zad7.php).
Poza tym wszystko działa -------------------- |
|
|
24.01.2010, 19:27:40
Post
#19
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 24.01.2010 Ostrzeżenie: (0%) |
Dziękuję Wam wszystkim za pomoc, wszystko śmiga. Naprawdę bardzo dobre forum, miła atmosfera bo mili ludzie - nie to co na innych "forach" sami prowokatorzy. Pozdrawiam i jeszcze raz dzięki
|
|
|
Wersja Lo-Fi | Aktualny czas: 24.04.2024 - 13:21 |