Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pobranie zmiennej z formularza, OOP - czegoś tu nie rozumiem
primo
post
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. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Athlan
post
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
primo
post
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 (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
kwiateusz
post
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ść (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) moze nie jest przekazywane
Go to the top of the page
+Quote Post
primo
post
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ść (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) moze nie jest przekazywane



No faktycznie nic nie jest wyświetlane. Ale o czym to świadczy (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
JaRoPHP
post
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 (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
primo
post
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 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
Athlan
post
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ść (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
primo
post
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 (IMG:http://forum.php.pl/style_emoticons/default/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. ?>
Go to the top of the page
+Quote Post
Kayne
post
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 ?
Go to the top of the page
+Quote Post
primo
post
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.
Go to the top of the page
+Quote Post
Turgon
post
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!
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 Aktualny czas: 25.08.2025 - 01:55