Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP obiektowo początki
Forum PHP.pl > Forum > PHP
kosmos
Witam
zaczynam bawić się w programowanie obiektowe i już na początku mam z nim problemy ;/

oto kod html

Kod
<html>
<center>Oto przykładowy formularz</center>
<form method=POST action="Untitled 1.php">
<div>
   <div>
     <input type="text" name="imie">
   </div>
   <div>
    <input type="submit" name="ok" value="OK">
   </div>
</div>
</form>
</html>



chcę aby po wpisaniu w pole text imienia oraz naciśnięciu OK wyświetliło się wpisane przed chwilą imie

  1. <?php
  2.  
  3.  
  4. class formularz{
  5.  
  6.  var $imieklasy;
  7.  
  8.  
  9.  
  10. function __construct(){
  11.  $this->imieklasy=$_SESSION['nazwa'];
  12.  $this->drukuj();
  13.  }
  14.  
  15.  
  16. function drukuj(){
  17.  print'Oto podane przez Ciebie imie:';
  18.  print $this->$imieklasy;
  19. }
  20.  
  21. }
  22.  $_GET[$_POST['imie']];
  23.  $_SESSION['nazwa']=$_POST['imie'];
  24.  $obiekt=new formularz($_SESSION['nazwa']);
  25.  
  26.  
  27.  
  28.  
  29.  
  30. ?>



debuger czepia się już na początku pracy skryptu "$_GET[$_POST['imie']];" nie wie co to imie ;/
nithajasz
A jaka metodą przesyłasz dane z formularza post czy get? Bo sam nie bardzo rozumiem $_GET[$_POST['imie']] mało logiczne..

Wywal tą linijke z tym bo to nawet nie potrzebne jest.. Pozatym jeśli przekazujesz zmienna w sesjach to nie musisz jej podawać przy tworzeniu obiektu klasy bo i tak nie wywołujesz jej w ten sposób w klasie tylko bierzesz ją z sesji..
kosmos
To wynik mojego kombinowania smile.gif


mam teraz taki kod usunałęm to co mówiłes


  1. <?php
  2.  
  3.  
  4. class formularz{
  5.  
  6.  var $imieklasy;
  7.  
  8.  
  9.  
  10. function __construct(){
  11.  $this->imieklasy=$_SESSION['nazwa'];
  12.  $this->drukuj();
  13.  }
  14.  
  15.  
  16. function drukuj(){
  17.  print'Oto podane przez Ciebie imie:';
  18.  print $this->$imieklasy;
  19. }
  20.  
  21. }
  22.  
  23.  $_SESSION['nazwa']=$_POST['imie'];
  24.  $obiekt=new formularz();
  25.  
  26.  
  27.  
  28.  
  29.  
  30. ?>


i niestety ale debuger nie wie co to index imie i nie wiem co to zmienna imieklasy.
Dodam że strukturalnie radzę sobie z php b.dobrze ale widac to wymuszone programowanie obiektowe w php jest dziwne ;|
be2k
skoro debuger mowi ze nie wie co to index 'imie' to znaczy ze zle to jakos wywolujesz.
z tego co napisales mozna wywnioskowac ze formularz masz zapisany w jakims pliku np. 'formularz.html', a kod php z klasa masz zapisany w pliku 'Untitled1.php' (bez spacji oczywiscie - to sie tyczy takze akcji w formularzu). No bo chyba nie wywolujesz samego skryptu z klasa...?

ponadto:
print $this->imieklasy; a nie print $this->$imieklasy;
nithajasz
  1. <?php
  2. $_SESSION['nazwa']='abc';
  3.  
  4.  
  5. class formularz{
  6.  
  7.  var $imieklasy;
  8.  
  9. function __construct(){
  10.  $this -> imieklasy = $_SESSION['nazwa'];
  11.  }
  12.  
  13. function drukuj(){
  14.  return 'Oto podane przez Ciebie imie: '.$this -> imieklasy;
  15. }
  16. }
  17.  
  18. $obiekt=new formularz();
  19. echo $obiekt -> drukuj();
  20. ?>


Troche to zmieniłem bo nie chciało mi się sprawdzać z formularzem, efekt odpalenia powyższego skryptu:

Oto podane przez Ciebie imie: abc

Edit: co do formularza popraw action i powinno chodzić..
Edit 2: nie potrzebnie dajesz odniesienie do funkcji w konstruktorze usunąłem z kodu bo wcześniej nie zauważyłem tongue.gif
empathon
Zdaje Ci się bez sensu bo wymuszasz na sobie jego używanie.
Pomyśl chwilę.
Jaki jest sens użycia obiektu w tym wypadku?
Czy da się może napisać uniwersalną klasę do obsługi formularzy?
Czy taka klasa powinna robić wszystko (wyświetlać, przechwytywać, przechowywać)?

