Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z dodaniem produktu do koszyka
Forum PHP.pl > Forum > Przedszkole
northwest
Witam serdecznie,
Mam na stronie formularz do dodawania produktu do koszyka.

Problem mam z liczeniem go ponieważ skrypt raz widzi maksymalną ilość oraz ilość jako string, a raz jako int:

  1. array(2) {
  2. [0]=>
  3. array(16) {
  4. ["id"]=>
  5. string(2) "34"
  6. ["nazwa"]=>
  7. string(11) "BLUZA S.B.P"
  8. ["cena"]=>
  9. string(5) "20.83"
  10. ["ilosc"]=>
  11. string(1) "1"
  12. ["maxilosc"]=>
  13. string(1) "5"
  14. ["dostawa"]=>
  15. string(4) "2.00"
  16. ["vat"]=>
  17. string(2) "20"
  18. ["stanproduktu"]=>
  19. string(1) "1"
  20. ["aj_nazwa"]=>
  21. string(6) "czarny"
  22. ["aj_rozmiarX"]=>
  23. string(3) "212"
  24. ["aj_rozmiar_wielkosc_X"]=>
  25. string(1) "2"
  26. ["aj_kolorX"]=>
  27. string(3) "212"
  28. ["produktwpromocji"]=>
  29. string(1) "0"
  30. ["produktzkuponem"]=>
  31. string(1) "1"
  32. ["muza"]=>
  33. string(0) ""
  34. }
  35. [1]=>
  36. array(16) {
  37. ["id"]=>
  38. string(2) "60"
  39. ["nazwa"]=>
  40. string(9) "SBP label"
  41. ["cena"]=>
  42. string(2) "99"
  43. ["ilosc"]=>
  44. int(0)
  45. ["maxilosc"]=>
  46. int(0)
  47. ["dostawa"]=>
  48. string(4) "3.00"
  49. ["vat"]=>
  50. string(2) "20"
  51. ["stanproduktu"]=>
  52. string(1) "1"
  53. ["aj_nazwa"]=>
  54. string(13) "Cd + koszulka"
  55. ["aj_rozmiarX"]=>
  56. string(2) "83"
  57. ["aj_rozmiar_wielkosc_X"]=>
  58. string(2) "83"
  59. ["aj_kolorX"]=>
  60. string(0) ""
  61. ["produktwpromocji"]=>
  62. string(1) "0"
  63. ["produktzkuponem"]=>
  64. ["muza"]=>
  65. string(1) "1"
  66. }
  67. }


2 różne produkty - a różne wyniki (powyżej zrzut z var_dump).

Wie ktoś może dlaczego tak się dzieje?
Nie mogę mnożyć/dzielić tych wartości ponieważ są stringami :/


Bardzo proszę o pomoc,
Northwest
KsaR
Hmmm.. Pokaż jak tworzysz tą tablice.
Ewentualnie spróbuj rzutować na int lub float (bo widze że niektóre wartości masz float).

Np. Tak:

  1. echo (int)$tablica[0]['ilosc']+(int)$tablica[1]['ilosc'];

(int) zmieni typ zmiennej na int... więc nie będziesz mieć problemów z string-ami.

Edit. Tu masz więcej o rzutowaniu typów.
northwest
Dziękuję za pomoc smile.gif

Faktycznie, formularz wysyła wszystko jako string.

