Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z koszykiem
Forum PHP.pl > Forum > Przedszkole
przemo191
Stworzyłem koszyk oparty na sesiach. Do koszyka oprócz id i ilości muszę dodawać id_wybarwienia_drewna, nr_wybarwienia, id_tkaniny oraz nr_tkaniny.
Wszystko dobrze działa dopóki ktoś nie zachcę sobie kupić takiego samego przedmiotu tylko np z innym wybarwieniem drewna.


  1. $koszyk = Array(
  2. 'lp' => array(),
  3. 'id' => array(),
  4. 'id_wyb' => array(),
  5. 'nr_wyb' => array(),
  6. 'id_tka' => array(),
  7. 'nr_tka' => array(),
  8. 'ilosc' => array(),
  9. );
  10. $_SESSION['koszyk']=$koszyk;


funkcja dodawania
  1.  
  2. function add($id, $id_wyb, $nr_wyb, $id_tka, $nr_tka, $ilosc){
  3. $x=count($_SESSION['koszyk']['lp']); // ilosc rekordów w tablicy lp
  4.  
  5. $_SESSION['koszyk']['lp'][]=$x+1;
  6. $_SESSION['koszyk']['id'][]=$id;
  7. $_SESSION['koszyk']['id_wyb'][]=$id_wyb;
  8. $_SESSION['koszyk']['nr_wyb'][]=$nr_wyb;
  9. $_SESSION['koszyk']['id_tka'][]=$id_tka;
  10. $_SESSION['koszyk']['nr_tka'][]=$nr_wyb;
  11. $_SESSION['koszyk']['ilosc'][]=$ilosc;
  12. }
  13.  

funkcja aktualizacji która ma dodać do $ilosc jeden produkt, wtedy gdy wszystkie id,nr itd... są takie same.
  1. function update($lp, $u_id, $u_id_wyb, $u_nr_wyb, $u_id_tka, $u_nr_tka, $u_ilosc){ // aktualizacja tablicy
  2. $_SESSION['koszyk']['id'][$lp]=$u_id;
  3. $_SESSION['koszyk']['id_wyb'][$lp]=$u_id_wyb;
  4. $_SESSION['koszyk']['nr_wyb'][$lp]=$u_nr_wyb;
  5. $_SESSION['koszyk']['id_tka'][$lp]=$u_id_tka;
  6. $_SESSION['koszyk']['nr_tka'][$lp]=$u_nr_tka;
  7. $_SESSION['koszyk']['ilosc'][$lp]=$u_ilosc;
  8. }


wszystko osobno działa natomiast po połączeniu tego w jedno już nie jest tak dobrze

  1. function add($id, $id_wyb, $nr_wyb, $id_tka, $nr_tka, $ilosc){
  2. $x=count($_SESSION['koszyk']['lp']); // ilosc rekordów w tablicy lp
  3.  
  4. var_dump($kluczid=array_search($id,$_SESSION['koszyk']['id'])); echo 'jeden<br />';
  5. var_dump($kluczid_wyb=array_search($id_wyb,$_SESSION['koszyk']['id_wyb'])); echo 'dwa<br />';
  6. var_dump($klucznr_wyb=array_search($nr_wyb,$_SESSION['koszyk']['nr_wyb'])); echo 'trz<br />';
  7. var_dump($kluczid_tka=array_search($id_tka,$_SESSION['koszyk']['id_tka'])); echo 'cztery<br />';
  8. var_dump($klucznr_tka=array_search($nr_tka,$_SESSION['koszyk']['nr_tka'])); echo 'piec<br />';
  9. var_dump($kluczilosc=array_search($ilosc,$_SESSION['koszyk']['ilosc'])); echo 'szesc<br />';
  10.  
  11. if(($kluczid == $id) and ($kluczid_wyb == $id_wyb) and ($klucznr_wyb == $nr_wyb) and ($kluczid_tka == $id_tka) and ($klucznr_tka == $nr_tka)){
  12.  
  13. $_SESSION['koszyk']['lp'][]=$x+1;
  14. $_SESSION['koszyk']['id'][]=$id;
  15. $_SESSION['koszyk']['id_wyb'][]=$id_wyb;
  16. $_SESSION['koszyk']['nr_wyb'][]=$nr_wyb;
  17. $_SESSION['koszyk']['id_tka'][]=$id_tka;
  18. $_SESSION['koszyk']['nr_tka'][]=$nr_wyb;
  19. $_SESSION['koszyk']['ilosc'][]=$ilosc;
  20. }else{
  21. $a=$_SESSION['koszyk']['ilosc'][$kluczid];
  22. $a++;
  23. update($kluczid, $id, $id_wyb, $nr_wyb, $id_tka, $nr_tka, $a);
  24. }
  25. }


Od razu dodam że pisałem to sam więc spodziewam się zrypki wink.gif

Już nieaktualne rozwiązanie znalazłem używając funkcji in_array.


  1. function add($id, $id_wyb, $nr_wyb, $id_tka, $nr_tka, $ilosc){
  2. $x=count($_SESSION['koszyk']['lp']); // ilosc rekordów w tablicy lp
  3. if((in_array($id,$_SESSION['koszyk']['id']) == TRUE) and (in_array($id_wyb,$_SESSION['koszyk']['id_wyb']) == TRUE) and (in_array($nr_wyb,$_SESSION['koszyk']['nr_wyb']) == TRUE) and (in_array($id_tka,$_SESSION['koszyk']['id_tka']) == TRUE) and (in_array($nr_tka,$_SESSION['koszyk']['nr_tka']) == TRUE)){
  4.  
  5. $kluczid=array_search($id,$_SESSION['koszyk']['id']);
  6. update($kluczid, $id, $id_wyb, $nr_wyb, $id_tka, $nr_tka, $ilosc+1);
  7. }else{
  8.  
  9. $_SESSION['koszyk']['lp'][]=$x+1;
  10. $_SESSION['koszyk']['id'][]=$id;
  11. $_SESSION['koszyk']['id_wyb'][]=$id_wyb;
  12. $_SESSION['koszyk']['nr_wyb'][]=$nr_wyb;
  13. $_SESSION['koszyk']['id_tka'][]=$id_tka;
  14. $_SESSION['koszyk']['nr_tka'][]=$nr_wyb;
  15. $_SESSION['koszyk']['ilosc'][]=$ilosc;
  16. }
  17. }
CuteOne
Potraktuj sesje jako tablica asocjacyjna - jeżeli podasz identyczny klucz, dane pod nim zapisane zostaną utracone:
  1. $array['index'] = 'a';
  2. $array['index'] = 'b';
  3. echo '<pre>';
  4. print_r($array);


aby temu zapobiec wystarczy dodać kolejny wymiar:
  1. $array['index'][] = 'a';
  2. $array['index'][] = 'b';
  3. echo '<pre>';
  4. print_r($array);
  5. // lub
  6. array_push($array['index'], 'a');
  7. array_push($array['index'], 'b');
  8. echo '<pre>';
  9. print_r($array);


to samo zrób z sesją a do jej odczytania wystarczy zwykła pętla
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.