W programowaniu obiektowym nie chodzi o to żeby na siłę pozamykać wszystko w klasy.

Mieszasz request i respond. Jeśli chcesz pobrać request usera nazwij klasę zajmująca się tym Request i niech zajmuje się ona wyłącznie tym. Itd.
kosmos
@ empathon
wiem że w tym przypadku tworzenie obiektu jest bezsensowne ale tworzę go tu dla przykładu zrozumienia składni smile.gif

@ nithajasz

twój skrypt działa elegancko także pod debuggerem PHPEdit którego używam
Ale jak zmieniłem troszkękod na następujący:

  1. <?php
  2.  
  3.  
  4. $_SESSION['nazwa']=$_POST['imie'];
  5.  
  6.  
  7. class formularz{
  8.  
  9.  var $imieklasy;
  10.  
  11. function __construct(){
  12.  $this -> imieklasy = $_SESSION['nazwa'];
  13.  }
  14.  
  15. function drukuj(){
  16.  return 'Oto podane przez Ciebie imie: '.$this -> imieklasy;
  17. }
  18. }
  19.  
  20. $obiekt=new formularz();
  21. print $obiekt -> drukuj();
  22. ?>
  23.  
  24.  
  25. <html>
  26. <form method="POST" action="index.php">
  27. <div>
  28.  <div>
  29.  <input type="text" name="imie">
  30.  </div>
  31.  <div>
  32.  <input type="submit" name="przycisk" value="KLIKNIJ">
  33.  </div>
  34. </div>
  35.  
  36. </form>
  37.  
  38.  
  39. </html>


to wkurza mnie to ze debugger sie czepia a mianowicie daje taki komunikat

PHP Notice: Undefined index: imie in C:\Users\kosmos\Desktop\index.php on line 5 PHP Stack trace: PHP 1. {main}() C:\Users\kosmos\Desktop\index.php:0


To już niby po stronie przeglądarki pod tym programem czyli jak odpalam F9 run smile.gif to prócz okienka formularza pod nim taki własnie komunika się pojawia

natomiast jak wgram plik na serwer i wywołam go z okna przeglądarki to wszstko działa elegancko bez komunikatów.

W takim razie wygląda na to że ten debugger jest do kitu questionmark.gif



PS:Dodam że wszystko znajduje się w pliku index.php

eclipse nie przypadł mi do gustu i już nie wiem jakie środowisko w takim razie wybrać.
empathon
Mówisz, że znasz PHP strukturalnie b. dobrze a nie znasz podstaw?
Serwery hostingowe nie mają włączonego raportowania błędów E_NOTICE dlatego tam błąd nie jest wyświetlany. Przeczytaj uważnie komunikat a zrozumiesz co oznacza.
Jaki debugger? Wiesz w ogóle co to jest? Błędami rzuca Ci parser PHP.

Moja rada: wróć do podstaw bo próbując na razie zagłębiać się w OOP narobisz sobie tylko złych nawyków.
nithajasz
Przyłaczam się do rady @up. Komunikat wyrzuca Ci poprostu informacje, że indeks tablicy do którego się odwołujesz jest nie zdefiniowany, czyli defacto odwołujesz się do czegoś co nie istnieje. To są podstawy php.

EDIT: Swoją drogą jak nie chcesz tego komunikatu to sprawdź czy to coś istnieje..

  1. <?php
  2. if (isset($_POST['imie'])) { }
  3. ?>

Pozdrawiam
kosmos
ok ..

dzięki za pomoc

Komunikat przestał się pojawiać jak wrzuciłem oba kody do osobnych plików.

isset doskonale znam smile.gif dzięki

pomalutku pomalutku i wszystko się opanuje

Dobrej nocy

Pozdrawiam
em1X
jak chcesz się pouczyć oop zacznij na dobrych szkolnych przykładach:

1) stwórz klasę Człowiek. Niech będzie identyfikowany imieniem, nazwiskiem i peselem. Niech potrafi: przywitać się, uścisnąć komuś (innemu obiektowi Człowieka) rękę, powiedzieć jak się nazywa.

2) stwórz klasę Zwierzę. Stwórz klasy pochodne typu pies, kot.. Niech osoba może mieć własnego zwierzaka (ile zechce).

3) stwórz klasę Samochód, który może mieć tylko jednego właściciela, niech potrafi ruszyć, zatrzymać się, skręcić.

Można tak w nieskończoność. Poczytaj o interfejsach, hermetyzacji, na temat poliformizmu. To są dobre początki. Jak zrozumiesz idee obiektowości reszta pójdzie własnym torem.
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.