Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MSSQL][PHP]Use of undefined constant - assumed
Forum PHP.pl > Forum > Przedszkole
meegi
Witajcie, jestem poczatkujaca w php. Pisze koszyk do sklepu oparty o sesje i baze danych. Wywala mi taki oto blad:

Notice: Use of undefined constant SESSION_COOKIE - assumed 'SESSION_COOKIE' in D:\XAMPP\htdocs\sessions.php on line 14

Notice: Use of undefined constant SESSION_COOKIE - assumed 'SESSION_COOKIE' in D:\XAMPP\htdocs\sessions.php on line 15

Notice: Use of undefined constant SESSION_COOKIE - assumed 'SESSION_COOKIE' in D:\XAMPP\htdocs\sessions.php on line 30

Notice: Use of undefined constant SESSION_COOKIE_EXPIRE - assumed 'SESSION_COOKIE_EXPIRE' in D:\XAMPP\htdocs\sessions.php on line 31

Fatal error: Call to undefined function random_session_id() in D:\XAMPP\htdocs\sessions.php on line 66

To jest moj kod w sessions.php:

Kod
<?php
    class session{
        private $id;
        private $ip;
        private $browser;
        private $time;
        private $user;
        private $salt;
        
        
        public function __construct (){
            global $pdo, $request;
            
            if(!isset ($_COOKIE[SESSION_COOKIE])){
                $_COOKIE[SESSION_COOKIE] = '';
            }
            else{
                if(strlen($_COOKIE[SESSION_COOKIE]) != SESSION_ID_LENGHT) {
                    $this->newSession();
                }
            }
            
            $pdo = new PDO('mysql:host=localhost;port=3306;dbname=sklep','root','root');

            $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $pdo -> exec ("SET NAMES 'utf8'");

            $stmt = $pdo->prepare('SELECT session_id, updated_at, salt_token, user_id, uniq_info, ip, browser FROM sessions WHERE session_id = :sid AND uniq_info = :info AND updated_at > :updated AND IP = :ip AND browser = :browser');
            
            $stmt->bindValue(':sid', $_COOKIE[SESSION_COOKIE], PDO::PARAM_STR);
            $stmt->bindValue(':updated', time() - SESSION_COOKIE_EXPIRE, PDO::PARAM_INT);
            $stmt->bindValue(':info', $request->getInfo(), PDO::PARAM_STR);
            $stmt->bindValue(':ip',$request->getIp(), PDO::PARAM_STR);
            $stmt->bindValue(':browser', $request->getBrowser(), PDO::PARAM_STR);
            $stmt->execute();
            
            if($session = $stmt-> fetch(PDO::FETCH_ASSOC)){
                $stmt->closerCursor();
                $this->id = $_COOKIE[SESSION_COOKIE];
                $this->salt = $session['salt_token'];
                $this->ip = $session['ip'];
                $this->browser = $session['browser'];
                $this->time = $session['updated_at'];
                
                setcookie(SESSION_COOKIE, $this->id, time() + SESSION_COOKIE_EXPIRE);
                
                $stmt = $pdo->prepare('UPDATE sessions SET updated_at = "time WHERE session_id = :sid');
                $stmt->bindValue(':sid', $_COOKIE[SESSION_COOKIE], PDO::PARAM_STR);
                $stmt->bindValue(':time',time(), PDO::PARAM_INT);
                $stmt->execute();
                
                if($session['user_id'] !=0){
                    //zalogowani
                }
                else {
                    $this->user = new user(true);
                }
            }
            else {
                $stmt->closeCursor();
                $this->newSession();
            }
            }
        function newSession(){
            global $pdo, $request;
            $this->id = random_session_id();
            $this->salt = random_salt(10);
            setcookie(SESSION_COOKIE, $this->id, time() + SESSION_COOKIE_EXPIRE);
            
            $stmt = $pdo->prepare('INSERT INTO sessions (session_id, updated_at, salt_token, user_id, uniq_info, browser, ip) VALUES (:session_id, :time, :salt, :user_id, :info, :browser, :ip)');
            $stmt->bindValue(':session_id', $this->id, PDO::PARAM_STR);
            $stmt->bindValue(':time',time(), PDO::PARAM_INT);
            $stmt->bindValue(':salt', $this->salt, PDO::PARAM_STR);
            $stmt->bindValue(':user_id',0,PDO::PARAM_INT);
            $stmt->bindValue(':info',$request->getInfo(), PDO::PARAM_STR);
            $stmt->bindValue(':browser', $request->getBrowser(),PDO::PARAM_STR);
            $stmt->bindValue(':ip', $request->getIp(), PDO::PARAM_STR);
            $stmt->execute();
            $this->user = new user(true);
            
            }
            
            function updateSession (user $user){
                global $pdo, $request;
            }
        }
    



