Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobranie zmiennej z formularza, OOP - czegoś tu nie rozumiem
primo
post 3.03.2007, 08:28:25
Post #1





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

Ostrzeżenie: (0%)
-----


Witam,

mam klasę oraz konstruktor o tej samej nazwie co klasa.
Konstruktor:
  1. <?php
  2. function Kalkulator ($sex, $weight, $age, $height, $tmax) {
  3.  
  4. $this ->_Sex = $sex;
  5. $this ->_Weight = $weight;
  6. $this ->_Age = $age;
  7. $this ->_Height = $height;
  8. $this ->_Tmax  = (int)$tmax;
  9. }
  10. ?>



oraz metodę, która korzysta z jednej ze zmiennych będących w konstruktorze:
  1. <?php
  2. function Zawody() { 
  3.  
  4. $zawody = array ( 
  5. 'zawody_5km' => array (0.95 * $tmax, 0.97 * $tmax), 
  6. 'zawody_10km'  => array (0.92 * $tmax, 0.94 * $tmax), 
  7. 'zawody_15km'  => array (0.95 * $tmax, 0.97 * $tmax), 
  8. 'polmaraton' => array (0.85 * $tmax, 0.88 * $tmax), 
  9. 'maraton'  => array (0.85 * $tmax, 0.88 * $tmax) 
  10. );
  11.  
  12. foreach ($zawody as $wartosc)
  13. {
  14. foreach ($wartosc as $klucz=>$ostateczna_wartosc)
  15. {
  16.  
  17. echo "$klucz: $ostateczna_wartosc<br>";
  18. }
  19. echo "<br>" ;
  20. }
  21. }
  22. ?>



Nie mogę pojąć dlaczego po wypełnieniu formularza nie wylicza tego co jest w pętli. Jeśli określę $tmax = 200 to wyliczenia mają miejsce, gdy są same zmienne to lipa. Nie wiem, gdzie popełniam błąd.
Dodam tylko, że klasę wywołuję z parametrami, które są w nawiasach konstruktora:
  1. <?php
  2. $kalkulator = new Kalkulator ($sex, $weight, $age, $height, $tmax);
  3. $tre = $kalkulator ->Zawody();
  4. echo $tre;
  5. ?>


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
Athlan
post 3.03.2007, 08:49:06
Post #2





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

Ostrzeżenie: (0%)
-----


Z tego co podałeś wynika, iż źle odwołujesz się do atrybutów klasy w metodzie Zawody(). nie $tmax, ale $this->tmax. Poprawiłem kod.

  1. <?php
  2. function Zawody() { 
  3.  
  4. $zawody = array ( 
  5. 'zawody_5km' => array (0.95 * $this->tmax, 0.97 * $this->tmax), 
  6. 'zawody_10km'  => array (0.92 * $this->tmax, 0.94 * $this->tmax), 
  7. 'zawody_15km'  => array (0.95 * $this->tmax, 0.97 * $this->tmax), 
  8. 'polmaraton' => array (0.85 * $this->tmax, 0.88 * $this->tmax), 
  9. 'maraton'  => array (0.85 * $this->tmax, 0.88 * $this->tmax) 
  10. );
  11.  
  12. foreach ($zawody as $wartosc)
  13. {
  14. foreach ($wartosc as $klucz=>$ostateczna_wartosc)
  15. {
  16.  
  17. echo "$klucz: $ostateczna_wartosc<br>";
  18. }
  19. echo "<br>" ;
  20. }
  21. }
  22. ?>


Pozdrawiam, Athlan smile.gif


--------------------
Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij pod postem.
Go to the top of the page
+Quote Post
primo
post 3.03.2007, 14:44:49
Post #3





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

Ostrzeżenie: (0%)
-----


To nie to, zapomniałem dodać że tej motody też już próbowałem. Próbowałem również odwoływać się bezpośrednio do $this->_Tmax ale z tego też nici sad.gif --- brak pomysłów na rozwiązanie.

Gdzie tkwi błąd jeśli:

