Cuvanje stanja

1

Cuvanje stanja

offline
  • Pridružio: 16 Jan 2010
  • Poruke: 241
  • Gde živiš: Zemun

Potrebni su mi neki saveti u vezi cuvanja stanja na sajtu, da li je to bolje raditi sa sesijama ili sa cookie-jima?

Evo sta treba da uradim, imam kao neku verziju prodavnice, osiromasenu, gde imam izbor proizvodjaca, izbor modela mobilnog telefena i ubacivanje u korpu. E sad, meni je potrebno da mi se cuva to stanje, odnosno da mi zapamti koje proizvode sam izabrao i da mogu da dodajem jos proizvoda i da iz "korpe" brisem neke stavke.

Ja sam probao sa cookie-jima, ali imam problem sa nizom, jer ne znam kako da ubacujem te stavke u cookie i da ih kasnije izlisatavm kao tabelu.

Znaci, cilj ovog rada je da pamti stanje, nista vise mi nije potrebno.

Hvala unapred!!!



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 15 Maj 2006
  • Poruke: 333
  • Gde živiš: Babušnica

Da sam na tvom mestu iskoristio bih IP adresu posetioca, upisivao stavke u privremenu korpu (mysql) sa opcijom za brisanje/pomeranje iz korpe. Sve to u kombinaciji sa ajaksom da bude glatko Smile



offline
  • Pridružio: 16 Jan 2010
  • Poruke: 241
  • Gde živiš: Zemun

I ja sam razmisljao da to uradim sa bazom, ali ne znam koliko je to pametno? Svi mi preporucuju cookie ili sesiju, da li se to koristi u praksi? Koliko je opterecenje na bazu i na server kad se radi tako? Izvini sto ovako zapitkujem, ali to moram da branim kod profesora, pa da znam.

Pomocu kojeg upita ja mogu da saznam ip adresu posetioca?

offline
  • Pridružio: 15 Maj 2006
  • Poruke: 333
  • Gde živiš: Babušnica

Koristio sam sesije (uglavnom za login skriptu) ali nekad prave problem jer se dešava da u lokalu radi a na serveru neće (koliko sam ja skontao u pitanju je utf-8 koji namestim u notepad++) dok kolačiće ne volim pa ne mogu ništa da ti pričam o njima.

Možeš da probaš sa sesijama ali je moje mišljenje da ćeš se namučiti sa podacima koje bi pamtio.

evo za ip pa probaj
$ip = $_SERVER['REMOTE_ADDR'];

offline
  • Pridružio: 16 Jan 2010
  • Poruke: 241
  • Gde živiš: Zemun

Aha, ma namucih se sa cookie-jima i sesijama, videcu sad da uradim da mi upisuje u bazu u neku tabelu i da iz nje iscitava podatke. Ako negde zagusti javljam se, hvala ti jos jednom.

offline
  • zend  Male
  • Počasni građanin
  • Pridružio: 22 Okt 2009
  • Poruke: 900
  • Gde živiš: Pancevo

mani cookie to nemoj nikako da koristis a pogotovo ako radis sa bazom.
Ja na svojoj korpi koristim drugaciji sistem, nisam sada kod kuce pa cim dodjem kuci poslacu ti deo koda da bacis oko kako izgleda.

offline
  • PHP Developer
  • Pridružio: 02 Okt 2005
  • Poruke: 546

Koristi kombinacuji koki koji cuva id korisnika naosnovu koga nadjes nejgove podatke u bazi.
Generalno najstabilnija varijanta.
U kikije nemoj nikad stavljati velike podatke jel se oni salju pri svakim zahtevom na server, a to zna da daje utisak da ti je sajt spor ako ima slab upload.

IP-adrese su uglavnom dinamicke a ima dosta NAT-vanh koji dele istu javnu adresu.

offline
  • Pridružio: 16 Jan 2010
  • Poruke: 241
  • Gde živiš: Zemun

Na kraju sam uradio preko baze, planiram da iskoristim cookie za identifikaciju korisnika. Sad imam jedno pitanje, imam dugme, koje treba da radi brisanje podataka iz tabele. E sad, kako da povezem to dugme i upit za brisanje podatka iz tabele i da se stranica ponovo ucita i prikaze novo stanje?

@zend Posalji mi taj kod koji imas, cisto da vidim kako to izgleda?

offline
  • PHP Developer
  • Pridružio: 02 Okt 2005
  • Poruke: 546

Nemoj ici ajaxom napravi POST on ucitava stranicu.

offline
  • zend  Male
  • Počasni građanin
  • Pridružio: 22 Okt 2009
  • Poruke: 900
  • Gde živiš: Pancevo

Pazi ja kod mene pri unosenju podataka o porudzbinama kupaca koristim transakcije, postupak je jednostavan i siguran koristim masinu baze
InnoDB

Imas tri mogucnosti belezenja stavki koje je korisnik izabrao prilikom kupovine.
1. Da koristis promenjivu sesije
2. Da upisujes u bazu
3. Da koristis cookies

Ako izaberes da koristis sesije za cuvanje izabranih proizvoda pri prelasku s jedne stranice na drugu, pojednostavljuje kod jer nije potrebno da se ti podaci neprekidno ucitavaju iz baze podataka.

Pazi osim toga, imas brdo korisnika koji samo pretrazuju Web lokaciju, pa se na kraju predomisle i ne kupe nista, nece puniti bazu podataka smecem.