Mam taki kod koszyka:

  1. if ($_SESSION['sumazakupow_brutto'] == "") {
  2. $_SESSION['sumazakupow_brutto'] = 0;
  3. $_SESSION['sumazakupow_netto'] = 0;
  4. $_SESSION['dostawa_brutto'] = 0;
  5. $_SESSION['dostawa_netto'] = 0;
  6. $_SESSION['kupon_promocyjny'] = null;
  7. $_SESSION['kupon_promocyjny2'] = null;
  8. }
  9.  
  10. if ($_SESSION['koszykzamowien'] == "") {
  11. $_SESSION['ilosckupow'] = 0;
  12. }
  13.  
  14. if ($_SESSION['koszykzamowien'] != "") {
  15. asort($_SESSION['koszykzamowien']);
  16. }
  17.  
  18. ////// USUWANIE POJEDYŃCZEGO PRODUKTU
  19. if ($webid['0'] == "koszyk" && $webid['2'] == "usun" && $_GET['k'] != "") {
  20. $_GET['k'] = czysc_sql_liczby($_GET['k']);
  21. unset($_SESSION['koszykzamowien'][$_GET['k']]);
  22. }
  23.  
  24. ////// USUWANIE WSZYSTKICH PRODUKTÓW
  25. if ($webid['0'] == "koszyk" && $_GET['usunall'] == "usunall") {
  26. unset($_SESSION['koszykzamowien']);
  27. unset($_SESSION['ilosckupow']);
  28. unset($_SESSION['sumazakupow_brutto']);
  29. unset($_SESSION['sumazakupow_netto']);
  30. unset($_SESSION['dostawa_brutto']);
  31. unset($_SESSION['dostawa_netto']);
  32. $_SESSION['ilosckupow'] = 0;
  33. $_SESSION['sumazakupow_brutto'] = 0;
  34. $_SESSION['sumazakupow_netto'] = 0;
  35. $_SESSION['dostawa_brutto'] = 0;
  36. $_SESSION['dostawa_netto'] = 0;
  37. $_SESSION['kupon_promocyjny'] = null;
  38. $_SESSION['kupon_promocyjny2'] = null;
  39. }
  40.  
  41. ////// FUNKCJA SZUKAJĄCA DUPLIKATÓW
  42. function recursive_array_search($needle, $haystack, $where1, $where2) {
  43. foreach($haystack as $key => $value) {
  44. $current_key=$key;
  45. // $where1 = aj_nazwa
  46. // $where2 = aj_rozmiar_wielkosc_X
  47. if($needle===$value OR ((is_array($value) && recursive_array_search($needle,$value) !== false) AND ($key['aj_nazwa'] == $where1 && $key['aj_rozmiar_wielkosc_X'] == $where2))) {
  48. return $current_key;
  49. }
  50. }
  51. return false;
  52. }
  53.  
  54.  
  55. function findDubel($id, $nazwa, $rozmiar, $koszyk)
  56. {
  57. $find_dubel = false;
  58. $dubel_key = false;
  59. while ( ( list($key,$item) = each($koszyk) ) && !$find_dubel) {
  60. if ($item['id'] == $id && $item['aj_nazwa'] == $nazwa && $item['aj_rozmiar_wielkosc_X'] == $rozmiar) {
  61. $find_dubel = true;
  62. $dubel_key = $key;
  63. }
  64. }
  65. return $dubel_key;
  66. }
  67.  
  68. ////// DODAWANIE PRODUKTU DO KOSZYKA
  69. if ($_POST['updatekoszyka'] == "" && $_POST['itemid'] != "" && $_POST['ilosc'] != "") {
  70. if ($_POST['maxilosc'] >= $_POST['ilosc']) {
  71. $_POST['i_cena'] = str_replace(",", ".", $_POST['i_cena']);
  72. $_POST['i_transport'] = str_replace(",", ".", $_POST['i_transport']);
  73. //$dubel = recursive_array_search($_POST['itemid'], $_SESSION['koszykzamowien'], baza_zapis($_POST['aj_nazwa']), baza_zapis($_POST['aj_rozmiar_wielkosc_X']));
  74. $dubel = findDubel($_POST['itemid'], baza_zapis($_POST['aj_nazwa']), baza_zapis($_POST['aj_rozmiar_wielkosc_X']), $_SESSION['koszykzamowien']);
  75.  
  76.  
  77. if($dubel === FALSE){
  78. $_SESSION['koszykzamowien'][] = array('id' =>czysc_sql_liczby($_POST['itemid']), 'nazwa' =>baza_zapis($_POST['i_nazwa']), 'cena' =>baza_zapis($_POST['i_cena']), 'ilosc' =>czysc_sql_liczby($_POST['ilosc']), 'maxilosc' =>czysc_sql_liczby($_POST['aj_dostepnychX']), 'dostawa' =>baza_zapis($_POST['i_transport']), 'vat' =>czysc_sql_liczby($_POST['vat']), 'stanproduktu' =>czysc_sql_liczby($_POST['stanproduktu']), 'aj_nazwa' =>baza_zapis($_POST['aj_nazwa']), 'aj_rozmiarX' =>baza_zapis($_POST['aj_rozmiarX']), 'aj_rozmiar_wielkosc_X' =>baza_zapis($_POST['aj_rozmiar_wielkosc_X']), 'aj_kolorX' =>baza_zapis($_POST['aj_kolorX']), 'produktwpromocji' =>baza_zapis($_POST['produktwpromocji']), 'produktzkuponem' =>baza_zapis($_POST['produktzkuponem']), 'przeliczylem_rabat' => 0, 'muza' =>baza_zapis($_POST['aj_muza']));
  79. } else{
  80. //echo "DUBEL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";
  81. if($_POST['maxilosc'] >= $_SESSION['koszykzamowien'][$dubel]['ilosc'] + 1){
  82. $_SESSION['koszykzamowien'][$dubel]['ilosc'] = $_SESSION['koszykzamowien'][$dubel]['ilosc'] + 1;
  83. }
  84. }
  85. //echo "==== $dubel =====";
  86. } else
  87. $error_message = "Brak wystarczającej ilości produktów w sklepie!! Posiadamy aktualnie: " . $_POST['maxilosc'] . " ";
  88. }
  89.  
  90. ////// AKTUALIZOWANIE PRODUKTU W KOSZYKU
  91. if ($_POST['updatekoszyka'] != "" && $_POST['szukanawartosc']!="") {
  92. $_POST['szukanawartosc'] = czysc_sql_liczby($_POST['szukanawartosc']);
  93. $_SESSION['koszykzamowien'][$_POST['szukanawartosc']]['ilosc'] = czysc_sql_liczby($_POST['ilosckupna']);
  94. }
  95.  
  96. //////////////////////////////////////////////////
  97. if ($_SESSION['koszykzamowien'] != "") {
  98. $_SESSION['sumazakupow_brutto'] = 0;
  99. $_SESSION['sumazakupow_netto'] = 0;
  100. $_SESSION['ilosckupow'] = 0;
  101. $_SESSION['dostawa_netto'] = 0;
  102. $_SESSION['dostawa_brutto'] = 0;
  103. foreach ($_SESSION['koszykzamowien'] as $index => $value) {
  104.  
  105. if($value['ilosc'] == 0 || $value['ilosc'] ==""){
  106. unset($_SESSION['koszykzamowien'][$index]);
  107. }
  108.  
  109. // nalicz rabat
  110. if($value['przeliczylem_rabat'] == "0" && $value['produktwpromocji'] == "0" && $_SESSION['kupon_promocyjny'] != 0 && $_SESSION['kupon_promocyjny'] !== null){
  111. $_SESSION['koszykzamowien'][$index]['przeliczylem_rabat'] = 1;
  112. $value['cena'] = $value['cena'] - ($value['cena'] * $_SESSION['kupon_promocyjny']) / 100;
  113. $value['cena'] = number_format($value['cena'],2);
  114. $_SESSION['koszykzamowien'][$index]['cena'] = $value['cena'];
  115. }
  116. ///////////////////////////////////////////
  117. $_SESSION['sumazakupow_brutto'] = $_SESSION['sumazakupow_brutto'] + (($value['cena'] * $value['ilosc'] * $value['vat']) / 100 + $value['ilosc'] * $value['cena']);
  118. //$_SESSION['sumazakupow_netto'] = $_SESSION['sumazakupow_netto'] + ($value['cena'] * $value['ilosc']);
  119. $_SESSION['ilosckupow'] = $_SESSION['ilosckupow'] + $value['ilosc'];
  120. $_SESSION['dostawa_netto'] = $_SESSION['dostawa_netto'] + $value['dostawa'] * $value['ilosc'];
  121. $_SESSION['dostawa_brutto'] = $_SESSION['dostawa_brutto'] + (($value['dostawa'] * $value['ilosc'] * $value['vat']) / 100 + $value['ilosc'] * $value['dostawa']);
  122. }
  123. }
  124.  
  125. if($_POST['updatekod'] == 1){
  126. $stmt22a = $db->prepare("SELECT rabat, nazwa, bf_id FROM cms_users_kody_promocyjne WHERE kod=:kod and idusera=:idusera and data_uzycia is null;");
  127. $stmt22a->bindValue(':kod', baza_zapis($_POST['kodrabatowy']), PDO::PARAM_STR);
  128. $stmt22a->bindValue(':idusera', czysc_sql_liczby($_SESSION['cms_id']), PDO::PARAM_INT);
  129. $stmt22a->execute();
  130. foreach ($stmt22a as $row22a) {
  131. $_SESSION['kupon_promocyjny'] = $row22a['rabat'];
  132. $_SESSION['kupon_promocyjny2'] = $row22a['bf_id'];
  133. header("Refresh:0");
  134. }
  135. }
  136.  
  137.  
  138.  
  139. function dodaj_koszyk_porownanie($item) {
  140. $_SESSION['koszyk_porownanie'][] = $item;
  141. }
  142. // produkty ulubione
  143. if($_POST['por_poz_send_to_upd']!=""){
  144. $save_to_por = array('id' =>czysc_sql_liczby($_POST['por_poz_send_to_por']));
  145. dodaj_koszyk_porownanie($save_to_por);
  146. $_SESSION['koszyk_porownanie'] = array_map("unserialize", array_unique(array_map("serialize", $_SESSION['koszyk_porownanie'])));
  147.  
  148. }
  149. $_SESSION['porownywarka_produktow'] = 0;
  150. foreach ($_SESSION['koszyk_porownanie'] as $value) {
  151. $_SESSION['porownywarka_produktow'] = $_SESSION['porownywarka_produktow'] + 1;
  152. }
  153.  
  154.  
  155.  
  156. function baza_zapis($string) {
  157. $string = addslashes($string);
  158. $string = trim((htmlspecialchars(($string), ENT_QUOTES)));
  159. return $string;
  160. }
  161. function czysc_sql_liczby($string) {
  162. if (preg_match("/[0-9]/", $string)) {
  163. if (is_numeric($string)) {
  164. if ($string == "")
  165. $string = 0;
  166. return $string;
  167. }
  168. } else
  169. return 0;
  170. }

