Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] Błąd po logowaniu
-Uertff-
post
Post #1





Goście







Mam problem w czasie zalogowania. Gdy zrobię tak że jak zaloguję się na stronę i gdy z tej strony wejdę po prostu na plik odpowiadający za logowanie i z powrotem wrócę do tamtej poprzedniej strony to pojawia się błąd że Obiekt tej klasy nie mógł być przekonwertowany do łańcucha. Dokładnie w linii 6 w pliku tym co jest chroniony. Dokładnie komunikat wygląda tak: .

Kod
Catchable fatal error: Object of class __PHP_Incomplete_Class could not be converted to string in C:\Program Files\WebServ\httpd-users\test\news\protect.php on line 6


Powiem jeszcze, że jak usunę wyświetlanie $_SESSION['user'] to wszystko i jest w porządku to samo gdy zamiast klasy to samo, tylko że w wyjątku to też działa. Proszę o pomoc bo mi zależy żeby to rozwiązać a nie mogę tego rozwiązać, szukałem wszędzie i nic o tym nie znalazłem.

Kod:

  1. <?php
  2.  
  3.  
  4. class user {
  5.  
  6. public $user;
  7. private $pass;
  8.  
  9. public function checkuser() {
  10.  
  11. $pdo = new pdo ('mysql:host=localhost;dbname=oop','root','mentormiszcz1e');
  12. $row= $pdo-> query ("SELECT name,password FROM `trials` WHERE name= '".$_POST['user']."'");
  13.  
  14. while ($line= $row-> fetch()) {
  15.  
  16. $this-> user= $line['name'];
  17. $this-> pass= $line['password'];
  18.  
  19. if ($this->user== $_POST['user'] && $this-> pass== md5($_POST['pass'])) {
  20. $_SESSION['user']= $_POST['user'];
  21. header ("Location: protect.php");
  22. }
  23. else {
  24. header ("Location: log.html");
  25. }
  26.  
  27. } // end while
  28.  
  29. $row-> closeCursor();
  30.  
  31. } // end function
  32.  
  33. }
  34.  
  35. $user= new user;
  36. $user-> checkuser();
  37.  
  38. ?>


  1. <?php
  2.  
  3.  
  4. if (isset($_SESSION['user'])) {
  5. echo 'Yo, ' . $_SESSION['user'] . '<a href="logout.php">Sign out</a>';
  6. }
  7.  
  8. else {
  9. header ("Location: log.html");
  10. }
  11.  
  12. ?>


  1. <!DOCTYPE html
  2. PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
  5. <title>Title</title>
  6. </head>
  7.  
  8. <form action="class.php" method="post">
  9. <div id="form">
  10. <input type="text" name="user" />
  11. <input type="password" name="pass" />
  12. <input type="submit" value="Sign in" />
  13. </div>
  14. </form>
  15.  
  16. </body>
  17. </html>
Go to the top of the page
+Quote Post
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Sprawa wygląda tak:
1. Masz klasę user
2. Wykonujesz jakąś logikę, jakieś operacje, ...
3. Zapisujesz do sesji obiekt klasy user. PHP wie jak go zapisać bo ma klasę wczytaną.

Później robisz tak:
1. Odpalasz sesję;
2. Wczytujesz z sesji obiekt klasy user.

I tu jest problem, PHP nie wie jak ta klasa wyglądała bo jej nie wczytałeś, dlatego wywala błąd Object of class __PHP_Incomplete_Class. Zanim wyciągniesz klasę user z sesji, musisz ją ponownie wczytać (lub zdefiniować) w skrypcie.
Go to the top of the page
+Quote Post
-Uertff-
post
Post #3





Goście







Czyli po prostu do pliku tam gdzie jest echo 'Yo, ' . $_SESSION['user'] itd. dołączyć plik z klasą przez require() i co potem . Bo dołączyłem i teraz się pojawia taki błąd:
Kod
Object of class user could not be converted to string
. Teraz znowu coś z klasą user jest. Robić coś tu jeszcze oprócz dołączenia klasy przez require ?
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Z klasam wszystko jest OK, błedem jest teraz wyświetlanie obiektu.
Nie możesz sobie zrobić ot tak sobie echo obiekt;, skąd PHP ma wiedzieć jak go wyświetlić?

Dopisz sobie do klasy user:
  1. <?php
  2.  
  3. class user {
  4.  
  5. // ...
  6.  
  7. public function __toString() {
  8.  return $this->user;
  9. }
  10. }
  11.  
  12. ?>
I wszystko będzie OK.
Go to the top of the page
+Quote Post
-Uertff-
post
Post #5





Goście







