[ Príspevkov: 17 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 18.10.07
Prihlásený: 14.07.11
Príspevky: 107
Témy: 32 | 32
NapísalOffline : 11.04.2008 15:34 | nakupny kosik

cawte, chcel by som si spravit jednoduchy nakupny kosik s pouzitim session, bez databazy. do pola si pridam cca 4 veci ktore potom pomocou session chcem ukladat do nakupneho kosika. vedel by mi niekto poradit ako nato ? alebo mi napisat nejaky jednoduchy skript ako sa taketo veci robia ? diky


Offline

Skúsený užívateľ
Skúsený užívateľ
nakupny kosik

Registrovaný: 30.05.06
Prihlásený: 08.10.14
Príspevky: 1756
Témy: 35 | 35
Bydlisko: BA - WESTSIDE
NapísalOffline : 12.04.2008 19:59 | nakupny kosik

Napíšem ti zhruba ako na to, konečná realizácia nie je v zásade nijak náročná.

Povedzme, že máš natvrdo v skripte definované pole produktov, ktoré majú nejaké tie klasické parametre, ako je názov, popis, cena za kus, počet kusov na sklade, dodacia lehota, obrázok... Dôležité je, aby mali nejaký svoj unikátny kód (môže to byť obyčajné číslo, prípadne nejaký kratší reťazec z čísiel a písmen).

Dobré bude mať toto pole definované v samostatnom súbore, pretože ho budeme ešte viackrát potrebovať a nebude treba ho stále prepisovať na viac stránok a mať tak duplicity, ktoré sa zle udržujú.
Kód:
<?php
/*
subor produkty.php

unikatny kod je indexom prvku v poli, dalej je nazov, popis, cena za kus, dodacia lehota (toto pole môže byť aj asociatívne, tj. jednotlivé atribúty produktu budú definované nie číslom, ale textovým reťazco. Napr. teraz pre názov použiješ $produkty["dr01"][0], v asociatívnom poli by to mohlo byť $produkty["dr01"]['nazov'])
*/
session_start();
$produkty["dr01"] = array("Domáci robot", "Skvelý domáci robot na miešanie cesta", "999", "24 hodín");
$produkty["dr02"] = array("Domáci robot", "Ešte lepší robot na miešanie cesta", "1999", "48 hodín");
?>


Pri výpise všetkých týchto položiek (najlepšie foreach cyklom) vypíšeš každému produktu jedno políčko na počet produktov.
Kód:
// obchod.php

require_once("produkty.php");
if (count($produkty) > 0) {
  echo "<form action=\"pridaj_do_kosika.php\" method=\"post\">\n";
   foreach ($produkty as $key=>$value) {
      echo "
      <label>
        ".$value[0]." - ".$value[1]." (".$value[2]." Sk za ks),
        dodacia lehota: ".$value[3].". Vložiť do košíka
        <input type=\"text\" name=\"produkt[".$key."]\" value=\"1\"> ks
      </label>
    ";
  }
  echo "
      <input type=\"submit\" value=\"Vložiť do košíka\">
    </form>
  ";
} else {
  echo "V ponuke zatiaľ nie sú žiadne produkty!";
}


Na stránke pridaj_do_kosika.php najprv pomocou funkcie require_once("produkty.php"); zahrnieš súbor s poľom a potom skontroluješ parametre odoslané z formulára, ak všetko sedí pridáš daný počet kusov do _SESSION premennej.
Kód:
// pridaj_do_kosika.php

require_once("produkty.php");
if (count($produkty) > 0) {
  if (isset($_POST['produkt']) && count($_POST['produkt']) > 0) {
     foreach ($_POST['produkt'] as $key=>$value) {
      if (ereg("^[1-9][0-9]*$", $value)) {
          $key = trim(htmlspecialchars(strip_tags($key)));
        foreach ($produkty as $pkey=>$pvalue) {
           if ($pkey == $key) {
              $_SESSION['produkt'][$pkey] = $value;
          }
        }
      }
    }
  } else {
    echo "Chyba, nevybrali ste ani jeden produkt do košíka!";
  }
} else {
  echo "V ponuke zatiaľ nie sú žiadne produkty!";
}

Po tomto kroku treba stránku presmerovať funkciou header() na stránku s výpisom obsahu košíka (aby sme zneplatnily POST premenné).

Kód:
// vypis.php

require_once("produkty.php");
if (isset($_SESSION['produkt']) && count($_SESSION['produkt']) > 0) {
  echo "
    <table>
      <caption>Obsah vášho košíka: </caption>
      <tr>
        <th>Produkt</th>
        <th>Cena za 1 ks</th>
        <th>Počet ks</th>
        <th>Cena celkom</th>
      </tr>
  ";
  $cena_celkom = 0;
   foreach ($_SESSION['produkt'] as $key=>$value) {
      $cena_celkom = $cena_celkom + ($produkty[$key][2]*$value);
    echo "
      <tr>
        <td>".$produkty[$key][0]."</td>
        <td>".$produkty[$key][2]."</td>
        <td>".$value."</td>
        <td>".($produkty[$key][2]*$value)."</td>
      </tr>
    ";
  }
  echo "
      <tr>
        <td colspan=\"3\">Celková cena nákupu: </td>
        <td>".$cena_celkom."</td>
      </tr>
    <table>
  ";
} else {
  echo "Váš nákupný košík je prázdny!";
}


No, teraz treba ešte dorobiť odoberanie produktov z košíka, dá sa to spraviť "rozumne" (po jednom) aj nerozumne (naraz, zrušením premennej $_SESSION['produkt']); potom treba dorobiť nejaké zadávanie osobných údajov adresáta, to možeš pridať napr. do $_SESSION['adresat'] a mať to tak pokope. Po skončení nákupu je dobré hneď vymazať $_SESSION['produkt'], naopak, údaje o adresátovi si môžeš nechať (prípadne spraviť ešte jedno pole, kde budeš ukladať minulé nákupy užívateľa, samozrejme, keď vypne prehliadač, všetko sa stratí).

Ten zvyšok by si už mal nejak doklepať sám, celé je to o tom hlavne si kontrolovať všetky vstupné údaje a rozumne ich spájať a vyhodnocovať...

Skús si taký prvý pokus spraviť, daj to niekde na web a ak by si mal ešte nejaké problémy, nejak sa to doklepe.


_________________
A. S. Tanenbaum píše:
The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice.
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 18.10.07
Prihlásený: 14.07.11
Príspevky: 107
Témy: 32 | 32
Napísal autor témyOffline : 17.04.2008 19:32 | nakupny kosik

tak to je super, velmi si mi pomohol diiiiky


Offline

Užívateľ
Užívateľ
nakupny kosik

Registrovaný: 09.09.07
Prihlásený: 07.11.16
Príspevky: 3114
Témy: 233 | 233
Bydlisko: Nové Zámky
NapísalOffline : 23.04.2008 14:48 | nakupny kosik

tak toto sa zide aj mne,., diki..
akurat k tomuto otazka:
Kód:
strip_tags($key)

ta premenna key, to je co? tam su tie texty k tomu produktu??


_________________
"It took a lot of work, but this latest Linux patch enables support for machines with 4096 CPUs, up from the old limit of 1024." "Do you have support for smooth full-screen flash video yet?" "No, but who uses that?"
- ak dlho neodpisujem do témy, zabudol som na ňu, takže ma upozornite SS, ak chcete moju odpoveď
Offline

Čestný člen
Čestný člen
nakupny kosik

Registrovaný: 17.10.06
Prihlásený: 08.01.11
Príspevky: 1752
Témy: 17 | 17
NapísalOffline : 23.04.2008 15:47 | nakupny kosik

$key je index v poli


_________________
A Real Programmer might or might not know his wife's name. He does, however, know the entire ASCII code table.
Offline

Skúsený užívateľ
Skúsený užívateľ
nakupny kosik

Registrovaný: 30.05.06
Prihlásený: 08.10.14
Príspevky: 1756
Témy: 35 | 35
Bydlisko: BA - WESTSIDE
NapísalOffline : 03.06.2008 17:31 | nakupny kosik

Doplnenie o mazanie:
Kód:
// vypis.php

require_once("produkty.php");
if (isset($_SESSION['produkt']) && count($_SESSION['produkt']) > 0) {
  echo "
    <table>
      <caption>Obsah vášho košíka: </caption>
      <tr>
        <th>Produkt</th>
        <th>Cena za 1 ks</th>
        <th>Počet ks</th>
        <th>Cena celkom</th>
        <th>Odstránenie</th>
      </tr>
  ";
  $cena_celkom = 0;
   foreach ($_SESSION['produkt'] as $key=>$value) {
      $cena_celkom = $cena_celkom + ($produkty[$key][2]*$value);
    echo "
      <tr>
        <td>".$produkty[$key][0]."</td>
        <td>".$produkty[$key][2]."</td>
        <td>".$value."</td>
        <td>".($produkty[$key][2]*$value)."</td>
        <td><a href=\"vymaz_produkt.php?id=".$key."\">Vymazať</a></td>
      </tr>
    ";
  }
  echo "
      <tr>
        <td colspan=\"3\">Celková cena nákupu: </td>
        <td>".$cena_celkom."</td>
      </tr>
    <table>
  ";
} else {
  echo "Váš nákupný košík je prázdny!";
}


Kód:
// vymaz_produkt.php

require_once("produkty.php");
if (isset($_SESSION['produkt']) && count($_SESSION['produkt']) > 0) {
   $vymazany = false;
   if (isset($_GET['id']) && trim(strip_tags($_GET['id'])) != ''){
    foreach($produkty as $key => $value){
       if($key == $_GET['id']){
          unset($_SESSION['produkt'][$key]);
          $vymazany = true;
       }
    }
  }
  if ($vymazany){
    echo "<p>Produkt vymazaný!</p>";
  } else {
     echo "<p>Daný produkt sa v košíku nenachádza!</p>";
  }
} else {
  echo "Váš nákupný košík je prázdny!";
}


Mohlo by to fungovať. :)


