Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobranie zmiennej z formularza
Forum PHP.pl > Forum > PHP > Object-oriented programming
primo
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. ?>
Athlan
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
primo
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
kwiateusz
a weź wyech uj $_GET['$tmax'] czy ma jakaś wartość winksmiley.jpg moze nie jest przekazywane
primo
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
JaRoPHP
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.
primo
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
Athlan
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
primo
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. ?>
Kayne
Masz włączone register_globals ?
primo
Cytat(Kayne @ 4.03.2007, 19:59:21 ) *
Masz włączone register_globals ?



Tak.
Turgon
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!
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.