Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wyswietlanie formularza i zapis danych w jednej funkcji
emil_seba
post 26.05.2010, 10:37:58
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 24.05.2010

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


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
Go to the top of the page
+Quote Post
Cysiaczek
post 26.05.2010, 11:03:14
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




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


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
emil_seba
post 26.05.2010, 11:38:52
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 24.05.2010

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


możesz wyjaśnić mi o co rozchodzi się z tym automatycznym przypisywaniem wartości $_POST atrybutom obiektów ?
Go to the top of the page
+Quote Post
jaslanin
post 26.05.2010, 11:41:38
Post #4





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

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


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. }


Ten post edytował jaslanin 26.05.2010, 11:42:00


--------------------
Good luck and happy PHP'ing
Go to the top of the page
+Quote Post
emil_seba
post 26.05.2010, 11:44:23
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 24.05.2010

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


hmmm.. ale gdzie jest przypisanie do zmiennej np imie watrosci $_POST['imie']questionmark.gif
Go to the top of the page
+Quote Post
nospor
post 26.05.2010, 11:50:13
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Tam, gdzie będziesz wywoływał metodę ustaw()


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
emil_seba
post 26.05.2010, 11:56:57
Post #7





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 24.05.2010

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


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
Go to the top of the page
+Quote Post
nospor
post 26.05.2010, 11:58:53
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Wywołanie funkcji to nie jest deklaracja funkcji.
Zapoznaj się z podstawami
http://pl2.php.net/manual/pl/language.functions.php


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
emil_seba
post 26.05.2010, 12:11:25
Post #9





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 24.05.2010

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


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.
Go to the top of the page
+Quote Post
nospor
post 26.05.2010, 12:18:37
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
emil_seba
post 26.05.2010, 12:38:17
Post #11





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 24.05.2010

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


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?
Go to the top of the page
+Quote Post
jaslanin
post 26.05.2010, 13:16:44
Post #12





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

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


  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

Ten post edytował jaslanin 26.05.2010, 13:18:42


--------------------
Good luck and happy PHP'ing
Go to the top of the page
+Quote Post
emil_seba
post 27.05.2010, 12:10:24
Post #13





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 24.05.2010

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


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

Ten post edytował emil_seba 27.05.2010, 12:11:53
Go to the top of the page
+Quote Post
jaslanin
post 27.05.2010, 12:44:51
Post #14





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

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


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 ?

Ten post edytował jaslanin 27.05.2010, 12:46:27


--------------------
Good luck and happy PHP'ing
Go to the top of the page
+Quote Post
emil_seba
post 27.05.2010, 23:55:57
Post #15





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 24.05.2010

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


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"
Go to the top of the page
+Quote Post
jaslanin
post 28.05.2010, 11:37:08
Post #16





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

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


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ą.


--------------------
Good luck and happy PHP'ing
Go to the top of the page
+Quote Post
emil_seba
post 28.05.2010, 23:33:54
Post #17





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 24.05.2010

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


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
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: 19.07.2025 - 04:47