_________________
A. S. Tanenbaum píše:
The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice.
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 18.10.07
Prihlásený: 14.07.11
Príspevky: 107
Témy: 32 | 32
Napísal autor témyOffline : 03.06.2008 21:53 | nakupny kosik

este raz diky moc, ide to super


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 18.10.07
Prihlásený: 14.07.11
Príspevky: 107
Témy: 32 | 32
Napísal autor témyOffline : 02.07.2008 11:02 | nakupny kosik

chcel by som spravit nieco take, ze vsetky polozky aj s poctom by som chcel vlozit do jedneho retazca, viem ze sa to da cez funkciu implode ale neviem presne ako. vedel by mi s tym niekto pomoct ?


Offline

Čestný člen
Čestný člen
nakupny kosik

Registrovaný: 17.10.06
Prihlásený: 08.01.11
Príspevky: 1752
Témy: 17 | 17
NapísalOffline : 02.07.2008 11:16 | nakupny kosik

http://sk.php.net/implode


_________________
A Real Programmer might or might not know his wife's name. He does, however, know the entire ASCII code table.
Offline

Správca fóra
Správca fóra
nakupny kosik

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51 | 51
Bydlisko: Bratislava
NapísalOffline : 02.07.2008 11:20 | nakupny kosik

ked chces nieco zlucit do jedneho retazca cez funkciu implode, musis mat tie jednotlive hodnoty ulozene v poli a potom uz len urcit, cim maju byt spojene:
Kód:
<?php
$pole = array("auto","moto","bike");
echo implode(",",$pole); //vyskedok bude auto,moto,bike
?>

