Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [umiejętności] na podstawie części kodu.
Forum PHP.pl > Inne > Oceny
k_c2or
w związku z tym: http://forum.php.pl/index.php?showtopic=38025 tematem zgłosiło się kilka osób chętnych do współpracy przy tworzeniu nowej wersji mojego serwisu. Każdego z nich poprosiłem o napisanie części jednego z modułów, aby ocenić ich umiejętności i później wybrać tego, którego kod będzie najpoprawniejszy, etc.

Ponieważ sam nie znam php postanowiłem poprosić o ocenę Was, jak mniemam, specjalistów w tej dziedzinie. Pierwszy kod do oceny już mam. Jest to niewielka część modułu newsów, zaledwie odłamek serwisu, który ma na celu sprawdzenie, czy autor poradzi sobie z napisaniem szybkiego, zaawansowanego i bezpiecznego CMS'a.

Link do modułu: http://www.kadysz.e9.pl/tomek/
Link do źródła: http://www.kadysz.e9.pl/tomek/source.zip

Proszę o ocenę, krytykę i propozycje ewentualnych poprawek.
BTW. jeśli ktoś chciałby dołączyć do grona programistów generacjax.pl
proszę o kontakt. wszelkie dane podałem w temacie:
http://forum.php.pl/index.php?showtopic=38025
Major
Tak na szybko:
Jak ustawi się najwyższy poziom błędu, to powinno polecieć pełno notticów(bledow).
bregovic
Aby w pełni ocenić ten kod, dobrze byłoby wiedzieć czy ma działać na PHP4 czy PHP5.

Dwie ciekawych rzeczy:
  • Brak jakiegokolwiek (widocznego) zabezpieczenia zmiennych użytych w zapytaniu do bazy danych (linie 56, 66, 83) - wystarczy wpisać coś w adres i można żegnać się z bazą.
  • Użycie stałych (większość zapytań do bazy) - niekoniecznie błąd, lecz przy większych serwisach to idiotyzm.
Jeśli te zmienne są gdzieś tam zabezpieczone przed wysłaniem ich do bazy, i jakby usunąć te stałe, to kod byłby IMO ok.

Aczkolwiek nie jest to najwydajniejszy kod do wykonania tak prostej funkcjonalności (200+ linii kodu - przy użyciu odpowiednich nażędzi spoko możnaby to zrobić w 100 lub mniej (IMO)).

Trudno powiedzieć więcej nie widząc całości kodu.
bela
Jak dla mnie OOD w całym CMS-ie jest nie poprawne, no bo czemu Newsy dziedziczą po Configu.

Poza tym jeśli to php 4, to powinny być znaczki & w argumentach metod.
k_c2or
Cytat(bregovic @ 2005-12-13 20:01:08)
Aby w pełni ocenić ten kod, dobrze byłoby wiedzieć czy ma działać na PHP4 czy PHP5.

ma działać na PHP4
NuLL
@k_c2or - temu kodowi sporo do doskonalosci - dosc szybko mozesz sie dorobic attackow typu sql_injection.
k_c2or
A co myślicie o takim kodzie?

Jest to wycinek modulu panelu adminitracyjnego, ktory zwraca kod HTML do szablonu. Layer do bazy obrabia odpowiednio dane w zaleznosci od typu.
Zależy mi na porównaniu dwóch tych wycinków (news powyżej i tego poniżej)
pod względem jakości kodu.

  1. <?php
  2.  
  3. class system_settings
  4. {
  5. private $lastSub='';
  6.  
  7. public function run($action)
  8. {
  9. $html='';
  10.  
  11. switch ($action)
  12. {
  13. default:
  14. case 'groups':
  15. $html=$this->groups();
  16. break;
  17.  
  18. case 'newgroup':
  19. $html=$this->newGroup();
  20. break;
  21.  
  22. case 'delete':
  23. $html=$this->delete();
  24. break;
  25. }
  26.  
  27. return $html;
  28. }
  29.  
  30. public function getName()
  31. {
  32. return "System settings";
  33. }
  34.  
  35. public function getSubName()
  36. {
  37. return $this->lastSub;
  38. }
  39.  
  40. private function newGroup()
  41. {
  42. $request=httpContext::instance()->request;
  43.  
  44. if($request->contains('group_name','group_key','group_description'))
  45. {
  46. $group_name=$request->map(POST,'group_name','',new stringCheck(3));
  47.  
  48. $group_key=$request->map(POST,'group_key','alphanumeric',new stringCheck(3));
  49.  
  50. $group_description=$request->map(POST,'group_description','string');
  51.  
  52. if($request->noErrors())
  53. {
  54. $db=db::instance();
  55.  
  56. $db->insert('settings_groups',array('gkey'=>$group_key,'name'=>$group_name,'description'=>$group_description));
  57.  
  58. if($db->affectedRows())
  59. {
  60. acpMessages::add(M_INFO,'New group has been successfully added.');
  61. return $this->groups();
  62. }
  63. }
  64. }
  65.  
  66. $form=new acpForm('Add new settings group');
  67.  
  68. $form->add(new textField('Group name*','group_name',''));
  69.  
  70. $form->add(new textarea('Group description','group_description',''));
  71.  
  72. $form->add(new textField('Group key*','group_key','','Needed when you want to access variable from specified group'));
  73.  
  74. $this->lastSub="New group";
  75.  
  76. return $form->fetch();
  77. }
  78.  
  79. private function groups()
  80. {
  81. $db=db::instance();
  82.  
  83. $groups=$db->getIterator("SELECT * FROM settings_groups");
  84.  
  85. $table=new acpTable('Groups',$groups);
  86.  
  87. $table->setActions('system/settings','sg_id',array('edit.gif'=>'edit/%ID%','delete.gif'=>'delete/%ID%'));
  88.  
  89. $table->setFields('name','description');
  90.  
  91. $table->setHeader('Name','Description','&nbsp;');
  92.  
  93. $this->lastSub="Groups";
  94.  
  95. return $table->fetch();
  96. }
  97.  
  98. private function delete()
  99. {
  100. $id=httpContext::instance()->request->map(GET,'3','int');
  101.  
  102. if($id>0)
  103. {
  104. $db=db::instance();
  105.  
  106. $count=$db->count('settings',array('sg'=>$id));
  107.  
  108. if($count>0)
  109. {
  110. acpMessages::add(M_WARNING,'Requested group must be empty before removing');
  111. }else
  112. {
  113. if($db->delete('settings_groups','sg_id='.$id))
  114. {
  115. acpMessages::add(M_INFO,'Group has been successfully removed.');
  116. }else
  117. {
  118. acpMessages::add(M_ERROR,'Failed to remove specified group.');
  119. }
  120. }
  121. }
  122. return $this->groups();
  123. }
  124. }
  125.  
  126. ?>