wywołam klasę w ten sposób:
$kalkulator = new Kalkulator ($_GET['$sex'], $_GET['$weight'], $_GET['$age'], $_GET['$height'], "200");
$kalkulator ->Zawody();

Działa.

Gdy wywołam klasę w ten sposób:
$kalkulator = new Kalkulator ($_GET['$sex'], $_GET['$weight'], $_GET['$age'], $_GET['$height'], $_GET['$tmax']);
$kalkulator ->Zawody();

Nie działa


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
kwiateusz
post 3.03.2007, 15:01:04
Post #4


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




a weź wyech uj $_GET['$tmax'] czy ma jakaś wartość winksmiley.jpg moze nie jest przekazywane
Go to the top of the page
+Quote Post
primo
post 3.03.2007, 15:19:30
Post #5





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

Ostrzeżenie: (0%)
-----


Cytat(kwiateusz @ 3.03.2007, 15:01:04 ) *
a weź wyech uj $_GET['$tmax'] czy ma jakaś wartość winksmiley.jpg moze nie jest przekazywane



No faktycznie nic nie jest wyświetlane. Ale o czym to świadczy questionmark.gif


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
JaRoPHP
post 3.03.2007, 15:42:29
Post #6





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(primo @ 3.03.2007, 15:19:30 ) *
No faktycznie nic nie jest wyświetlane. Ale o czym to świadczy questionmark.gif
O tym, że zmienna ta nie jest przekazywana... Może masz błąd literowy w definiowaniu nazwy pola w formularzu? Sprawdź jak nazywa się to pole w formularzu.


--------------------
Kto pyta, nie błądzi...
Kto zbłądził, ten pyta...
Go to the top of the page
+Quote Post
primo
post 3.03.2007, 15:51:17
Post #7





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

Ostrzeżenie: (0%)
-----


Cytat(JaRoPHP @ 3.03.2007, 15:42:29 ) *
O tym, że zmienna ta nie jest przekazywana... Może masz błąd literowy w definiowaniu nazwy pola w formularzu? Sprawdź jak nazywa się to pole w formularzu.


  1. <input type="text" name="tmax">


Czyli to nie to sad.gif


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
Athlan
post 3.03.2007, 19:14:06
Post #8





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

Ostrzeżenie: (0%)
-----


Cytat(kwiateusz @ 3.03.2007, 15:01:04 ) *
a weź wyech uj $_GET['$tmax'] czy ma jakaś wartość winksmiley.jpg moze nie jest przekazywane


znacznie lepiej wykorzystać funkcję var_dump(). Zwróci wszystkie podane jej argumenty, ich typy i ewentualne wielkości/długości. Jeżeli var_dump() zwróci Ci NULL, znaczy to, że zmienna na 100% nie jest przekazywana. Możesz spróbować jeszcze tak:
  1. <?php
  2. var_dump($_GET['tmax']);
  3. ?>

lub
  1. <?php
  2. var_dump(isset($_GET['tmax'])); // zwroci booleana
  3. ?>

albo najlepiej
  1. <?php
  2. var_dump($_GET);
  3. ?>

aby sprawdzić, czy element znajduje się w tablicy i co zostało przekazane.

echo(), jak powiedział @kwiateusz tutaj nie rozwiąże całkowicie problemu.

Pozdrawiam, Athlan smile.gif


--------------------
Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij pod postem.
Go to the top of the page
+Quote Post
primo
post 4.03.2007, 08:58:30
Post #9





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

Ostrzeżenie: (0%)
-----


Zastosowałem:

var_dump($_GET);

i otrzymałem
  1. <?php
  2. array(0) { }
  3. ?>


a gdy zastosowałem:

var_dubp($_POST);

to otrzymałem:
  1. <?php
  2. array(6) { ["sex"]=> string(1) "m" ["weight"]=> string(2) "70" ["age"]=> string(2) "29" ["height"]=> string(3) "1.7" ["tmax"]=> string(3) "200" ["wyslij"]=> string(10) "Dodaj wpis" }
  3. ?>


Tak czy inaczej kod dalej nie działa sad.gif

