• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ocena systemu logowania i rejestracji PHP OOP

VPS Starter Arubacloud
0 głosów
573 wizyt
pytanie zadane 26 marca 2017 w Nasze projekty przez ThePatrykOOO Dyskutant (8,380 p.)
Witam, po niecałym tygodniu zmagań z nauką i pisaniem projektu do konkursu daj się poznać skończyłem tworzyć system logowania i rejestracji. Jak na razie wykonałem niewiele. Z góry dzięki dla tych co pomogli mi w moich problemach z ogarnięciem OOP PHP.

Link do kodu: https://github.com/ThePatrykOOO/SocialSite

Link do wpisu z mojego bloga Daj się Poznać: http://patrykfilipiak.pl/social-site-2
komentarz 26 marca 2017 przez efiku Szeryf (75,160 p.)
Podstawy podstaw, średnio oop, duży bałagan w kodzie.

2 odpowiedzi

+3 głosów
odpowiedź 26 marca 2017 przez Boshi VIP (100,240 p.)
edycja 26 marca 2017 przez Boshi

Niewiele to to ma wspólnego z oop. 

Klasa connect do wywalenia, skoro nic nie robi oprócz łączenia się z bazą jest bez sensu. Tym samym rozszerzanie tej klasy jest nietrafione. Stwórz funkcję i przekazują ją przez DI (wstrzykiwanie zależności), private $pdo;

Brak autoloadera psr-4

wszystko w globalnym namespace

brak kodu php 7

Klasa error jest bezużyteczna

Brak bindowania parametrów

SignUp

 

pola w klasie signUp powinny być parametrami

metody walidujące prywatne- ba ich tam w ogóle nie powinno być, zbudował bym osobny walidator

Ta klasa powinna być metodą tak w ogóle

 

Klasa page 

metoda youlogged, bez sensu

nazwa klasy nic nie mówi o tym do czego służy

metoda login to nie w takiej klasie

Co to za dziwny sposób logowania na raty?  masz wyciągać symetrycznie z hasłem ... 

Sesja nie powinna trzymać tylu informacji- po co ci to? tylko login wystarczy. Reszta może być czytana z bazy/cachu

 

Generalnie do przepisania od 0...

komentarz 26 marca 2017 przez HaKIM Szeryf (87,590 p.)

Dodam, że nazwy metod również nie są górnej półki:

public function youlogged()
{
    ...
}

Metoda Login w klasie Page również mówi tyle, ile odpowiedź „tam”, gdy pytamy o pilot.

Reszty nawet nie sprawdzam.

Przdałby się również standard PSR-1 i PSR-2.

No i przydałby się wzorzec: Front controller i do tego jakiś router. Od siebie polecam: FastRoute.

Ps. Jak PSR-4 to i Composer.

komentarz 26 marca 2017 przez xandros Nałogowiec (29,450 p.)

> Od siebie polecam: FastRoute.

Mi się szybciej robi na slim3, ale kto co lubi :>

komentarz 26 marca 2017 przez ThePatrykOOO Dyskutant (8,380 p.)
Klasa connect została stworzona dlatego że ktoś mi powiedział, że tworzę klasę Page, gdzie obsługuje całą witrynę dlatego ją stworzyłem i tam przechowywać połączenie? Czy lepiej będzie przenieść ją do klasy Page?

Klasa Error pokazuje błędy jakie zostały wychwycone poprzez walidację formularza.

youlogged sprawdza czy user jest zalogowany

To jest pierwszy program obiektowy jaki napisałem, więc fajnie że mówisz mi gdzie trzeba co poprawić.
komentarz 26 marca 2017 przez HaKIM Szeryf (87,590 p.)

Popracuj nad nazwami.

Tutaj trochę o czystym kodzie:

https://drive.google.com/file/d/0B_m8fC4d_bzNWDROajVnd3dlYUk/view?usp=sharing

Klasa connect została stworzona dlatego że ktoś mi powiedział, że tworzę klasę Page, gdzie obsługuje całą witrynę dlatego ją stworzyłem i tam przechowywać połączenie? Czy lepiej będzie przenieść ją do klasy Page?

Zazwyczaj obsługujesz witryny w index.php, folder public. Jest to wzorzec Front controller.

Przykład;

https://github.com/HaKIMus/slim-template/blob/master/public/index.php

2
komentarz 26 marca 2017 przez Boshi VIP (100,240 p.)

A ja dalej nie wiem co używać do mikro mikro projektów jako routa :D Chyba zainstaluje mikro kernela, albo komponent routingu, stworzę sobie bootstrapa config i na tym będę klepał jakieś mikro gówno serwisy, typu crud 2 tabelowy :D

 

ThePatrykOOO

Myslisz w kategoriach działania a nie projektowania, dlatego ten twój kod ma tyle z OOP wspólnego co pies z kotem. Niby oba zwierzaki a jednak całkowicie inne.

 

