Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: W kodzie chyba jest ok a jednak nie działa
Forum PHP.pl > Forum > Gotowe rozwiązania
remiq26
Plik jest includowany do pliku index.php funkcją require_once "CSession.php";

Dodałam komentarze aby ewentualnie można było łatwiej go zrozumieć.
Błąd jaki wywala przeglądarka jest następujący
  1. Fatal error: Using $this when not in object context in D:\www\sesje\CSession.php on line 205


A przecież $this jest poprawnie zdefiniowana...nie qumam
W zasadzie chyba jest napisany dobrze jednak serwer wywala mi błedy..
Kod pliku CSession przedstawiam poniżej prosze o przeanalizowanie i pomoc w znalezieniu błędu
  1. <?php 
  2.  
  3.  
  4. define(PAGE_HOME, 'index.php'); // strona główna
  5. define(PAGE_START, 'start.php'); // strona startowa po zalogowaniu
  6. define(PAGE_LOGOUT, 'index.php'); // strona wyswietlana po wylogowaniu
  7. define(PAGE_TIMEOUT, 'index.php'); // strona wyswietlana gdy TIMEOUT
  8.  
  9. // bezpieczny czas oczekiwania na akcję uzytkownika (w minutach)
  10. define(TIMEOUT_MINUTES,15);
  11.  
  12.  
  13. class CSession
  14. {
  15.     var $sIP;        // IP uzytkownika
  16.     var $tDate;        // aktualna data i czas
  17.  
  18.     var $sid;        // identyfikator sesji
  19.     var $idSession;        // id sesji w bazie
  20.         
  21.         // dane zalogowanego uzytkownika
  22.  
  23.     var $idUser;        // id uzytkownika lub 0 jesli niezalogowany
  24.     var $tabUser;        // tablica z danymi uzytkownika pobrana z bazy
  25.  
  26.         // true jesli wystapil blad podczas logowania
  27.         // (podano zly login lub haslo)
  28.  
  29.     var $bLoginError;
  30.     
  31.     function CSession()
  32.     {
  33.  
  34.         
  35.                 $this->sIP = getenv(&#092;"REMOTE_ADDR\");
  36.         $this->tDate = date(&#092;"YmdHis\");
  37.         $this->idUser = 0;
  38.  
  39.         // 1. Zarzadzanie sesjami
  40.         global $HTTP_GET_VARS;
  41.         $this->sid = $HTTP_GET_VARS['sid'];
  42.         if (!$this->sid) {
  43.     // utworz nowa sesje
  44.     // (domyslnie przypisana do niezalogowanego uzytkownika)
  45.         $this->sid = md5(uniqid(rand()));
  46.     $res = mysql_query(
  47.         &#092;"INSERT INTO tabSession {
  48.         sid, sIP, tDate, tLastAction
  49.             ) VALUES (
  50.  
  51.         '\".$this->sid.\"', '\".$this->sIP.\"',
  52.         '\".$this->tDate.\"', '\".$this->tDate.\"' 
  53.         )&#092;");
  54.     if (!$res) exit;
  55.         $this->idSession = mysql_insert_id();
  56.     } else {
  57.         // wczytaj dane sesji z bazy
  58.         $res = mysql_query(
  59.         
  60.                 &#092;"SELECT * FROM tabSession WHERE sid='\".addslashes($this->sid).\"' AND bActive=1\");
  61.  
  62.  
  63.         if (mysql_num_rows($res)==0) {
  64.             // jesli brak sesji o danym sid lub sesja nieaktywna
  65.         header(&#092;"Location: \".PAGE_HOME);
  66.         exit;
  67.         }
  68.         $tabSession = mysql_fetch_array($res, MYSQL_ASSOC);
  69.             
  70.             if ($tabSession['sIP']!=$this->sIP) {
  71.             // Rozny IP odwiedzajacego i sesji, tutaj mozna dodac
  72.             // przekierowanie na strone z informacja o błedzie
  73.         
  74.             $this->logout(PAGE_HOME);
  75.             }
  76.             // oblicz maksymalny dopuszczalny czas ostatniej akcji
  77.  
  78.  
  79.             $y = substr($this->tDate,0,4);
  80.             $m = substr($this->tDate,4,2);
  81.             $d = substr($this->tDate,6,2);
  82.             $hour = substr($this->tDate,8,2);
  83.                         $min = substr($this->tDate,10,2) - TIME - OUT_MINUTES;
  84.         
  85.         $sec = substr($this->tDate,12,2);
  86.         $tDate = date(&#092;"YmdHis\", mktime($hour,$min,$sec,$m,$d,$y));
  87.  
  88.         if ($tabSession['tLastAction']<$tDate) { // od ostatniej akcji minelo za duzo czasu - wylogowanie
  89.         $this->logout(PAGE_TIMEOUT);
  90.         }
  91.         $this->idSession = $tabSession['idSession']; // identyfikator uzytkownika przypisanego do tej sesji
  92.  
  93.         $this->idUser = $tabSession['idUser'];
  94.         }
  95.             // 2. Zazadzanie uzytkownikami
  96.                 
  97.                 
  98.                 if ($this->idUser) {   // Jesli do tej sesji przypisany jest uzytkownik
  99.             
  100.  
  101.                 // obsluz ewentualnie wylogowanie
  102.                 $this->handleLogout();
  103.  
  104.             // jesli sie nie wylogowal, wczytaj jego dane z bazy
  105.             $res = mysql_query(
  106.             &#092;"SELECT * FROM tabUser WHERE idUser=\".$this->idUser);
  107.  
  108.             $this->tabUser = mysql_fetch_array($res, MYSQL_ASSOC);
  109.         } else {
  110.             // w przeciwnym wypadku sprawdz czy uzytkownik własnie sie zalogował
  111.         
  112.         $this->handleLogin();
  113.         }
  114.  
  115.  
  116.             // 3. Aktualizacja danych sesji
  117.             // inkrementacja licznika zaladowan stron dla tej sesji
  118.             // oraz uaktualnienie czasu ostatniej akcji
  119.  
  120.         mysql_query(
  121.         &#092;"UPDATE tabSession
  122.         SET nHits=nHits+1,
  123.         tLastAction='\".$this->tDate.\"',
  124.                 idUser=&#092;".$this->idSession.\"
  125.                 WHERE idSession=&#092;".$this->idSession);
  126.  
  127.         }
  128.  
  129.         // obsluga logowania uzytkownika
  130.             
  131.         function handleLogin()
  132.     {
  133.         global $HTTP_POST_VARS, $REQUEST_METHOD;
  134.         // sprawdz czy przeslano metoda POST formularz logowanie
  135.     if ( ($REQUEST_METHOD=='POST') &&
  136.     ($HTTP_POST_VARS['formname']=='login') ) {
  137.  
  138.         // sprawdz czy przeslany login i haslo odpowiadaja
  139.         // jednemu z uzytkownikow zapisanych w bazie
  140.         
  141.         $res = mysql_query(
  142.         &#092;"SELECT *
  143.         FROM tabUser
  144.         WHERE sLogin='\".addslashes($HTTP_POST_VARS['sLogin']).\"' AND sPassword='\".addslashes($HTTP_POST_VARS['sPassword']).\"'&#092;" );
  145.  
  146.  
  147.         if (mysql_num_rows($res)==1) {
  148.  
  149.         // uzytkownik poprawnie zalogowany
  150.         // przypisz jego idUser do aktualnej sesji
  151.         
  152.                 $this->tabUser = mysql_fetch_array($res,MYSQL_ASSOC);
  153.  
  154.             $this->idUser = $this->tabUser['idUser'];
  155.                         mysql_query(&#092;"UPDATE tab Session SET idUser=\".$this->idUser.\"
  156.         
  157.             WHERE idSession=&#092;".$this->idSession);     // przekieruj przegladarke na strone startowa
  158.                 
  159.                                         header(&#092;"Location: \".PAGE_START.\"?sid=\".$this->sid);
  160.  
  161.             exit;
  162.                 } else {
  163.                     // brak uzytkownika o podanym logonie i hasle
  164.                 $this->bLoginError = true;
  165.  
  166.                 }
  167.             }
  168.         }
  169.  
  170.         // obsluga wylogowania na zadanie uzytkownika
  171.         
  172.         function handleLogout()
  173.         {
  174.         global $HTTP_GET_VARS;
  175.         if ($HTTP_GET_VARS['bLogout']) {
  176.         $this->logout();
  177.         }    
  178.     }
  179.  
  180.  
  181.  
  182.     // wylogowanie uzytkownika
  183.     
  184.     function logout($page=PAGE_LOGOUT)
  185.     {
  186.  
  187.     mysql_query(
  188.         &#092;"UPDATE tabSession SET bActive=0
  189.         WHERE idSession=&#092;".$this->idSession);
  190.         header(&#092;"Location: \".$page);
  191.  
  192.         exit;
  193.     }
  194.  
  195.     function makeLink($sPage,$sParam='')
  196.     {
  197.                 return $sPage.'?sid='.$this->sid.'&'.$sParam;
  198.     }
  199. }
  200.  
  201.     // polaczenie z baza mysql
  202.             
  203.         function initMysql($sHost,$sUser,$sPassword,$sDatabase)
  204.     {
  205.         $this->handle = @mysql_connect($sHost, $sUser, $sPassword);
  206.         if (!$this->handle) exit;
  207.         if (!@mysql_select_db($sDatabase, $this->handle))
  208.                  exit;
  209. }
  210. ?>




Przedstawiam jeszcze plik index.php który jest potrzebny do sprawdzenia i baze w mysql

  1. <?php
  2. require_once &#092;"CSession.php\";
  3. initMysql('localhost', 'root', '', 'baza');
  4. $oSession = new CSession();
  5. if ($oSession->bLoginError) {
  6. echo 'Zły Login lub Hasło';
  7. }
  8. ?>
  9. <center>
  10. <form method=\"POST\" action=\"<?php echo $oSession->makeLink('index.php') ?>\">
  11. <input type=\"hidden\" name=\"formname\" value=\"login\">
  12. Login: <input name=\"slogin\" size=10><br>
  13. Hasło: <input type=\"password\" name=\"sPassword\" size=10>
  14. <br>
  15. <input type=\"submit\" value=\"Zaloguj\">
  16. </form>
  17. </center>


  1. CREATE TABLE tabSession (
  2. idSession int NOT NULL AUTO_INCREMENT,
  3. idUser int NOT NULL DEFAULT 0,
  4. sid char(32),
  5. tLastAction timestamp,
  6. tDate timestamp,
  7. sIP char(15),
  8. nHits int NOT NULL DEFAULT 0,
  9. bActive tinyint NOT NULL DEFAULT 1,
  10. PRIMARY KEY(idSession),
  11. KEY(sid(3))
  12. );
  13.  
  14. CREATE TABLE tabUser (
  15. idUser int NOT NULL AUTO_INCREMENT,
  16. sLogin char(16),
  17. sPassword char(16),
  18. PRIMARY KEY (idUser),
  19. KEY(sLogin(3))
  20. );
  21.  
  22.  
  23. INSERT
  24. INTO tabUser (sLogin,sPassword) VALUES
  25. ('admin','haslo');
tiraeth
  1. <?php
  2. # ...
  3. // polaczenie z baza mysql
  4.  
  5. function initMysql($sHost,$sUser,$sPassword,$sDatabase)
  6. {
  7. $this->handle = @mysql_connect($sHost, $sUser, $sPassword);
  8. if (!$this->handle) exit;
  9. if (!@mysql_select_db($sDatabase, $this->handle))
  10.  }
  11. # ...
  12. ?>


Dlaczego z poza klasy odwołujesz się do $this questionmark.gif
remiq26
Bo za połączenie z bazą danych odpowiedzialny jest każdy następny plik a CSession jest tylko includowany
  1. <?php
  2. require_once &#092;"CSession.php\";
  3. initMysql('localhost', 'root', '', 'baza');
  4. $oSession = new CSession();
  5. if ($oSession->bLoginError) {
  6. echo 'Zły Login lub Hasło';
  7. }
  8. ?>


W zasadie uporałam sie ze skryptem tylko mam jeszcze 1 problem
Na starym php mi chodzi a na 4 w góre nie... i nie bardzo qumam jak to rozwiązać...pozdrawiam.i prosze o pomoc
_majki_
Dziwne, bo na 4 powinno dzialac, ale...
zobacz czy zastapienie przez $_POST[] and $_GET[] odpowiednich $HTTP_POST_VARS i $HTTP_GET_VARS pomoze.
remiq26
Pomogło dziękje bardzo. Buziaczki.Pa
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.