![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 12.12.2015 Ostrzeżenie: (0%) ![]() ![]() |
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? Ten post edytował meegi 12.12.2015, 19:05:51 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 6 Dołączył: 24.07.2013 Ostrzeżenie: (0%) ![]() ![]() |
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
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
Pyton_000 to chyba jest ok bo ma taką stała, tylko nie dołączany jest plik z nimi przed wywołaniem
Ten post edytował com 13.12.2015, 14:17:55 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 12.12.2015 Ostrzeżenie: (0%) ![]() ![]() |
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; } } ?> |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 677 Pomógł: 89 Dołączył: 31.08.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
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ć. -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 12.12.2015 Ostrzeżenie: (0%) ![]() ![]() |
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.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 479 Pomógł: 97 Dołączył: 6.09.2011 Skąd: php.net :) Ostrzeżenie: (0%) ![]() ![]() |
Najwyraźniej nie masz. Jeśli to tutorial online to podeślij link, sprawdzimy.
-------------------- Manual prawdę Ci powie.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 12.12.2015 Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
a dołączasz je w kolejności:
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 ![]() 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ś ![]() Druga sprawa, kod tego tutoriala sam w sobie nie jest zbyt dobrej jakości, co już widać po zamieszczonym fragmencie ![]() Ten post edytował com 13.12.2015, 14:20:09 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 12.12.2015 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
w pliku functions.php na początku masz
<? php zamiast <?php ![]() |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 12.12.2015 Ostrzeżenie: (0%) ![]() ![]() |
ok, poprawione, ale nadal wywala ten sam bład niestety
![]() |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
a cofnęłaś te zmiany zaproponowane przez Pyton_000 ?
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Wyperdzieliłem tego posta bo tylko zamieszania wprowadziłem
![]() |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 12.12.2015 Ostrzeżenie: (0%) ![]() ![]() |
cofnelam te zmiany i działa, baaardzo Wam dziekuje za pomoc
![]() 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 Ten post edytował meegi 14.12.2015, 19:10:28 |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
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ę ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 10:07 |