Przed "wgraniem" produktu do koszyka mam:

array(1) {
[0]=>
array(16) {
["id"]=>
string(2) "60"
["nazwa"]=>
string(9) "SBP label"
["cena"]=>
string(2) "99"
["ilosc"]=>
string(1) "1"
["maxilosc"]=>
string(2) "88"
["dostawa"]=>
string(4) "3.00"
["vat"]=>
string(2) "20"
["stanproduktu"]=>
string(1) "1"
["aj_nazwa"]=>
string(13) "Cd + koszulka"
["aj_rozmiarX"]=>
string(2) "83"
["aj_rozmiar_wielkosc_X"]=>
string(2) "83"
["aj_kolorX"]=>
string(0) ""
["produktwpromocji"]=>
string(1) "0"
["produktzkuponem"]=>
string(1) "0"
["przeliczylem_rabat"]=>
int(0)
["muza"]=>
string(1) "1"
}
}


a "po" wgraniu:

array(1) {
[0]=>
array(16) {
["id"]=>
string(2) "60"
["nazwa"]=>
string(9) "SBP label"
["cena"]=>
string(2) "99"
["ilosc"]=>
int(0)
["maxilosc"]=>
int(0)
["dostawa"]=>
string(4) "3.00"
["vat"]=>
string(2) "20"
["stanproduktu"]=>
string(1) "1"
["aj_nazwa"]=>
string(13) "Cd + koszulka"
["aj_rozmiarX"]=>
string(2) "83"
["aj_rozmiar_wielkosc_X"]=>
string(2) "83"
["aj_kolorX"]=>
string(0) ""
["produktwpromocji"]=>
string(1) "0"
["produktzkuponem"]=>
string(1) "0"
["przeliczylem_rabat"]=>
int(0)
["muza"]=>
string(1) "1"
}
}

jak zakomentuję ten kod:
  1. $_SESSION['sumazakupow_brutto'] = $_SESSION['sumazakupow_brutto'] + (($value['cena'] * $value['ilosc'] * $value['vat']) / 100 + $value['ilosc'] * $value['cena']);
  2. $_SESSION['sumazakupow_netto'] = $_SESSION['sumazakupow_netto'] + ($value['cena'] * $value['ilosc']);
  3. $_SESSION['ilosckupow'] = $_SESSION['ilosckupow'] + $value['ilosc'];
  4. $_SESSION['dostawa_netto'] = $_SESSION['dostawa_netto'] + $value['dostawa'] * $value['ilosc'];
  5. $_SESSION['dostawa_brutto'] = $_SESSION['dostawa_brutto'] + (($value['dostawa'] * $value['ilosc'] * $value['vat']) / 100 + $value['ilosc'] * $value['dostawa']);


to nie "zeruje" mi tych stringów, tylko z kolei nie liczy mi :/
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.