Obiektowy PHP i obsługa MySQl, błąd


(Marcin E Pc) #1

Witam!

Staram się uczyć obiektowego PHP i postanowiłem zrobić klasę do obsługi bazy danych, i już od początku problem.

Mam kod:

<?php

include('class.php');

$db = new BazaDanych();

$connect = $db->dbConnect();

$wynik = $connect->query("select name, pass from users where name='admin'");

$login = $_POST['login'];

$password = $_POST['haslo'];

if (empty($login)==1 || empty($password)==1)

{

echo "Niepoprawne hasło lub login!";

}

else

{

 $password = md5($password);

 session_start();

 $_SESSION['login']=$login;

 $_SESSION['password']=$password;

}


?>

i klasa, w osobnym pliku:

<?php

class BazaDanych

{

 function dbConnect()

 {

 include('../database/config_db.php');

 $dbConnect = @new mysqli("$dbHost", "$dbUser", "$dbPass", "$dbName");

    if (mysqli_connect_errno() != 0)

      {

      echo "Wyst±pił bł±d poł±czenia z baz± danych. Numer błędu: ".mysqli_connect_error();

      exit;

      }

 }

}

?>

Połączenie nie wywala żadnego błędu, ale zapytanie:

Dlaczego tak?


(Marcin E Pc) #2

Rozwiązanie znalazłem sam, zapomniałem zwrócić wartości z f-cji dbConnect();, temat wg. uznania moderatora do kosza


(Airborn) #3

sporo błędów tutaj masz...

  1. $connect = $db->dbConnect(); funkcja dbConnect() nic nie zwraca, więc nic nie przypiszesz do zmiennej $connect

  2. $connect->query() jak już wspomniałem, $connect jest niezdefiniowany wciąż, prawdopodobnie chciałeś wcześniej by dbConnect() zwracalo obiekt mysqli, ale po co nadbudowywać tak już istniejącą klasę?


(Marcin E Pc) #4

ad.1 Tak wiem, dopisałem później że znalazłem błąd, ale ty już wtedy chyba odpisywałeś.

ad.2 Dotyczy pierwszego, wystarczyło return.

A tworze to w celu nauczenia się obiektowego PHP, więc pewnie i tak nie będzie miało żadnego zastosowania. Poprostu dorwałem swój kawałęk kodu i chciałęm go zmienić na obiektowy :slight_smile:

Dzięki i pozdrawiam


(Airborn) #5

w ten sposób się niczego nie nauczysz, bo Twoje podejście jest błędne chcesz przerobić na obiekt coś co już jest obiektem


(Marcin E Pc) #6

Teraz już wiem, w sumie chciałem zaoszczędzić kodu, i zebrałem includowanie Hosta, użytkowanika, hasła i sprawdzanie czy połączenie nie wywala błędu w jeden obiekt. A teraz zacząłem trochę od innej strony, i tworzę system logowania na obiektach, i cały system jest jedną klasą, a poszczególne zadania obiektami. Cóż człowiek uczy się na własnych błędach.

Pozdrawiam


(Airborn) #7

no to znów popełniasz błąd, brnąc błędnie w kierunku tzw. klas bogów


(Marcin E Pc) #8

Dlaczego? Tworzę klasę logowanie, i w niej funkcje: zaloguj, wyloguj, zarejestruj, sprawdz(czy zalogowany czy nie)? I o co chodzi z klasami bogów?

Pozdrawiam