sf
A gdzie komentarze ;?
NuLL
[OT]@sf - czego dot ten post ?[/OT]
dr_bonzo
@NuLL: chyba chodzilo o komentarze w kodzie.
Przydaly by sie bo mamy klasy system_settings, funkcje jak: groups() delete() run() i nie wiadomo (po ich nazwie i nazwie klasy) co maja robic.
Kinool
troche poza tematem ale ciekaw jestem jaka sawke za godzine lub za wykonana prace oferuje zleceniodawca, skoro chce wylonic najlepszego programiste jaki sie do niego zglosil, oczekuje pelnego profesionalizmu to mam nadzieje ze wynagrdzenie dla tego wybranca jest adekwatne do wymagan smile.gif ... ale to juz sprawa stron jak sie dogadaja smile.gif

teraz do nikogo nic nie przyklejam ale nizadko mozna sie spotkac z podjesciem typu "maximum za minimum" :/ do przyszlych "pracodawcow" mam taki maly apel smile.gif jezeli oczekujecie profesionalizmu to przygotujcie sie na profesionalna cene za usluge smile.gif
ghostrider
jesli nad projektem ma pracowac kilku programistow, a tak mnie wyika z postu to nawet nie patrze na poprawnosc kodu jesli nie widze komentarzy.

Bez komentarzy skad jak mam wiedziec co toto ma robic, jak dzialac, co zwracac, jak podlaczyc do innego kawalka kodu. Na GG mam pytac kolegów miale wysyłać, paranoja!

kolega CHAOS zawita w progi takiego projektu w ciagu tygodnia. I z czegos co mialo byc szybkie, fajne itp, zrobi sie papka.

Mimio tego wszystkiego to drugi kod wyglada na lepszy gatunkowo (nie znaczy ze jest, nie studiowalem go), widac stosowanie wzorców
Major
Wg. mnie jest tworzonych za dużo obiektów. Jeden formularz = 4 obiekty?
k_c2or
Cytat(Kinool @ 2005-12-14 15:08:24)
troche poza tematem ale ciekaw jestem jaka sawke za godzine lub za wykonana prace oferuje zleceniodawca, skoro chce wylonic najlepszego programiste jaki sie do niego zglosil, oczekuje pelnego profesionalizmu (...)

Po pierwsze w ogłoszeniu podałem stawkę, więc Ci którzy się zgłosili jednoczesnie zgodzili się na taką a nie inną stawkę, to chyba proste i logiczne. Po drugie nie szukam pełnego profesjonalizmu a próbuję wyłonić najlepszego z tych, którzy się zgłosili. Bo przecież mogę zapłacić xxx komuś kto owszem pisze w php ale pisze na poziomie początkującego, a równie dobrze mogę zatrudnić kogoś kto jest profesjonalistą, pracuje gdzieś tam jako programista a tu chce sobie po prostu dorobić.
Vengeance
Cytat
* kwota max 3-cyfrowa.


To się nazywa "podanie stawki" ? rotfl.
Czyli płacisz max: 9.99 ;]
k_c2or
Cytat(Vengeance @ 2005-12-15 16:50:34)
To się nazywa "podanie stawki" ? rotfl.
Czyli płacisz max: 9.99 ;]

nie, tzn. np. 999, ale nie więcej niż 1000 bo mnie po prostu na to nie stać...
durny komentarz z Twojej strony. chyba wiadomo o co chodzi...
jeśli ktoś chce to zrobić za 100, to zrobi to za 100, jak chce za to 999 to za tyle zrobi.
dobra.. niech będzie, że STAWKA: DO 1000PLN (czyt. tysiąca złotych)
lepiej?
NuLL
Starczy tego OT na troche winksmiley.jpg
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.