Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Przejście parametrów przez __set
Yhy
post
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 10.10.2011

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


Mam następny problem, fragment kodu -

  1. class Avatar{
  2.  
  3. public $file_size;
  4. public $file_type;
  5. public $file_tmp;
  6. public $file_name;
  7.  
  8. function __set($name, $value){
  9. if( ($name = "file_size") && ($value < 20000)){
  10. return $this->file_size = $value;
  11. }
  12. elseif( ($name = "file_type") && ($value == "image/jpeg" or "image/png")){
  13. return $this->file_type = $value;
  14. }
  15. else{
  16. echo 'Plik nie spełnia wymagań.';
  17. }
  18. }
  19.  
  20. public function upload(){
  21.  
  22. if( move_uploaded_file($this->file_tmp, "avatars/$this->file_name")){
  23. echo 'Plik został zauploadowany.';
  24. }
  25.  
  26.  
  27. }
  28.  
  29. }


  1. <?php
  2.  
  3. echo '<form action="#" method="POST" enctype="multipart/form-data">
  4. <input type="file" name="avatar">
  5. <input type="submit" name="submit" value="Wgraj">
  6. </form>';
  7.  
  8. if( isset($_FILES['avatar'])){
  9.  
  10. include('class.Avatar.php');
  11.  
  12. $avatar = new Avatar;
  13.  
  14. $avatar->$file_size = $_FILES['avatar']['size'];
  15. $avatar->file_tmp = $_FILES['avatar']['tmp_name'];
  16. $avatar->file_name = $_FILES['avatar']['name'];
  17.  
  18. $avatar->upload();
  19. }
  20.  
  21.  
  22. ?>


Błąd:

Cytat
Notice: Undefined variable: file_size in index.php on line 32
Plik został zauploadowany.


Problem - nie widzę błędu, ponieważ z tego co wiem znak dolara powodu przefiltrowanie parametru przez funkcję __set. Ponadto plik którzy wrzucam jest zbyt duży, więc powinien zostać odrzucony.

Ten post edytował Yhy 10.10.2011, 15:24:48
Go to the top of the page
+Quote Post
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


$avatar->$file_size = $_FILES['avatar']['size'];

podmień na

$avatar->file_size = $_FILES['avatar']['size'];
Go to the top of the page
+Quote Post
Yhy
post
Post #3





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 10.10.2011

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


Okej, do tego już doszedłem, z tym że funkcja __set nadal nie filtruje mi danych i przepuszcza pliki większe niż 20kb.

Ktoś może mi pomóc?

Ten post edytował Yhy 10.10.2011, 17:12:07
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




yhym chlopie, zapoznaj się z podstawami języka, w którym piszesz :/

if( ($name = "file_size")
= - przypisanie
== - porównanie

elseif( ($name = "file_type") && ($value == "image/jpeg" or "image/png")){
$value == "image/jpeg" or "image/png" - co to jest za jakis skrótowiec? W if mabyć warunek a nie jakiś skrót myślowy...

tak ma być
$value == "image/jpeg" or $value == "image/png"

Poza tym poczytaj o metodach magicznych __set oraz __get, a konkretnie kiedy one działają - tzn. kiedy są odpalane, bo u Ciebie nie będę odpalane nigdy.
Go to the top of the page
+Quote Post
Yhy
post
Post #5





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 10.10.2011

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


Z tego co wiem, to przed nazwą pola muszę dodać znak dolara, np.

  1. $obiekt->$pole = 20;


Z Tym że wtedy sypie mi błędem. Co do porównywania, przeoczenie.

Ten post edytował Yhy 10.10.2011, 19:22:24
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




A skąd ty to wiesz? Bo to jakaś bzdura.

Tu masz opisane kiedy działają __set
http://pl.php.net/manual/pl/language.oop5....loading.members
Zapoznaj się z podaną tam teorią, zapoznaj się z podanym przykładem, który teorię wyjaśnia. Odpal go sobie na kompie, zobacz co się dzieje.
Choć i tak wszystko wyjaśnia to jedno zdanie:
Cytat
__set() is run when writing data to inaccessible properties.
Powód edycji: [nospor]:
Go to the top of the page
+Quote Post
Yhy
post
Post #7





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 10.10.2011

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


http://www.youtube.com/watch?v=ZXrNeRcI9Xc

stąd, no ładnie, człowiek nie ma się z czego uczyć, a jak coś znajduje to jeszcze same głupoty.

Dzięki nospor, niestety nieudolnie się dokształciłem, poczytam.
Go to the top of the page
+Quote Post
nospor
post
Post #8





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




Ałć.... zwracam ci honor. Faktycznie, nie Twoja wina, że na taki "zajebisty" kurs trafiłeś :/ Jak ludzie mogą coś takiego wypuszczać w świat?

Nawet tam jest porównanie tak zapisane:
if ($zm = 'costam')
:/

Choć wywołanie:
$obiekt->$pole = 20;
Też jest poprawne, ale tylko wówczas gdy istnieje zmienna $pole. Tutaj poprostu dobieramy się w dynamiczny sposób do pól.
Ale w tym kurscie co dałeś linka koleś to skopał i totalnie źle wyjaśnił, stąd nie miało to żadnego sensu w kodzie co ty pokazałeś w tym temacie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 04:34