Wreszcie się udało. Pewnie jesteście zainteresowani co zmieniłem, że zaczęło działać. Otóż przy stworzeniu obiektu z tej metody:

  1. <?php
  2. $kalkulator = new Kalkulator ($_GET['sex'], $_GET['weight'], $_GET['age'], $_GET['height'], $_GET['tmax']);
  3. $kalkulator ->Zawody();
  4. ?>


zmieniłem na tą:

  1. <?php
  2. $kalkulator = new Kalkulator ($sex, $age, $weight, $height, $tmax);
  3. $kalkulator ->Zawody();
  4. ?>


Teraz zastanawiam się nad inną kwestią. Mianowicie mając konstruktor:
  1. <?php
  2. function Kalkulator ($sex, $weight, $age, $height, $tmax) {
  3.  
  4. $this ->_Sex = $sex;
  5. $this ->_Weight = $weight;
  6. $this ->_Age = $age;
  7. $this ->_Height = $height;
  8. $this ->_Tmax  = $tmax;
  9.  
  10. }
  11. ?>


oraz jego metodę:

  1. <?php
  2. function Zawody() { 
  3.  
  4. $zawody = array ( 
  5. 'zawody_5km' => array (0.95 * $this->_Tmax, 0.97 * $this->_Tmax), 
  6. 'zawody_10km'  => array (0.92 * $this->_Tmax, 0.94 * $this->_Tmax), 
  7. 'zawody_15km'  => array (0.95 * $this->_Tmax, 0.97 * $this->_Tmax), 
  8. 'polmaraton' => array (0.85 * $this->_Tmax, 0.88 * $this->_Tmax), 
  9. 'maraton'  => array (0.85 * $this->_Tmax, 0.88 * $this->_Tmax) 
  10. );
  11.  
  12. foreach ($zawody as $wartosc)
  13. {
  14. foreach ($wartosc as $klucz=>$ostateczna_wartosc)
  15. {
  16.  
  17. echo "$klucz: $ostateczna_wartosc<br>";
  18. }
  19. echo "<br>" ;
  20. }
  21. }
  22. ?>


Dlaczego kod nie działa jeśli zastosuję zapis:
  1. <?php
  2. //... metoda
  3. 'zawody_5km' => array (0.95 * $this->tmax, 0.97 * $this->tmax), 
  4. //...
  5. ?>


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
Kayne
post 4.03.2007, 19:59:21
Post #10





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 30.04.2006
Skąd: Kalisz

Ostrzeżenie: (0%)
-----


Masz włączone register_globals ?


--------------------
Chcesz szybko i łatwo wygrać 100 zł?
Go to the top of the page
+Quote Post
primo
post 4.03.2007, 20:02:17
Post #11





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

Ostrzeżenie: (0%)
-----


Cytat(Kayne @ 4.03.2007, 19:59:21 ) *
Masz włączone register_globals ?



Tak.


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
Turgon
post 5.03.2007, 17:55:05
Post #12





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

Ostrzeżenie: (0%)
-----


To je wyłącz i zamiast bawić się w :
  1. <?php
  2. function Kalkulator ($sex, $weight, $age, $height, $tmax) {
  3.  
  4. $this ->_Sex = $sex;
  5. $this ->_Weight = $weight;
  6. $this ->_Age = $age;
  7. $this ->_Height = $height;
  8. $this ->_Tmax  = $tmax;
  9.  
  10. }
  11. ?>

Nie lepiej:
  1. <?php
  2. function Kalkulator () {
  3.  
  4. $this ->_Sex = $_POST['sex'];
  5. $this ->_Weight = $_POST['weight'];
  6. $this ->_Age = $_POST['age'];
  7. $this ->_Height = $_POST['height'];
  8. $this ->_Tmax  = $_POST['tmax'];
  9.  
  10. }
  11. ?>


Co do nie działającego zapisu. PHP jest czułe na wielkość liter pamiętaj :
tmax nie równa się Tmax!


--------------------
Jah Music Is On My Mind !
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.07.2025 - 10:11