Dodałem to do klasy ale dalej nie działa. Co teraz zrobić? użyć gdzieś tej funkcji czy co? Kod tak wygląda teraz:

  1. <?php
  2.  
  3.  
  4.  
  5. class user {
  6.  
  7. public $user;
  8. private $pass;
  9.  
  10. public function checkuser() {
  11.  
  12. $pdo = new pdo ('mysql:host=localhost;dbname=oop','root','mentormiszcz1e');
  13. $row= $pdo-> query ("SELECT name,password FROM `trials` WHERE name= '".$_POST['user']."'");
  14.  
  15. while ($line= $row-> fetch()) {
  16.  
  17. $this-> user= $line['name'];
  18. $this-> pass= $line['password'];
  19.  
  20. if ($this->user== $_POST['user'] && $this-> pass== md5($_POST['pass'])) {
  21. $_SESSION['user']= $_POST['user'];
  22. header ("Location: protect.php");
  23. }
  24. else {
  25. header ("Location: log.html");
  26. }
  27.  
  28. } // end while
  29.  
  30. $row-> closeCursor();
  31.  
  32. } // end function
  33.  
  34. public function toString() {
  35.  return $this->user;
  36. }
  37.  
  38. }
  39.  
  40. $user= new user;
  41. $user-> checkuser();
  42.  
  43.  
  44. ?>
Go to the top of the page
+Quote Post
mike
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Nie dodałeś funkcji, o której pisałem. Jak dodasz to idziemy dalej.
Funkcji tej się nie używa jawnie. "Sama" się wykonuje kiedy traktujesz obiekt jak stringa, na przykład kiedy wyśiwetlasz go za pomocą echo.
Go to the top of the page
+Quote Post
-Uertff-
post
Post #7





Goście







Ok. Mam coś takiego. Teraz twoja funkcja będzie zwracała wartość, ale co teraz dalej. Muszę coś jeszcze dopisać w tym pliku z 'Yo, ' . $_SESSION['user'] ? Czy dołączyć tu tą klasę przez require czy co?

  1. <?php
  2.  
  3.  
  4. class user {
  5.  
  6. public $user;
  7. private $pass;
  8.  
  9. public function checkuser() {
  10.  
  11. $pdo = new pdo ('mysql:host=localhost;dbname=oop','root','mentormiszcz1e');
  12. $row= $pdo-> query ("SELECT name,password FROM `trials` WHERE name= '".$_POST['user']."'");
  13.  
  14. while ($line= $row-> fetch()) {
  15.  
  16. $this-> user= $line['name'];
  17. $this-> pass= $line['password'];
  18.  
  19. if ($this->user== $_POST['user'] && $this-> pass== md5($_POST['pass'])) {
  20. $_SESSION['user']= $_POST['user'];
  21. header ("Location: protect.php");
  22. }
  23. else {
  24. header ("Location: log.html");
  25. }
  26.  
  27. } // end while
  28.  
  29. $row-> closeCursor();
  30.  
  31. } // end function
  32.  
  33. public function __toString() {
  34.  return $this->user;
  35. }
  36.  
  37. }
  38.  
  39. $user= new user;
  40. $user-> checkuser();
  41.  
  42. ?>
Go to the top of the page
+Quote Post
mike
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Klasę dołączasz bez zmian.
Go to the top of the page
+Quote Post
-Uertff-
post
Post #9





Goście







Dobra. Dołączyłem klasę do tego pliku gdzie jest wyświetlane $_SESSION['user'], ale znowu napotyka błąd że musi zwrócić łańcuch.
Kod
Catchable fatal error: Method user::__toString() must return a string value in C:\Program Files\WebServ\httpd-users\test\news\protect.php on line 7


Teraz tak to wygląda:
  1. <?php
  2.  
  3. require ("class.php");
  4.  
  5. if (isset($_SESSION['user'])) {
  6. echo 'Yo, ' . $_SESSION['user'] . '<a href="logout.php">Sign out</a>';
  7. }
  8.  
  9. else {
  10. header ("Location: log.html");
  11. }
  12.  
  13. ?>
Go to the top of the page
+Quote Post
-Uertff-
post
Post #10





Goście







Sorry, że piszę post pod postem ale nie mam możliwości edycji. Nie mogę dalej się z tym uporać. Do pliku z klasą jest dołączona funkcja mike'a
i w pliku z $_SESSION['user'] tym co wyświetla jest tak jak wyżej dołączona klasa, ale co teraz zrobić? Dalej pojawia się ten sam komunikat co wyżej.
Niby jest funkcja że zwraca wartość, ale tego nie robi jak widać wyżej.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 15:42