Zato je najbolje da cuvas u jednoj promenljivoj sesije ili cak sto vise u grupi takvih promenljivih u kojima ces da cuvas podatke o proizvodima koje je korisnik izabrao.
Kada korisnik zavrsi kupovinu i plati proizvod koji je izabrao, podatke o tome upisujes u bazu podataka kao evidenciju podataka da je transakcija obavljena.

Te podatke koje upises mozes da upotrebis i za to da bi u nekom uglu stranice prikazao tekuce stanje korpe. Tako ce korisnik u svakom trenutku znati koliko ce potrositi. Wink

Evo ti neki primeri kod mene kako je.

Ovo koristim da prikazem korpu.

<?php   include ('sc_fns.php');   // Posto za rad korpe koristim sesiju  onda je i zapocinjem    session_start();   @ $new = $_GET['new'];   if($new)   {     //Nova stavka je izabrana     if (!isset($_SESSION['cart']))     {       $_SESSION['cart'] = array();       $_SESSION['items'] = 0;       $_SESSION['total_price'] ='0.00';     }     if (isset($_SESSION['cart'][$new]))       $_SESSION['cart'][$new]++;     else       $_SESSION['cart'][$new] = 1;     $_SESSION['total_price'] = calculate_price($_SESSION['cart']);     $_SESSION['items'] = calculate_items($_SESSION['cart']);   }   if (isset($_POST['save']))   {        foreach ($_SESSION['cart'] as $isbn => $qty)     {       if ($_POST[$isbn]=='0')         unset($_SESSION['cart'][$isbn]);       else         $_SESSION['cart'][$isbn] = $_POST[$isbn];     }     $_SESSION['total_price'] = calculate_price($_SESSION['cart']);     $_SESSION['items'] = calculate_items($_SESSION['cart']);   }   do_html_header('Your shopping cart');   if($_SESSION['cart']&&array_count_values($_SESSION['cart']))     display_cart($_SESSION['cart']);   else   {     echo '<p>There are no items in your cart</p>';     echo '<hr />';   }   $target = 'index.php';   // Ako smo dodali stavku u korpu, nastavljamo kupovinu  //  u toj kategoriji   if($new)   {     $details =  get_book_details($new);     if($details['catid'])          $target = 'show_cat.php?catid='.$details['catid'];   }   display_button($target, 'continue-shopping', 'Continue Shopping');    // Koristim ovaj kod ako je SSL aktivan   //   // $path = $_SERVER['PHP_SELF'];   // $server = $_SERVER['SERVER_NAME'];   // $path = str_replace('show_cart.php', '', $path);   // display_button('https://'.$server.$path.'checkout.php',   //                  'go-to-checkout', 'Go To Checkout');    // Ako SSL nije aktivan  koristim ovaj kod   display_button('checkout.php', 'go-to-checkout', 'Go To Checkout');      do_html_footer(); ?>

E sada da ti pojasnim ova scripta se sastoji od tri glavna dela:
1. Prikazivanje sadrzaja korpe
2. Dodavanje sadrzaja u korpu
3. Snimanje izmena u korpu

Bez obzira na koju je stranicu neki korisnik dosao uvek mu mozes prikazati sadrzaj korpe. Ako na primer taj korisnik pritisne dugme POGLEDAJ KORPU
Prikazes mu sadrzaje gore sam u kodu to naveo ali ajde da odvojim taj deo.

if ($_SESSION['cart'] &&                      array_count_values ($_SESSION['cart'] ))                      display_cart ($_SESSION['cart'] ); else {       echo 'Korpa je prazna'; }

Da dodas stavku u korpu

if ( !isset ($_SESSION['cart'])) {   $_SESSION['cart'] = array();   $_SESSION['cart'] = 0;   $_SESSION['total_price'] = '0.00'; }

Korpa je u pocetku prazna.

Drugo kada znas da korpa postoji mozes da dodas izabrani proizvod u nju.

if (isset($_SESSION['cart'] [$new]))             $_SESSION['cart'] [$new] ++ ; else        $_SESSION['cart'] [$nw] = 1;

Isitas da li odredjeni proizvod vec postoji u korpi. Ako je tako povecas za jedan broj primeraka tog proizvoda. Ako nije dodaje se novi proizvod u korpu.

I naravno na kraju treba da izracunas ukupan iznos i broj proizvoda

$_SESSION['total_price']= calculate_price ($_SESSION['cart']); $_SESSION['items'] = calculate_items ($_SESSION['cart']);

Ux ja se raspisao... DOsta ti je izvali sada sustinu svega tako je kod mene po tom fazonu radi i nemam problema. Pogledaj vidi probaj da izvuces maximum iz sesija jer su cudo. Uradi na svoj nacin ja sam ti cisto objasnio kako to funkcionise da ti ne pisem celu moju korpu sada... Nadam se da sam ti pomogao.
Pozdrav Ziveli

Ko je trenutno na forumu
 

Ukupno su 1120 korisnika na forumu :: 30 registrovanih, 3 sakrivenih i 1087 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: Arsenije, BlekMen, bokisha253, Bubimir, Centauro, doloress, draganl, Frunze, Gargantua, HogarStrashni, Kibice, LUDI, marera, Milan A. Nikolic, milenko crazy north, Milometer, Milos ZA, milutin134, moldway, Nikola00, Sir Budimir, Snorks, theNedjeljko, User98, vathra, Vlada78, VP6919, vrag81, zastavnik, ZetaMan