Autor Zpráva
slower
Profil *
Zdravím, potřeboval bych pomoct s jedním kódem v php, už se s tím trápím dlouho:(
O co jde:
Mám nákupní košík, do něho přidávám produkty, což mi šlape...

potom je dobré, aby v košíku mohl uživatel měnit množství dané položky a tady je menší problém...
mám funkci změna, která změní ten počet v košíku...

ukáži vám kousek funkce, která je funkční: ( potřebuji něco vysvětlit)
function zmena()
{
    $Id     = $_POST['Id'];   // id kose
    $knihaId  = $_POST['knihaId'];   // id knihy
    $pocetVeci    = $_POST['Pocet'];   // pocet ks jedné knihy v košíku
    $pocet    = count($pocetVeci); // ZDE TO NECHÁPU! proč je výsledek 1, když mám na každém řádku v tabulce košík ten náš počet ks

// Pro pochopení: Tabulka košík obsahuje např.: 3 řádky 
1. řádek -- počet (1x) kniha(kolja)
2. řádek -- počet (3x) kniha(mravenecek)
3. řádek -- počet (1x)kniha(mafia)
    

//count mi spočítá 1 ALE PROC ? když tam mám přece 3 položky???



    for ($i = 0; $i < $pocet; $i++) {
        $novyPocet = (int)$pocetVeci[$i];
    }
// $i bude nula, count spočítal, že je tam 1, a cyklus for udělá jen jeden cyklus....    

}

Děkuji za Váš čas
ShiraNai7
Profil
$_POST['Pocet'] je cislo? Pokud ano, tak nedava smysl na nem volat funkci count(). Pouzij rovnou toto cislo.
slower
Profil *
ano, to je číslo


ale proč je to jednička ? když na dynamické stránce mám těchto inputu pro Počet třeba několik ?
<input name="Pocet[]" type="text">

ja jsem myslel, že count mi spočíta, kolik těch inputu bylo v dynamické stránce vytvořeno...
David Klouček
Profil
slower:
Ty inputy pojmenovávej takhle:

name="Pocet[0]"
name="Pocet[1]"
name="Pocet[2]"
..
slower
Profil *
Nemůžu je takhle pojmenovat...protože já netuším kolik tech řádku v košíku budu mít, to záleží na uživateli ( na každém řádku bude jeden input)...
Proto to mám pojmenované name="Pocet[]"
Pořád jsem nepochopil, když funkce count má spočítat počet všech prvků v poli...

například u mě, po přidání knihy do košíku dejme to mu že už tam mám tří řádky a na každém řádku je ten input ,

a proc po použití count mi spočíta počet prvku v poli 1 když tam těch inputu s Poctem mám víc ?
<tr>
<td>
<input name="Pocet[]" type="text">
</td></tr>
$pocetVeci    = $_POST['Pocet'];   
    $pocet    = count($pocetVeci); 

Počet 3-- kniha --- první řádek
Počet 2-- kniha --- druhy řádek

Tady by měl count spočítat počet prvku v poli 2 ne??
mimochodec
Profil
slower:
Možná trochu odbočím.. opravdu chceš ten nákup udržovat v POSTu? Běžně se to dělá v sessions nebo cookies.
Someone
Profil
Souhlasím s mimochodec avšak pr ořešení tohoto problém, navzdory tomu, že by SESSION bylo lepší: zkus si vypsat pole ať zjistíš v čem může být chyba: var_dump($_POST) případně var_dump($_POST['Poce'])
slower
Profil *
tady http://php.vrana.cz/nakupni-kosik.php má to dobré, ale já se v tom moc nevyznám, a můj košík umí změnit množství...a ten to tam nemá...


var_dump($_POST['Pocet']) tak jsem to zkusil vypsalo mi to array(1) { [0]=> string(1) "6" }, což znamená že v poli 1 je počet 6...

tady je ukázka, že v mém košíku je těch polí 3


Proc mi to vždycky ukáže ten poslední input ? což je pole 1 s počtem 6 ? ale předtím mám ještě další dvě pole


obrázek
http://2i.cz/c249a78d5e
Again
Profil
slower:
a ten to tam nemá - nejde o spojování kódu, ale o ukládání informací do SESSION, v principu to funguje takto:

1) Uživatel si přidá do košíku novou věc -> vytvoří se pole s ID a uloží se vše do SESSION.
2) Pokud uživatel přidá další věc -> do pole se přidá nové SESSION.
3) Pokud uživatel zboží vyjme z košíku, z pole se vyjme daný prvek.
4) Poté co si uživatel spokojeně nakoupí a přejde do košíku, zobrazí se mu výčet všech položek, které nakoupil (pomocí dotazu do db se zjistí další informace).

Největší výhoda použití SESSION je, že u všech stránek můžeš zobrazovat aktuální počet kusů v košíku a přidávat/odebírat zboží pouhou manipulací v poli a poté
po kliknutí na košík se všechny informace v SESSION vypíšou + další informace můžeš získat dotazem do databáze ...

Vaše odpověď

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0