Kezdőoldal » Számítástechnika » Programozás » PHP bevásárlókosárnál hogyan...

PHP bevásárlókosárnál hogyan érdemes ezt megoldani?

Figyelt kérdés

A bevásárlókosár SQL adatbázisból szedi az adatokat, felhasználó azonosító alapján gyűjti le hogy kinek mi van a kosárban. A tábla az 'id' mezőben tárolja a termék azonosítóját míg a 'quantity' mezőben hogy hány darab van a kosárban. While ciklussal PHP listázza a kosár tartalmát.

Minden termék mellé kellene egy input mező és egy gomb, hogy módosítani lehessen az adott termék darabszámát. Az input value tartalmazza a 'quantity' mező értékét míg a button value az adott termék 'id'-jét.

Milyen megoldással érdemes megcsinálni, hogy az oldal csak az adott termék darabszámát frissítse? A While ciklus nélkül pofonegyszerű lenne, de ha a while ciklusban csinálom sorban mindegyik terméket frissíteni fogja.

Milyen megoldás lenne a legkézenfekvőbb? Lehetőleg PHP.



ápr. 24. 10:47
 1/4 Szikszai.B ***** válasza:
27%
AJAX?
ápr. 24. 10:51
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:
40%

Így architektúra kontextus nélkül nehéz válaszolni. Mivel PHP while-al pörgeted a kosarat, akkor felteszem szerver oldali renderelés folyik, azaz a PHP köpi ki a HTML-t a végén.


Tegyük fel így néz ki a tábla pszeudó kóddal:


Product(

- id: number, [elsődleges]

...)


Basket(

- id: number, [elsődleges]

- product_id: number, [idegen kulcs]

- user_id: number [idegen kulcs]

- quantity: number

)


A) Megvalósítás


Tehát, mivel minden terméknek van 1db ID-ja, amivel azonosítod, így minden kosárban lévő termékre feltudsz húzni egy form-ot. Ez tartalmazza a kosár egy rekord ID-ját type=hidden módon (nem jelenik meg az input), input a mennyiségre és egy küldő gomb.


Erre olyan endpoint kell, ami lerendeli szokásos módon, de csak egy id-val foglalkozik.


B) Megvalósítás


Ha nem szeretnéd betölteni az oldalt újra, akkor aszinkron hívásra lesz szükséged. Lénygében számos library ad erre lehetőséget kliens oldalról. Én személy szerint, ha nem Angular rendszert használok akkor Axios HTTP library-t veszem elő és itt eldöntheted, hogy optimista vagy pesszimista leszel.


Tehát szükséged van egy JSON fogadó/küldő API-ra szerver oldalon. (Olvass a RestAPI-k után) Ez az API kezeli a frissítéseket, de csak annyit küld vissza, hogy OK vagy NemOK. (most mondtam valamit, de lehet ez HTTP kód is).


Optimista működés: Nem várod meg az OK választ, és átírod a kosár tartalmát. Azért optimista, mert feltételezed, hogy a frissítés sikeres lesz. Ha nem, max késöbb korrigálsz rajta. (kifli.hu mobil alkalmazás is optimista, mert nem egyszer dobálta vissza a kosár tartalom mennyiségét... :)


Pesszimista működés: Hiába küldte el a módosítást, addig az értékhez hozzá nem nyúlsz, míg a szervertől a válasz meg nem jött, hogy mentve vagy sem.


---


Persze figyelni kell a user_id-ra is, mert csak ha sima kosár id-ban bízol meg, akkor egy hasonló API hívással más kosarát is módosítani lehet! Tehát az küldött id rekordjában az adott user_id-nak kell szerepelnie, aki autentikációt végezte (magyarul bejelentkezett). Különben HTTP400 válasz is mehet vissza.

ápr. 24. 13:59
Hasznos számodra ez a válasz?
 3/4 A kérdező kommentje:
Közben megoldottam. Input nevének a termék id-jét adom meg, a módosítást meg a while cikluson kívül futtatom le.
ápr. 24. 14:05
 4/4 anonim ***** válasza:
Ha nem használsz keretrendszert, akkor javaslom a Laravel-t: [link]
ápr. 24. 14:15
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!