Logowanie PHP korzystając z PDO i OOP

0

Cześć,
Mam problem z projektem, przerabiam z postaci strukturalnej do OOP i trafiłem na problem przy logowaniu. NIe wyskakują mi błędy a pusta strona i to wszystko nie wiem w czym może być problem, być może zgubiony jakiś znak lub nie dopisana jakaś linijka kodu. A być może złe użycie danej funkcji. Proszę o informację .

plik login_script.php

<?php
include_once 'config.php';

class User{
	private $db;

	public function _construct()
	{
		$this->db = new ConnectionDB();
		$this->db = $this->db->getConnection();
	}

	public function Login($user_email,$user_pass)
	{
		$user_email = $_POST['email'];
		$user_pass = $_POST['pass'];

		if(!empty($user_email) && !empty($user_pass))
				{
					$query = "SELECT * FROM users WHERE user_email='$user_email' AND user_pass='$user_pass'";
					$st = $this->db->prepare($query);
					$st->execute(array($user_email,$user_pass));
					$result = $st -> fetchAll();
					var_dump($result);

					if(count($result) >0)
					{
					echo "good";
					echo "<script>window.open('profile.php','_self')</script>";
					}
					else
					{
						echo "<script>alert('Email or password is not correct, try again!')</script>";
						echo "<script>window.open('index.php','_self')</script>";
					}
				}
					else
					{
						echo "<script>alert('Please enter username and password and try again!')</script>";
						echo "<script>window.open('index.php','_self')</script>";
					}
				}

plik połączenia z bazą config.php

<?php

class ConnectionDB{
  //Specyfikacja bazy danch
private $servername = "localhost";
private $username = "root";
private $password = "";
private $database = "library";
public $conn;
//Nawiązywanie połączenia
public function getConnection(){
  $this->conn = null;
  try{
    $this->conn = new PDO('mysql:host=' .$this->servername . ';dbname=' . $this->database, $this->username, $this->password);
    }
    catch(PDOException $exception){
      echo "Connection error: " .$exception->getMessage();
    }
    return $this->conn;
  }
}

?>

w logowaniu mam dwie zmienne email i pass i to w tym są przechowywane dane przy logowaniu a w bazie te pozycje to : user_email i user_pass.

0

Jak masz pustą stronę, to z jakiegoś konkretnego powodu.

  1. Włącz raportowanie błędów.
  2. W zależności od systemu operacyjnego poszukaj w logach PHP:
  • Windows WAMP
  • Linux to prawdopodobnie /var/log i odpowiednio PHP i Twój serwer WWW: Nginx lub Apache.

Jeżeli dopuszczasz opcję, że może to być "zgubiony jakiś znak", to pobierz lepsze IDE (np. PHPStorm w wersji EAP).

Protip: jeżeli masz błąd w stylu Unexpected $foo at line 123, to prawie nigdy błąd nie leży w linii 123. Taki błąd oznacza, że masz syntax error powyżej tej linii. Prawdopodobnie brak średnika, nawiasu lub czegoś takiego.

0

@Patryk27: Aa widzisz gdzieś słowo " Wykorzystuje OOP" jest wyraźnie napisane "przerabiam". Zapraszam do biblioteki aby zaznajomić się z umiejętnością czytania ze zrozumieniem.

0

Sprawdzaj pola, nie ufaj danym od użytkownika (Ten skrypt jest podatny na ataki m.in. XSS, SQL Injection). Sądzę tak ponieważ od razu wyciągasz dane z $_POST. Haseł nie przetrzymuję się w czystej postaci a tu ewidentnie je tak przetrzymujesz.
https://helion.pl/ksiazki/php-obiekty-wzorce-narzedzia-wydanie-v-matt-zandstra,phpob5.htm#format/d oraz https://livro.pl/tworzenie-bezpiecznych-aplikacji-internetowych-z-przykladami-w-php-lis-marcin-sku1095460067.html
Polecam. :)

0
  1. Naucz się composera (https://getcomposer.org/), to proste narzędzie które ułatwi Ci pracę oraz poczytaj o PSR
  2. Nie mieszaj kodu PHP z widokiem a tym bardziej z JS.
  3. Jeżeli chcesz OOP to wywołanie tego kodu mogło by wyglądać w ten sposób:
$logger = new Logger(); // zamiast tego echo "Connection error: " .$exception->getMessage(); które na produkcji nie powinno mieć miejsca wszystkie błędy przekazujesz do loggera, standard PSR-3
$connection = new Connection('host','name', 'user', 'pass', $logger);
$userLoginService = new UserLoginService($connection);
$user = new User($_POST['emai'], $_POST['pass']);

try {
   $userLoginService->login($user);
} catch (UserLoginServiceException $e) {
   // tutaj obslugujesz jakieś alerty ew. samo echo $e->getMessage(); i zwracasz widok z błędem
}

// tutaj wiesz, że użytkownik się zalogował prawidłowo ponieważ nie wystąpił UserLoginServiceException
0

Nie wiem, może nie widzę reszty kodu ale jak dla mnie to ten kod działa w 100%. Nie robi nic :D (dlatego mamy pustą stronę). Masz poza tym jeszcze jakiś inny kod? Pokaż go. Odnośnie samego OOP to tak jak pisano wyżej, niewiele tutaj z OOP.

1 użytkowników online, w tym zalogowanych: 0, gości: 1