Ale nechapem jednu vec, preco to chces davat vsetko do jedneho retazca? Nechaj si to radsej vsetko v poli, s tym sa ovela jednoduchsie pracuje...


_________________
NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 18.10.07
Prihlásený: 14.07.11
Príspevky: 107
Témy: 32 | 32
Napísal autor témyOffline : 02.07.2008 11:25 | nakupny kosik

ja to potrebujem mat v jedom retazci pretoze chcem poslat mailom nazov produktov a pocet produktov a ked to davam do mailu tak to potrebujem mat v jednom retazci. da sa spravit nieco take ze by som do jedneho retazca vlozil vedla seba nazov produktu a pocet ? ale len tie co su v session, cize len tie co som si vybral do kosika

myslim to tak ze ja nechcem aby mi do retazca vlozil cele pole ale len jednu polozku z toho pola. skusal som to takto
$retazec = implode("<br />", $produkty[$key][0]);
ale toto mi vypise chybu ze mam zle argumenty. da sa to nejako spravit ?


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 29.07.10
Prihlásený: 29.07.10
Príspevky: 1
Témy: 0 | 0
NapísalOffline : 29.07.2010 13:27 | nakupny kosik

môžem sa spýtať.. kedy vyprší session?


Offline

Užívateľ
Užívateľ
nakupny kosik