komentarz 26 marca 2017 przez ThePatrykOOO Dyskutant (8,380 p.)

Dlaczego gdy chcę bindować parametry to to nie działa. Kiedyś z tym próbowałem to nie działało i teraz też. Kawałek kodu:

$sql = "SELECT * FROM users WHERE email=':email'";
		$question = $this->connect()->prepare($sql);
		$question->bindValue(':email', $this->emailLogin, PDO::PARAM_STR);
		$question->execute();

 

komentarz 26 marca 2017 przez Boshi VIP (100,240 p.)
Przecież Ty masz bindować PARAMETER  a nie atrybut klasy... i po cholerę ci i apostrofy i cudzysłów?
komentarz 26 marca 2017 przez xandros Nałogowiec (29,450 p.)
Boshi, popraw mnie, jesli sie myle, ale w bindValue parametr nie musi mieć ":"?
komentarz 26 marca 2017 przez Boshi VIP (100,240 p.)
Może, nie musi, ja zawsze pisałem :zmienna, to jest zdaje się wymiennie.

 

http://php.net/manual/en/pdo.prepare.php
+1 głos
odpowiedź 26 marca 2017 przez CzikaCarry Szeryf (75,340 p.)
edycja 26 marca 2017 przez CzikaCarry

No to zacznijmy:

  • Przesiądź się na dyrektywę use i twórz namespace'yjest to o wiele lepsze od include'ów
  • Twój pomysł na połączenie z bazą byłby dobry, gdyby nie to, że jest zły. Dlaczego? Otóż dlatego, że za każdym razem, gdy chcesz użyć bazy  danych zakładasz nowe z nią połączenie, zamiast korzystać z tego samego. W sumie to kod kończy swój żywot po jego wykonaniu, no ale jednak trochę to takie nieeleganckie.
  • Przejdźmy do funkcji register
    public function register($name=null, $surname=null, $birth=null, $email=null, $password=null)
    	{ 
    		$this->name = $name;
    		$this->checkName($name);
    		$this->surname = $surname;
    		$this->checkSurname($surname);
    		$this->birth = $birth;
    		$this->checkBirth($birth);
    		$this->email = $email;
    		$this->checkEmail($email);
    		$this->password = $password;
    		$password_hash = $this->checkPassword($password);
    		// Wszystko jest OK można rejestrować usera.
    		if (!isset($_SESSION['errorRegister']) || count($_SESSION['errorRegister']) == 0) {
    			$sql = "INSERT INTO users VALUES(NULL,'$this->name','$this->surname','$this->email','$password_hash','$this->birth',NULL,NULL,NULL,NULL,NULL,0)";
    			$question = $this->connect()->query($sql);
    			if ($question) {
    				echo "YES";
    			} else {
    				echo "NO";
    			}
    		}
    	}

    Podajesz argumenty dla tej funckji (imię, nazwisko, itd.), więc czemu służą te wszystkie pola prywatne? Jeśli chcesz na tym portalu społecznościowym trzymać wszystkie dane użytkowników w obiektach w pamięci ram to odradzam. Ten sam problem występuje też w klasie logowania.

  • Brak prepared statements.

  • Dlaczego funkcje checkName, checkSurname, chechEmail, checkBirth są publiczne? Przecież raczej i tak będziesz (i powinieneś) ich używać w obrębie klasy / obiektu

  • index.php: Co to ma być? Przepraszam bardzo, ale do takich rzeczy służy twig system szablonów

komentarz 26 marca 2017 przez Boshi VIP (100,240 p.)
Z tym twigiem to teżnie zawsze, Yii2 nie korzysta z twiga domyślnie a widoki i tak są wyłączone po za logikę. Raczej kwestia zbudowania interfejsu MVC, czy jak kto woli MVP. Tyle, że jak zaczniemy wszystko tak projektować, od MVC po sesje itd to zzaraz zbudujemy drugi framework ;)
komentarz 26 marca 2017 przez CzikaCarry Szeryf (75,340 p.)
Podałem tutaj przykład najlepszego według mnie systemu szablonów, jak komuś się nie chce go nstalować to i system szablonów napisany w php wystarczy. Co do frameworka, to dawno nie robiłem niczego większego, może czas dołożyć węgla do komputera, posypać klawiaturę krędą i zacząć napierdzielać :D
komentarz 26 marca 2017 przez ThePatrykOOO Dyskutant (8,380 p.)
Dzięki za porady, funkcje np. checkEmail były ustawione prywatnie, ale miałem jakiś problem z ich wywołaniem i one nie działały, gdy ustawiłem za public to działały

Podobne pytania

+2 głosów
2 odpowiedzi 1,492 wizyt
pytanie zadane 9 grudnia 2017 w PHP przez patrus456 Początkujący (290 p.)
0 głosów
1 odpowiedź 192 wizyt
pytanie zadane 18 września 2018 w C i C++ przez Zimny. Nowicjusz (140 p.)
+1 głos
1 odpowiedź 675 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...