[PHP OOP - PDO] - Funkcje PDO nie działają ;/

Jak można zauważyć na tym filmie, gość łączy się z bazą za pomocą try/catch i potem, za pomocą tej linijki kodu:

$query = $handler->query("SELECT...");

pobiera dane z bazy. Ja ten kod sobie przepisałem i zapisałem w pliku i ten plik dołączyłem do pliku, który rejestruję użytkownika, oto kod:

<?php /* *======================= * REGISTRATION CLASS ! * ====================== */ include_once '/../registration.php'; include_once '/../db_connect/db_connect.php'; class registration { function cryptPass($password1, $rounds = 9){ /* funkcja kryptująca hasło */ } function registration_method($username, $password1, $password2, $email, $date) { if(!empty($username) && !empty($password1) && !empty($password2)) { if(strlen($username) > 20 || strlen($username) < 3 || strlen($password1) > 20 || strlen($password1) < 6 || $password1 != $password2) { echo '
Registration unsuccessfully. Entered data are incorrect. ◄ Back
'; } else { $q = $connect->query("SELECT username, email FROM users WHERE username = '$username' OR email = '$email'"); if($q->rowCount() != 1){ echo '
Registration successfully. Entered data are correct.
Now, check out your e-mail box and activate your account on our site. See you later !
'; $password = $this->cryptPass($password1); // hashed password $q = $connect->query("INSERT INTO users(username, password, email, date) VALUES ('$username', '$password', '$email', '$date')"); $activating_link = 'http://localhost/web-cms/activating.php?acc='.$username.'&email='.$email.''; echo $activating_link; /* SENDING AN EMAIL FOR ACTIVATE AN ACCOUNT */ $text = '

Hello '.$username.'



You are welcome in Szkoła WEB. You\'ve created arleady an account, but you can\'t still be logged in ! For activate your account, click here.



Greets you Szkoła WEB

'; $header = 'MIME-Version: 1.0' . "\r\n"; $header .= 'Content-type: text/html; charset=utf-8' . "\r\n"; /* END OF THE MAIL */ mail($email, 'Activating an account by SzkołaWEB', $text, $header); } else { echo '
Registration unsuccessfully. User arleady exist. ◄ Back
'; } } } } } ?>

I teraz mam taki błąd:

Notice : Undefined variable: connect in C:\xampp\htdocs\web-cms\classes\registration.php on line 33

Fatal error : Call to a member function query() on a non-object in C:\xampp\htdocs\web-cms\classes\registration.php on line 33

Jak mogę mieć błędy, kiedy kod po prostu przepisałem ? Jakby ktoś pomógł, to byłbym wdzięczny :slight_smile:

Pozdrawiam

 

PS.: Linia nr 33

$q = $connect->query(“SELECT username, email FROM users WHERE username = ‘$username’ OR email = ‘$email’”);

  1. Wstawiłeś ułomny odnośnik do filmu.

  2. Copy&pasta ani przepisywanie nigdy nie gwarantują niczego.

  3. Czego można nie rozumieć w “Undefined variable: connect” ?

 

Nigdzie nie tworzysz obiektu connect. Pewnie próbujesz załączyć go z pliku db_connect.php. Sprawdź, czy tam wszystko jest ok, czy wszystko się includuje itd.

  1. Poprawione

  2. Zaryzykowałem

  3. Rozumieć, rozumiem, ale nie wiem skąd się bierze, ponieważ piszę to dokładnie tak samo jak na owym filmie.

  4. Bo to nie klasa. W pliku db_connect.php mam tylko blok try/catch

Skoro tak uważasz to nie rozumiesz nic :stuck_out_tongue:

Tam wszędzie masz odwołania do metod obiektu, skoro uważasz że to nie klasa to widać zacząłeś przepisywać w złym miejscu lub coś pominąłeś (conajmniej jak wcześniej wspomniano stworzenie obiektu connect z którego się odwołujesz) :stuck_out_tongue: IMO to klasa własna autora, lub jakiś gotowiec (raczej nie mysqli)

A no tak ! Zmienna $content jest obiektem klasy PDO, ale nadal nie kumam, dlaczego błąd występuje. Oto kod połączenia:

<?php try { $connect = new PDO('mysql:host=127.0.0.1;dbname=oop', 'root', ''); $connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo $e->getMessage(); die(); }

Jeśli twój ostatni kod jest niezmodyfikowany, to ten link powinien pomóc: http://www.php.net/manual/en/language.variables.scope.php