Registrovaný: 05.09.09
Príspevky: 1141
Témy: 127 | 127
Bydlisko: Lehota pod ...
NapísalOffline : 30.07.2010 0:06 | nakupny kosik

Ak môžem, by som sa chcel spýtať, načo je treba presmerovávať, a rušiť $_POSTy??


Offline

Užívateľ
Užívateľ
nakupny kosik

Registrovaný: 09.09.07
Prihlásený: 07.11.16
Príspevky: 3114
Témy: 233 | 233
Bydlisko: Nové Zámky
NapísalOffline : 30.07.2010 1:43 | nakupny kosik

Lebo ked nejaku POST premennu ukladas do DB, tak ja budem stlacat F5 a tebe to spravi tisice zaznamov :)


_________________
"It took a lot of work, but this latest Linux patch enables support for machines with 4096 CPUs, up from the old limit of 1024." "Do you have support for smooth full-screen flash video yet?" "No, but who uses that?"
- ak dlho neodpisujem do témy, zabudol som na ňu, takže ma upozornite SS, ak chcete moju odpoveď
Offline

Užívateľ
Užívateľ
nakupny kosik

Registrovaný: 05.09.09
Príspevky: 1141
Témy: 127 | 127
Bydlisko: Lehota pod ...
NapísalOffline : 30.07.2010 13:45 | nakupny kosik

Blackshadow:
To nechápem, nemáš nejaký link kde je to popísané?? Je kopa $_POSTov ktoré sa ukladajú do DB a nikdy som o ničom podobnom nečítal... :shock:


Offline

Užívateľ
Užívateľ
nakupny kosik

Registrovaný: 09.09.07
Prihlásený: 07.11.16
Príspevky: 3114
Témy: 233 | 233
Bydlisko: Nové Zámky
NapísalOffline : 30.07.2010 14:04 | nakupny kosik

Kód:
<?php
if(!empty($_POST['text'])) {
 mysql_query("zapis ten text do DB s insertom");
}

<form method="post">
<input type="text" name="text">
<input type="submit" value="go">
</form>
?>


napis nieco do toho inputu a potvrd.. Potom stlacaj F5 (refresh)
a nasledne sa pozri, kolko mas zaznamov v DB


_________________
"It took a lot of work, but this latest Linux patch enables support for machines with 4096 CPUs, up from the old limit of 1024." "Do you have support for smooth full-screen flash video yet?" "No, but who uses that?"
- ak dlho neodpisujem do témy, zabudol som na ňu, takže ma upozornite SS, ak chcete moju odpoveď
Offline

Užívateľ
Užívateľ
nakupny kosik

Registrovaný: 05.09.09
Príspevky: 1141
Témy: 127 | 127
Bydlisko: Lehota pod ...
NapísalOffline : 30.07.2010 16:21 | nakupny kosik

Blackshadow
No vždy ma to upozorní, že som už odosielal, takže v tom nevidím také veľké riziko....či ako??


 [ Príspevkov: 17 ] 


nakupny kosik



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Nakupny kosik

v PHP, ASP

7

768

02.12.2010 15:31

walther

V tomto fóre nie sú ďalšie neprečítané témy.

Nákupný košík

v Ostatné

4

710

14.03.2008 21:38

HAE07

V tomto fóre nie sú ďalšie neprečítané témy.

jednoduhý nákupný košík

v PHP, ASP

24

1552

26.03.2008 0:53

wotan

V tomto fóre nie sú ďalšie neprečítané témy.

Nakupny kosik cez session

v PHP, ASP

15

1061

21.06.2010 18:57

jtomcik

V tomto fóre nie sú ďalšie neprečítané témy.

PHP kosik div

v PHP, ASP

5

492

23.09.2012 13:00

killer

V tomto fóre nie sú ďalšie neprečítané témy.

e-shop - kosik > problem

v PHP, ASP

2

423

16.01.2009 20:27

stenley



© 2005 - 2024 PCforum, edited by JanoF