[ pisac @ 12.08.2016. 10:52 ] @
Kako da napravim automatsku kupovinu svih proizvoda iz korpe uzastopnim pozivanjem nezavisnih php stranica koje se već koriste za pojedinačnu kupovinu? Ne bih da dupliram kod, a ovako mi ne radi.

Dakle, kad hoću da kupim neki proizvod kliknem na "buy" i odvede me na buy.php koji odradi posao automatski (ako imam para na računu). Ako hoću to isto da odradim sa jednim proizvodom koji je u korpi takođe kliknem buy u korpi i to odradi automatski. Međutim ako hoću da kupim sve iz korpe onda ovo dole ne radi... skripta ulazi u switch/case za svaki proizvod ali kao da uopšte ne poziva redir ili je neki drugi problem, sve što kupi jeste samo zadnji proizvod u foreach nizu, odnosno zadnji proizvod u korpi.

Probao sam umesto redir da ubacim file_get_contents ali to onda ne radi ni pojedinačno.


[basket][id][0] je tip kupovine (registracija domena, obnova domena, kupovina proizvoda)
[basket][id][1] je ime proizvoda/domena

Code:

function redir($redir)
{
    header("location:$redir");
    echo("<html><body><meta http-equiv='refresh' content='0; url=".$redir."'><a href='".$redir."'>".$redir."</a></body></html>");
}
function basketpay($id)
{
        switch($_SESSION['basket']["$id"][0])
        {
            case 1:
                redir("register.php?domainname=".$_SESSION['basket']["$id"][1]);
                break;
            case 2:
                redir("renew.php?domainname=".$_SESSION['basket']["$id"][1]);
                break;
            case 3:
                redir("buy.php?product=".$_SESSION['basket']["$id"][1]);
                break;
        }
}

if(isset($_GET['id']) && $_GET['id']=="all")
{ //SVE
    foreach($_SESSION['basket'] as $id=>$val)
    {
        basketpay($id);
    }
}
elseif(isset($_GET['id']) && isset($_SESSION['basket']["$_GET[id]"]))
{ //POJEDINACNO
    basketpay($_GET['id']);
}
else
{ //GRESKA
    redir($_SESSION['pageback']);
}
[ plus_minus @ 12.08.2016. 16:00 ] @
A zašto prvo ne pročitaš šta se dešava odnosno koja je razlika kada navedeš: header( Content-type: -- TIP FAJLA --) i header(Location: -- `GDE ?` -- ) u php-u ?
Ti bez sesija ili baze sa php-om ovo ovako da izvedeš, nećeš nikad.
Sve što staviš ispod header('Location: *'); neće da se izvrši, već će skripta da se ponaša kao da si pritisnuo F5 + lokacija koju si naveo, a ispod te naredbe biva sve zaboravljeno.

Code (php):

header('Location: '.$_SERVER['REQUEST_URI']);
 


Ovo gore osvežava istu stranicu i logično je koristiti onda nakon što se izvrši procesiranje forme, kada action atribut u samoj formi ima ili blanko ili # vrednost.
Nakon te komande, jedno smisleno što može da dođe jeste exit; komanda, ništa drugo.

Evo, kao da si ti postavio ovaj Q: PHP Header Location

[Ovu poruku je menjao plus_minus dana 12.08.2016. u 17:21 GMT+1]
[ dejanet @ 12.08.2016. 22:13 ] @
Ne znam php, ali mislim da treba da imas neki objekat npr. CartItem sa poljima productId, kolicina, cena. Zatim listu CartItem objekata vezes za Session npr:
$_SESSION["basket"] = array(cartItem1, cartItem2, cartItem3....), pa onda ubacis u petlju i odradis procesiranje korpe. Takodje u nastavku treba da se urade add, update i delete funkcije za korpu.
[ pisac @ 13.08.2016. 00:55 ] @
Imam ja i bazu i kukije i sve sto treba za korpu, jedino ne znam kako da izvedem foreach sa tim php stranicama za kupovinu da ne bih prekucavao kod sa tih stranica u switch/case.

Ali izgleda da cu morati ili da prekucavam ili da pravim funkcije za kupovine pa ih pozivam i sa tih stranica i odavde.
[ dejanet @ 13.08.2016. 08:03 ] @
Ako nisu u pitanju eksterne stranice/servisi za kupovinu, onda mozes da 'refaktorises' funkcije za kupovinu sa tih stranica, koje onda koristis na mestima gde ti treba u aplikaciji, termin 'code-reuse'. Znaci zoves funkcije za kupovinu a ne stranice. php file u tom slucaju sluzi kao 'container' za te zajednicke funkcije. php file zoves sa include ili ga smestis u root, da bi funkcije bile dostupne na stranicama.

pseudo code:

Code:
$basket = $_SESSION["basket"] ; 
foreach ($basket  as &$basketItem) {
    buyFunkcija(basketItem);
}


Nadam se da nisam promasio temu..