Autor Zpráva
Kry5
Profil
Zdravím,
mám takový problém:
snažím se udělat nákupní košík pomocí sessions. Ke každé položce potřebuji mít tři hodnoty. Napadl mě jeden způsob jak by to možná šlo vyřešit:
Takto registruji novou položku do košíku:
if(!isset($_SESSION["kosik"])) {
  $_SESSION["kosik"] = array();
}

$_SESSION["kosik"]["id_zbozi=".$id_zbozi."&velikost=".$velikost] = $pocet;


Přičemž pak chci udělat něco takového:
       while ($this = current(intVal($_SESSION["kosik"])) ){
       
parse_Str($zde_je_jmeno_polozky_array);
       
next(intVal($_SESSION["kosik"]));
}


A pak už jen uložit hodnoty jednotlivých rozkódovaných proměnných z názvu session do proměnných.
Teď mám několik dotazů:

1) Jak si můžu uložit do proměnné název té dané jedné položky v array?

2) Mám ten cyklus while správně? Měl by projít tolikrát kolik mám položek v array a pokaždé vybrat jednu z nich

3) Nenapadá vás lepší řešení? Potřebuji mít přenesené 3 hodnoty (velikost, id_zbozi, pocet)

Díky moc
Taps
Profil
Kry5:
zkus se inspirovat http://php.vrana.cz/nakupni-kosik.php
Kry5
Profil
Díky. Pochopil jsem, že název proměnné v array asi zjištujě toto:
('" . implode("', '", array_keys($_SESSION["kosik"])) . "')


Ale nechápu jak to funguje. Mohl by mi to někdo prosím vysvětlit? Díky moc
Alphard
Profil
Kry5:
$_SESSION["kosik"]["id_zbozi=".$id_zbozi."&velikost=".$velikost] = $pocet;
Jak vás napadla tahle šílenost? Proč neuděláte $_SESSION["kosik"]['id'] = array('velikost', 'pocet');?

[#3] Tím se získá id zboží v košíku, aby se z db vytáhly podrobnosti.
Kry5
Profil
Alphard:
Díky moc. To jsem přesně potřeboval, ale můžu se ještě zeptat:
Takhle zakládám session:
else if($prihlasen=="ne") {
if(!isset($_SESSION["kosik"])) {
  $_SESSION["kosik"] = array();
}

$_SESSION["kosik"]['id'] = array($velikost,$pocet);
}


A teď to v jiném souboru chci načíst:
        else {
        if($_SESSION["kosik"]) {
 $result = mysql_query("SELECT ID_zbozi FROM zbozi WHERE ID_zbozi IN ('" . implode("', '", array_keys($_SESSION["kosik"])) . "')");
 
 while ($row = mysql_fetch_assoc($result)) {
    $velikost = $_SESSION["kosik"][$row["id"]][0];
    echo"<br>Ahoj".$velikost;
    }
}
else {
die('<h3>Žádné položky v košíku nemáte.</h3>');
} 


Bohužel mi to nevypisuje žádnou chybu (zapnuto E_ALL) ani se nic nevypíše, tak předpokládám, že cyklus vůbec neproběhne. mysql_error my ale také nic nevypsalo. Netušíte čím by to mohlo být?
Taps
Profil
Kry5:
je nutné aby na začátku skriptu bylo uvedeno
session_start();

Vycházej příkladu který jsem ti uvedl. Ve svém skriptu přidáš do košíku další věci.
Kry5
Profil
Taps:
Session_start tam samozřejmě mám.

Vycházím z něj. Ale bohužel si nevím rady, proč mi toto nefunguje. Většinou nepoužívám v databázových dotazech IN a to složité získání ID, tomu nerozumím a předpokládám, že chyba bude tam.

Alphard:
Teď jsem si uvědomil, že potřebuji řešit i případ, kdy je v košíku několik kusů stejného zboží, ale různých velikostí. To by asi v tomto případě nešlo. Jak byste to upravil? Děkuji
Alphard_
Profil *
Kry5:
Jak byste to upravil?
Nevím, jaká je konkrétní situace. Záleži na struktuře databáze, identifikaci prvků apod.
Jste si jistý, že je ve vašich silách udělat eshop? Jde tam o peníze.
Kry5
Profil
Alphard:
Celý eshop už mám hotový. Jde mi teď o košík pro neregistrované uživatele a já pole moc nepoužívám a tak nevím. Myslím, že tady na struktuře databáze nezáleží potřebuji akorát uložit session ve které budou tři data a identifikovat jednu session musím podle 2 dat -> ID_zboží a velikosti. Tj. v názvu pole musí být asi zahrnuty obě dvě.
Alphard_
Profil *
Kry5:
Tj. v názvu pole musí být asi zahrnuty obě dvě.
Ne, v názvu určitě nemusí.

Myslím, že tady na struktuře databáze nezáleží potřebuji akorát uložit session ve které budou tři data a identifikovat jednu session musím podle 2 dat
Nevím, co vlastně chcete. Zboží uložené máte, co si představit pod identifikací nevím. Máte id + doplňující informace, víc nepotřebujete.
Kry5
Profil
Alphard:
S databází problém není. Řeším jenom předání pomocí sessions.

Jeden problém, nebo spíše dotaz byl pokud bude mít tak jak jste navrhoval několikaúrovňové array (
$_SESSION["kosik"]['id'] = array('velikost', 'pocet');
) tak pokud si uživatel přidá do košíku řekněme:

pro příklad boty mají ID=5 a možné velikost 1,2,3,4 a uživatel si do košíku přidá tyhle boty 2x ale jednou velikost 1 a jednou velikost 2. V tom případě by se session (měly by stejné jméno) přepsali. Nebo se pletu?
Alphard_
Profil *
Třeba další pole, velikost 1 je tam 2x, velikost 3 je 1x.
$_SESSION["kosik"]['id'] = array(1 => 2, 3 => 1);


Nebo mít další identifikátory pro různé parametry. Protože pak tam přidáte barvy a bude problém.
Kry5
Profil
Alphard:
Asi to vyřeším tak, že tam jednoduše přidám další pole ve kterém bude velikost. Děkujï moc za pomoc!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0