Cześć.
Prosiłbym Was o opinię kodu, do którego link podrzucam niżej. Jest to proste forum - nie ma tu raczej jakiś rozbudowanych rzeczy, bo jest to mój pierwszy projekt w PHP, ale nawet pisząc takie coś, poznałem wiele nowych zagadnień Chciałbym dowiedzieć się co należy poprawić w przyszłości. Jest to projekt bez frameworków do php. Struktura - brak podfolderów leży, ale nie chciało mi się już z tym mieszać Poza tym wydaje mi się, że trochę pomieszałem rozbicie funkcji na klasy - na przykład komentarze w klasie postów. Dlatego dobrze gdybyście podpowiedzieli mi, co warto zmienić na przyszłość
https://github.com/selfmadeking/simple-forum-php
oraz podgląd jak to działa (trzeba założyć konto, dowolny e-mail jakiś login i hasło (szyfrowanie password_hash hehe), aby mieć dostęp do forum - swoje posty, komentarze, sygnaturę można edytować):
https://imlimitless.000webhostapp.com/index.php
Dodatkowe pytanie - czy Waszym zdaniem to już czas, żeby próbować pisać coś z frameworkiem w php np. Symfony? Czy jeszcze coś napisać? Macie pomysł co?
Pozdrawiam i krytykujcie jak się tylko da!
Klasa nie ma prawa mi robic zadnego echo. Leci wyjatek to leci.
Takie potworki jak ten
if(isset($_SESSION['user_session']))
{
return true;
}
else{
return false;
}
zapisuje sie poprostu tak
return isset($_SESSION['user_session']);
Nie ma sensu tworzyc 1000 lini jak mozna 10
Naucz sie oddzielac logike od wygladu, akcje do widoku. MVC sie klania.
Wypadaloby juz pisac nowe rzeczy w php7
Funkcja nie moze zwracac albo tekstu albo false
Jak post ma milion odpowidzi to skrypt ci padnie. Poczytaj o stronicowaniu
thePosts - co to za nazwa funkcji? Za cholere nie wiem co to ma niby robic po nazwie
Plik db.php a ty tam inicjalizujesz forum temat post i usera... eeee?
Ten kod to generalnie sieczka do poprawy. Jedyne na plus ze jakos ustrzegles sie przed banalnymi dziurami.
edit:a nie, cofam ostatnie. Plik podatny na banalny XSS
edit2:
https://imlimitless.000webhostapp.com/topic.php?id=100000
Topic not found.
a pod spodem
Posts not found for this topic.
No jak nie ma tematu to i nie dziwota ze nie ma postow. Do etapu pobierania postow gdy nie ma tematu nie powinno w ogole dochodzic
edit x:
if($content == "" || strlen($content) == 0 || !$content)
a moze poprostu
if(empty($content))
? Prawda ze krocej i bardziej czytelniej?
Powiem ta. Nie jest tragicznie. Jest słabo ale nie tragicznie.
Dodam od siebie kilka uwag ogólnych bo o kodzie to można godzinami gadać. No to lecimy:
- PHP7 - to już powinna być podstawa. Ja wiem że bardzo dużo (90%) kursów jest na podstawie PHP5 no ale warto poszukać w necie na zasadzie "Co nowego w PHP7"
- namespace - to już jest od bardzo dawna standard. Pozwala Ci logicznie uporządkować kod.
- struktura plików i konwencje nazwenictwa. - Poczytaj sobie o PSR-0 i PSR-2 bo bardzo ułatwi Ci to pracę. Nie trzymaj wszytskich plików w 1 katalogu. Rozdzielaj je logicznie.
- Nie mieszamy HTML z PHP.
- Używaj spacji jako indentacji. Ja wiem że gówno-burza zaraz z tego wyjdzie ale jednak spacja to spacja - wszędzie wygląda tak samo.
- Staraj się eliminować zagnieżdżenia oraz zbędne instrukcje IF np:
Nie przesadzaj. Widzieliśmy tu dużo więcej gorszego kodu. Ten trzyma się jako tako. Jak na początkującego albo młodego Juniora to nie jest źle
return $stmp->rowCount() > 0;
return (bool)$stmp->rowCount();
Yup jak najbardziej zalecane
Jak dla mnie bardzo słabo, podstawowy problem jak tu widzę, to brak celu.
Pisać takie coś, ale po co? By się nauczyć, jak się pisało skrypty PHP 20 lat temu, bez OOP, frameworków i bibliotek?
Nie ma sensu pisać takich rzeczy, bo nie dość, że się niczego nie nauczysz to jeszcze nabierzesz złych nawyków i potem trzeba Ciebie będzie oduczyć.
I nie chodzi tu o szczegóły typu:
else if($user_email == "") { $info[] = "Provide e-mail!"; } else if(!filter_var($user_email, FILTER_VALIDATE_EMAIL)) { $info[] = "Enter a valid e-mail!"; } else if($user_pass == "") { $info[] = "Provide password!"; }
if($user->login($user_name, $user_email, $user_pass)) { http://www.php.net/echo '<meta http-equiv="refresh" content="0; url=home.php">'; } else { $error[] = "Wrong login or password. Try again!"; }
Okej. A więc dziękuję Wam za solidne odpowiedzi. Widzę co robiłem tragicznie, co należy przerobić. Pilsener - wybacz, ale to mój pierwszy "większy" projekt w php i raczej nie jestem w stanie myśleć, tak jak Ty o środowiskach ... jakich? i całej reszcie, ponieważ po prostu tego jeszcze nie poznałem. Mam się za takie rzeczy zabierać, znając ledwo podstawy składni php? Gdzie nawet teraz widać braki ("<?php echo" zamiast "<?= "). Od czegoś trzeba zacząć. Napisałem takie coś, kod jestem świadom, że jest mocno słaby, ale starałem się, czytałem różne tematy i próbowałem napisać to w miarę dobrze Oby tak dalej i będzie lepiej.
Ktoś dobrze wspomniał, że wiele poradników, fragmentów kodu dostępnych w Internecie jest słabej jakości (np. mysqli w 2018 roku). Już nawet rejestracja i logowanie było trudne do napisania dla mnie, bo przeszukałem z 50, jak nie więcej poradników (głównie w języku angielskim) i dopiero znalazłem jeden w miarę solidny poradnik, który wykorzystywał password_hash i w miarę dobre praktyki.. No nic, spisuję swoje błędy i zabieram się do dalszej nauki.
Na pewno do usłyszenia, bo dzięki takiej ocenie kodu wiem co robię źle i mogę poprawiać swoje błędy w przyszłości
Pozdrawiam i dziękuję Wszystkim za pomoc!
Warto korzystać z katalogów:
taki plik jak:
class.post.php lepiej będzie mu w /class/Post.php
Wtedy możesz użyć autoloader i który będzie szukał klas tylko w jednym katalogu i jego podfolderach.
Dosyć normalne jest, chociaż zależy od hostingu, aby rozdzielić część kodu wykonawczego od dostępu przez HTTP i tworzy się wtedy katalog /public/ pod który jest podpinana domena/subdomena. A w nim wszystkie style .css, wszystkie obrazy i skrypty .js, tylko jeden index.php wskazujący pliki przed katalogiem /public/
Dzięki temu nikt np. przypadkiem nie podejrzy pliku: database.sql w którym będzie np. domyślnie ustawione hasło admina
Jeszcze hosting: najtańszy hosting będzie 1000x lepszy od tego bezpłatnego.
Polecam tutaj: https://linuxpl.com/ za 50zł spokojnie wystarczy.
A ma dostęp do SSH (czyli możesz łączyć się z githubem i aktualizować kod strony na serwerze) (zamiast FTP)
Przestrzeni także wystarczy na dużo, dużo projektów.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)