?>

a to w functions.php gdzie mam wszystkie funkcje do tego:
Kod
<? php
    define('SESSION_COOKIE','cookiesklep');
    define('SESSION_ID_LENGHT', 40);
    define('SESSION_COOKIE_EXPIRE', 3600);
    
    function random_session_id(){
        $utime = time();
        $id = random_salt(40-strlen($utime)).$utime;
        return $id;
    }
    
    function random_salt($len){
        return random_text($len);
    }
    

    function random_text($len){
        $base = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890';
        $max = strlen($base)-1;
        $rstring ='';
        mt_srand((double)microtime()*1000000);
        while(strlen($rstring)< $len)
            $rstring.=$base[mt_rand(0,$max)];
        return $rstring;
    }
    
?>


Czy ktoś mi może pomoc i powiedziec co tutaj jest nie tak?
valkirek
szacun, ze jestes "poczatkujaca" i od razu "pisze koszyk" w oop i pdo a nie znasz podstaw, przyznaj, ze masz skrypt i nie wiesz o co chodzi
com
Pyton_000 to chyba jest ok bo ma taką stała, tylko nie dołączany jest plik z nimi przed wywołaniem
meegi
dzięki wielkie, pomogło.

pozostał mi jeden błąd mianowicie:
Fatal error: Unsupported operand types in D:\XAMPP\htdocs\sessions.php on line 31

linijka 31 wyglada tak:
$stmt->bindValue(':updated', time() - ['SESSION_COOKIE_EXPIRE'], PDO::PARAM_INT);

ponizej wklejam jeszcze raz cały plik sessions.php
Kod
<?php
    class session{
        private $id;
        private $ip;
        private $browser;
        private $time;
        private $user;
        private $salt;
            
        public function __construct (){
            global $pdo, $request;
            
            if(!isset ($_COOKIE['SESSION_COOKIE'])){
                $_COOKIE['SESSION_COOKIE'] = '';
            }
            else{
                if(strlen($_COOKIE['SESSION_COOKIE']) != SESSION_ID_LENGHT) {
                    $this->newSession();
                }
            }
            
            $pdo = new PDO('mysql:host=localhost;port=3306;dbname=sklep','root','root');

            $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $pdo -> exec ("SET NAMES 'utf8'");

            $stmt = $pdo->prepare('SELECT session_id, updated_at, salt_token, user_id, uniq_info, ip, browser FROM sessions WHERE session_id = :sid AND uniq_info = :info AND updated_at > :updated AND IP = :ip AND browser = :browser');
            
            $stmt->bindValue(':sid', $_COOKIE['SESSION_COOKIE'], PDO::PARAM_STR);
            $stmt->bindValue(':updated', time() - ['SESSION_COOKIE_EXPIRE'], PDO::PARAM_INT);
            $stmt->bindValue(':info', $request->getInfo(), PDO::PARAM_STR);
            $stmt->bindValue(':ip',$request->getIp(), PDO::PARAM_STR);
            $stmt->bindValue(':browser', $request->getBrowser(), PDO::PARAM_STR);
            $stmt->execute();
            
            if($session = $stmt-> fetch(PDO::FETCH_ASSOC)){
                $stmt->closerCursor();
                $this->id = $_COOKIE[SESSION_COOKIE];
                $this->salt = $session['salt_token'];
                $this->ip = $session['ip'];
                $this->browser = $session['browser'];
                $this->time = $session['updated_at'];
                
                setcookie(SESSION_COOKIE, $this->id, time() + SESSION_COOKIE_EXPIRE);
                
                $stmt = $pdo->prepare('UPDATE sessions SET updated_at = "time WHERE session_id = :sid');
                $stmt->bindValue(':sid', $_COOKIE[SESSION_COOKIE], PDO::PARAM_STR);
                $stmt->bindValue(':time',time(), PDO::PARAM_INT);
                $stmt->execute();
                
                if($session['user_id'] !=0){
                    //zalogowani
                }
                else {
                    $this->user = new user(true);
                }
            }
            else {
                $stmt->closeCursor();
                $this->newSession();
            }
            }
        function newSession(){
            global $pdo, $request;
            $this->id = random_session_id();
            $this->salt = random_salt(10);
            setcookie(SESSION_COOKIE, $this->id, time() + SESSION_COOKIE_EXPIRE);
            
            $stmt = $pdo->prepare('INSERT INTO sessions (session_id, updated_at, salt_token, user_id, uniq_info, browser, ip) VALUES (:session_id, :time, :salt, :user_id, :info, :browser, :ip)');
            $stmt->bindValue(':session_id', $this->id, PDO::PARAM_STR);
            $stmt->bindValue(':time',time(), PDO::PARAM_INT);
            $stmt->bindValue(':salt', $this->salt, PDO::PARAM_STR);
            $stmt->bindValue(':user_id',0,PDO::PARAM_INT);
            $stmt->bindValue(':info',$request->getInfo(), PDO::PARAM_STR);
            $stmt->bindValue(':browser', $request->getBrowser(),PDO::PARAM_STR);
            $stmt->bindValue(':ip', $request->getIp(), PDO::PARAM_STR);
            $stmt->execute();
            $this->user = new user(true);
            
            }
            
            function updateSession (user $user){
                global $pdo, $request;
            }
        }
    
