Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyswietlanie formularza i zapis danych w jednej funkcji
Forum PHP.pl > Forum > PHP
emil_seba
Witam mam taki problem otóż mam klasę
  1. //plik class.Czlowiek.php
  2. class czlowiek
  3. {
  4. private $Imie;
  5. private $nazwisko;
  6.  
  7. public function wypelnijDane()
  8. {
  9. echo '<form action="'.htmlentities($_SERVER['PHP_SELF']).'" method= "POST">
  10. <input type = "text" name = "imie"/>
  11. <input type = "text" name = "nazwisko"/>
  12. <input type ="submit" Value"dodaj!!">
  13. </form>';
  14. }
  15. public function ustaw()
  16. {
  17. $this->Imie = $_POST['imie'];
  18. $this->Nazwisko = $_POST['nazwisko'];
  19. }
  20. public function dodaj()
  21. {
  22. $query = "INSERT INTO uzytkownicy SET imie ='$this->Imie', nazwisko = '$this->nazwisko'";
  23. $result = mysql_query($query);
  24. if($result) echo 'wstawiono uzytkownika';
  25. else echo 'blad'.mysql_error();
  26. }
  27.  

I teraz chcial bym utworzyc odnosnik do wstawiania uzytkownika:
  1. //plik index.php
  2. $require_once('class.Czlowiek.php');
  3. $pomoc = 1;
  4. echo "<a href = \"?show=".$pomoc."\">Utworz ucznia</a><br />"
  5. if(isset($_GET['show']))
  6. {
  7. $czlowiek = new Czlowiek();
  8. $czlowiek -> wypelnijDane();
  9. $czloweik -> ustaw();
  10. $czlowiek -> dodaj()
  11. }


Problem w tym ze jezeli tak to wywolam to tylko wyswietli sie formularz nie ustawiajac zmiennych Imie i Nazwisko gdyz tablica $_POST jest pusta.
Nie chcial bym do kazdej funkcji tworzyc osobnego odnosnika by sie wywolala. Wiem ze jezeli funkcje ustaw i dodaj wywale poza ifa to bedzie dzialac, ale co zrobic gdy np mam inna klase i w niej mam funkcje dodajCzlowieka ktora zawiera wywolanie tych 3 funkcji klasy czlowiek
  1. require_once('class.Czlowiek.php')
  2. class nadCzlowiek
  3. {
  4. $czlowiek;
  5. public function dodajCzlowieka
  6. {
  7. $this-> czlowiek = new Czlowiek;
  8. $this->czlowiek ->wypelnijDane();
  9. $this->czlowiek->ustaw();
  10. $this->czlowiek->dodaj();
  11. }
  12. }
  13.  
  14.  
  15. //plik index.php
  16. $nadczlowiek = new nadCzlowiek();
  17. $nadczlowiek -> dodajCzlowieka()


Bardzo prosze o pomoc bo nie wiem jak sobie poradzic z tym problemem
Cysiaczek
Słowa klucze - enkapsulacja i parametryzacja
Błędy:
- echo w ciele metod - niczym nieuzasadnione
- automatyczne przypisywanie wartości z $_POST do atrybutów obiektu

Jeśli rozwiążesz te dwa problemy to Twój problem się rozwiąże sam. smile.gif
emil_seba
możesz wyjaśnić mi o co rozchodzi się z tym automatycznym przypisywaniem wartości $_POST atrybutom obiektów ?
jaslanin
jest:
  1.  
  2. public function ustaw()
  3. {
  4.  
  5. $this->Imie = $_POST['imie'];
  6. $this->Nazwisko = $_POST['nazwisko'];
  7.  
  8. }


a powinno być

  1. public function ustaw($imie, $nazwisko)
  2. {
  3.  
  4. $this->Imie = $imie;
  5. $this->Nazwisko = $nazwisko;
  6.  
  7. }
emil_seba
hmmm.. ale gdzie jest przypisanie do zmiennej np imie watrosci $_POST['imie']questionmark.gif
nospor
Tam, gdzie będziesz wywoływał metodę ustaw()
emil_seba
czyli moja funkcja powinna wyglądać tak :
  1. public function ustaw($imie, $nazwisko)
  2. {
  3. $imie = $_POST['imie'];
  4. $nazwisko = $_POST['nazwisko'];
  5. $this->Imie = $imie;
  6. $this->Nazwisko = $nazwisko;
  7. }
questionmark.gif

nie rozumiem.. to po co te argumenty w funkcji?? Proszę o wyjaśnienie
nospor
Wywołanie funkcji to nie jest deklaracja funkcji.
Zapoznaj się z podstawami
http://pl2.php.net/manual/pl/language.functions.php
emil_seba
tak wiem, ale nie rozumiem jak mam napisać taką funkcje ? Wyżej napisano że powinienem napisać funkcje z dwoma argumentami, oraz że powinienem w tej funkcji przypisać dane z $_POST do zmiennych, wiec nie wiem co maja zawierać te argumenty w funkcji. Jedyne co mi przychodzi do głowy to wywołanie funkcji z argumentami $_POST
  1. definicja funkcji
  2. public function ustaw($imie, $nazwisko)
  3. {
  4. $this->Imie = $imie;
  5. $this->Nazwisko = $nazwisko;
  6. }
  7.  
  8. wywolanie funkcji
  9. $obiekt -> ustaw($_POST['imie'], $_POST['nazwisko'])

ale nie działa tak jak chce.
nospor
odpowiadalem jedynie na Twoj ostatni post.
Teraz przeczytalem temat i masz inne bledy
Cytat
Problem w tym ze jezeli tak to wywolam to tylko wyswietli sie formularz nie ustawiajac zmiennych Imie i Nazwisko gdyz tablica $_POST jest pusta.
Nie chcial bym do kazdej funkcji tworzyc osobnego odnosnika by sie wywolala. Wiem ze jezeli funkcje ustaw i dodaj wywale poza ifa to bedzie dzialac, ale co zrobic gdy np mam inna klase i w niej mam funkcje dodajCzlowieka ktora zawiera wywolanie tych 3 funkcji klasy czlowiek

No bo chcesz pójść po najmniejszej linii oporu i wszystko zawrzec w 3 funkcjach w ktorych masz burdel na kółkach.
Owszem, możesz tak zrobić, nikt ci nie broni. Musisz wiec przed dodawaniem rekordu sprawdzac czy POST poszedl (np. isset($_POST['imie'])). Wowczas bedzie sie dodwalao wtedy kiedy trzeba.
emil_seba
tylko ze próbuje już 2 dzień i wniosek mam jeden jeżeli tak wywołam jak wyżej to te dane nie zostaną ustawione sama funkcja ustaw się wykona ale jak mam w niej warunek if(!empty($_POST['imie'])) to nie ustawia mi zadnych zmiennych bo o ile dobrze rozumiem to on wchodzi do funkcji
  1. public function dodajCzlowieka()
  2. {
  3. public function wypelnijDane();
  4. public function ustaw()
  5. public funciton dodaj()
  6. }

wykonuje wszystkie 3 funkcje na raz czyli w funkcji WypelnijDane nie zostalo jeszcze nic wyslane w $_POST a pozostałe już sie wykonały, jezeli ustawie warunek w ustaw() sprawdzajacy czy cos jest w $_POST to to tez nic nie da bo $_POST bedzie puste dopoki nic nie wysle a jak juz wysle to funkcja ustaw() dawno sie juz wykonala.

Ma ktos moze pomysl jak to inaczej rozwiac tzn jak utworzyc w funkcji klasy jednego obiektu obiekt innej klasy?
jaslanin
  1.  
  2. public function dodajCzlowieka
  3.  
  4. {
  5. $this-> czlowiek = new Czlowiek;
  6. $this->czlowiek ->wypelnijDane();
  7.  
  8. if ( /* formularz został wysłany */) {
  9. $this->czlowiek->ustaw();
  10. $this->czlowiek->dodaj();
  11. }
  12.  
  13. }


ale ładniej byś to zrobił jakbyś rozbił na dwie osobne rzeczy wyświetlanie formularza, i ustawianie/dodawanie człowieka
emil_seba
no tylko tak nie chce mi działać sad.gif jeżeli w ifie zrobię warunek if(!empty($_POST['imie'])) to funkcje ustaw i dodaj nie wykonają się sad.gif a innego pomysłu na sprawdzenie czy formularz został wysłany nie mam
jaslanin
dodaj pole input:

Kod
<input type="hidden" name="formularzWyslany" value="1" />


i sprawdzaj odpowiednio czy formularzWyslany ma wartość 1

a ten if jest po to żeby te funkcje się nie wykonały, jeżeli nie masz wypełnionego formularza to skąd weźmiesz imię i nazwisko ?
emil_seba
tak ja to rozumiem ale po prostu obojętnie czy ustawie ifa czy nie to nie działa tak jak chce ponieważ te 3 funkcje są wykonywane w 1 a wykonanie pierwsze potrzebuje chyba "odświeżenia strony". Na mój chłopski rozum to on wykonuje pierwsza (nie odświeża sobie tablicy $_POST) i wykonuje następne ponieważ wykonywane są w 1 funkcji dopiero po wyjściu z funkcji "odświeża tablice"
jaslanin
masz pusty formularz, to co jest w instrukcji warunkowej się nie wykonuje, wypełniasz formularz, przyciskasz wyślij (to jest pewnie to twoje odświeżenie o którym piszesz), tablica $_POST jest uzupełniana, warunek zachodzi, ustaw i dodaj się wykonują.
emil_seba
ale wstaw te 3 funkcje w 1 i wywołaj ją.. mi za każdym razem nie działa... zrobiłem to inaczej formularz zrobiłem jako osobna stronę wykonywana po kliknięciu na link i mającą pole ukryte (jak ktoś wyżej polecił) wtedy sprawdzam czy te pole ukryte ma wartość jeżeli tak to wykonuje funkcje ustaw() i dodaj(), może ktoś mi poradzić jak otworzyć stronę z formularzem w stronie glownej(idzie tak wogole?) aby zachowac caly layout strony bez ponownego definiowania go w stronie z formularzem, z góry dziękuje za odpowiedź i poprzednie odpowiedzi
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.