?>
mls
Generalnie tak kończy się, nie tylko dla początkujących, próba użycia cudzego kodu bez wiedzy jak on działa.
Tak czy inaczej, żadna zamiana $_COOKIE[SESSION_COOKIE] na $_COOKIE['SESSION_COOKIE'] tylko brakujące definicje stałych. Tu zamieni, a stała występuje jeszcze w niejednym miejscu tej klasy. Tak samo, jak stała SESSION_COOKIE_EXPIRE.
Wobec czego, autorkę wątku odsyłam do http://php.net/constants - jeśli czegokolwiek chce się nauczyć.
meegi
oczywiście, że korzystam z tutorialu, bo jak pisałam jestem początkująca. Nie rozumiem tylko dlaczego mi to nie działa, skoro mam tak samo wszystko zrobione.
IProSoft
Najwyraźniej nie masz. Jeśli to tutorial online to podeślij link, sprawdzimy.
meegi
prosze tutaj link do tutorialu, z którego korzystam:tutorial
odcinek drugi, mniej wiecej od 25 minuty.
Jedyna roznica jest taka, ze nie mam pliku header.php tylko require dodalam do mojej strony index.php, no ale może ja coś przeoczyłam.
com
a dołączasz je w kolejności:

  1. require 'function.php';
  2. require 'session.php';
  3. require 'request.php';


Bo w innej nie zadziała i stad te brakujące stałe, a to co podał Pyton_000 akurat nie jest dla Twojego przypadku poprawne, bo autor nie to miał na myśli.

Tutaj przykład żeby to zilustrować, spójrz na wynik http://ideone.com/j0K6J4

Pyton_000 zasugerował się częstym błędem początkujących osób które zapominają o stosowaniu '', ale autor kursu zrobił to akurat celowo smile.gif

Można powiedzieć, że jest to błąd, bo nie powinno się robić tego w ten sposób, bo wywołanie takie jest nie jasne, trzeba znać wtedy cały kod, sam bym tego nie wiedział gdybyś nie dała pliku function.php w którym to było, o czym już wspomniałem w poprzednim poście który zignorowałaś biggrin.gif

Druga sprawa, kod tego tutoriala sam w sobie nie jest zbyt dobrej jakości, co już widać po zamieszczonym fragmencie smile.gif
meegi
oczywiście, mam dołączone do mojej strony index.php taki oto kod:
  1. <?php
  2. require ('functions.php');
  3. require ('sessions.php');
  4. require ('request.php');
  5. require ('user.php');
  6. $request = new userRequest;
  7. $session = new session;
  8. ?>


com
w pliku functions.php na początku masz
<? php zamiast <?php smile.gif
meegi
ok, poprawione, ale nadal wywala ten sam bład niestety sad.gif
com
a cofnęłaś te zmiany zaproponowane przez Pyton_000 ?
Pyton_000
Wyperdzieliłem tego posta bo tylko zamieszania wprowadziłem tongue.gif
meegi
cofnelam te zmiany i działa, baaardzo Wam dziekuje za pomoc specool.gif

Dodalam sobie koszyk i obsluge za pomoca sesji. Dodanie produktu do koszyka dziala, bo w bazie go widze, ale już nie działa mi jego wyświetlanie. Ktoś może zerknąć?
screeny

Strzelam ze coś w funkcji getProducts sknociłam.

podbijam, poniewaz edytowalam wczesniejszy post
com
A pojawia się jakiś błąd, albo coś w tym stylu?

Btw, ja widzę że ty masz inny kod w cart.php niż jest na filmie 3 - Koszyk, wiec pewnie jak dodasz to czego brakuje to zacznie działać, tak myślę smile.gif
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.