Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP]Sumowanie produktów w koszyku

Napisany przez: misteroous 16.11.2019, 14:21:18

Witam serdecznie wszystkich użytkowników.
Jestem nowy na forum i od razu zaznaczę że dopiero zaczynam przygodę z PHP.

Wracając jednak do tematu, potrzebuję pomocy w przerobieniu skryptu aby po dodaniu jednego produktu do koszyka zmieniał tylko liczbę z ilości:1 na 2, 3 itd. ponieważ póki co, zapisuję produkt jeden pod drugim po prostu w ilości:1.

Jeżeli źle się wyraziłem lub nie do końca jest jest jasne to co napisałem, to chętnie odpowiem na wszystkie pytania.

Poniżej przedstawiam skrypt i liczę na pomoc.

  1. <?php
  2. do_koszyka(false);
  3. $akcesoria=$_SESSION['koszyk']['akcesoria'];
  4.  
  5. http://www.php.net/echo '<br />';
  6. if (http://www.php.net/count($akcesoria)===0)
  7. {
  8. http://www.php.net/echo 'Twoje zamówienie jest puste!';
  9. return;
  10. }
  11.  
  12. $suma=0;
  13.  
  14. if (http://www.php.net/count($akcesoria)>0)
  15. {
  16. http://www.php.net/echo '<br /> <br />';
  17. for($k=0;$k<count($akcesoria);$k++)
  18. {
  19. $suma+=$akcesoria[$k]['cena']*$akcesoria[$k]['ilosc'];
  20. http://www.php.net/echo ($k+1).'. <strong>'.$akcesoria[$k]['opis'].'</strong>, cena: <strong><span style="color:brown">'.$akcesoria[$k]['cena'].'</span> zł</strong>'.', ilość: '.$akcesoria[$k]['ilosc'].'<br />'."\n";
  21. }
  22. }
  23. ?>


Próbowałem już na różne sposoby ale co najwyżej udawało mi się zliczyć liczbę wszystkich produktów...

Napisany przez: Tomplus 16.11.2019, 16:59:10

Chcesz liczbę unikalnych produktów w koszyku?

To chyba u Ciebie ta linia rozwiązuje ten problem: count($akcesoria)

Napisany przez: misteroous 16.11.2019, 17:04:58

Tylko, że gdy dodam dwa razy produkt po 1 to wyświetla mi je jako oddzielne produkty po 1 a nie sumuje jako jeden produkt w ilości: 2

Przykład:

Czerwona koszulka, cena: 15 zł, ilość: 1
Czerwona koszulka, cena: 15 zł, ilość: 1

Zamiast:

Czerwona koszulka, cena: 15 zł, ilość: 2

Napisany przez: Tomplus 16.11.2019, 17:21:58

To zamiast $akcesoria[$k] używaj $akcesoria[$produkId]
Zamiast for() użyj foreach()

Posortuj sobie wg klucza przed foreach() a następnie:

  1. $iloscProduktow = 0;
  2. foreach($akcesoria as $produktId => $var)
  3.  
  4. if($ostatniProdukt != $produkId) {
  5. $iloscProduktow++;
  6. }
  7. $ostatniProdukt = $produktId;
  8. /* resta danych pętli np .$var['cena'] */
  9.  
  10. }


Tak swoją drogą, zapisujesz coś w bazie danych?
Bo z bazy danych też możesz uzyskać taki wynik, jedyn zapytaniem.

Napisany przez: misteroous 16.11.2019, 19:36:36

Niestety nie - wszystko odbywa się w php.
Dziękuje za odpowiedź.
Spróbuje pokombinować według twojego przykładu.

Niestety jakoś nie mogę tego ogarnąć... Może to dlatego, że próbuje to zrobić cały dzień wink.gif

Skrypt w którym odbywa się ta funkcja dodawania wygląda tak:

  1. function do_koszyka($ksiazki)
  2. {
  3. if (!http://www.php.net/isset($_POST['do_koszyka'])) return;
  4. if (http://www.php.net/count($_POST['towary'])===0) return;
  5. $towary=$_POST['towary'];
  6. foreach($towary as $towar)
  7. {
  8. $id=(int)(http://www.php.net/substr($towar,0,6));
  9. $klucz_cena='cena'.$id;
  10. $klucz_ilosc='ile'.$id;
  11. if ($ksiazki)
  12. {
  13. $count=http://www.php.net/count($_SESSION['koszyk']['ksiazki']);
  14. $_SESSION['koszyk']['ksiazki'][$count]['opis']=http://www.php.net/substr($towar,6);
  15. $_SESSION['koszyk']['ksiazki'][$count]['cena']=$_POST[$klucz_cena];
  16. $_SESSION['koszyk']['ksiazki'][$count]['ilosc']=$_POST[$klucz_ilosc];
  17. }
  18. else
  19. {
  20. $count=http://www.php.net/count($_SESSION['koszyk']['akcesoria']);
  21. $_SESSION['koszyk']['akcesoria'][$count]['opis']=http://www.php.net/substr($towar,6);
  22. $_SESSION['koszyk']['akcesoria'][$count]['cena']=$_POST[$klucz_cena];
  23. $_SESSION['koszyk']['akcesoria'][$count]['ilosc']=$_POST[$klucz_ilosc];
  24. }
  25. }
  26. }


Domyślam się, że to gdzieś tutaj powinienem to zmienić ale gdzie i co dokładnie to nie wiem. Mógłbyś jakoś pomóc?

Napisany przez: Tomplus 16.11.2019, 20:24:52

Jakbyś podał jeszcze przykładową zawartość $_POST bo wygląda to tak jakbyś miał nazwę produktu: 123456DługopisBezbarwny


Wiesz że warto pomyśleć o nie używaniu powtórzeń tego samego kodu?
np. linie 11-24 powyższego kodu można zamienić na:

  1. $typProduktu = $ksiazki ? 'ksiazki' : 'akcesoria';
  2.  
  3. $count = http://www.php.net/count($_SESSION['koszyk'][$typProduktu]);
  4. $_SESSION['koszyk'][$typProduktu][$count]['opis'] = http://www.php.net/substr($towar,6);
  5. $_SESSION['koszyk'][$typProduktu][$count]['cena'] = $_POST[$klucz_cena];
  6. $_SESSION['koszyk'][$typProduktu][$count]['ilosc'] = $_POST[$klucz_ilosc];


W ogóle co ma zmienna $ksiazki oraz jak wygląda też $_SESSION['koszyk'][$typProduktu] bo nie ogarniam zamysłu.

Napisany przez: misteroous 18.11.2019, 15:53:41

Masz rację zmienna $ksiazki nie jest potrzebna.

Pokierowałem się twoim przykładem i kod działa bez zarzutu:

  1. function do_koszyka($akcesoria)
  2. {
  3. if (!http://www.php.net/isset($_POST['do_koszyka'])) return;
  4. if (http://www.php.net/count($_POST['towary'])===0) return;
  5. $towary=$_POST['towary'];
  6. foreach($towary as $towar)
  7. {
  8. $id=(int)(http://www.php.net/substr($towar,0,6));
  9. $klucz_cena='cena'.$id;
  10. $klucz_ilosc='ile'.$id;
  11. $typProduktu = 'akcesoria';
  12.  
  13. $count=http://www.php.net/count($_SESSION['koszyk'][$typProduktu]);
  14. $_SESSION['koszyk'][$typProduktu][$count]['opis'] = http://www.php.net/substr($towar,6);
  15. $_SESSION['koszyk'][$typProduktu][$count]['cena'] = $_POST[$klucz_cena];
  16. $_SESSION['koszyk'][$typProduktu][$count]['ilosc'] = $_POST[$klucz_ilosc];
  17. }
  18. }


Spróbuję teraz zsumować te artykuły idąc za twoją poprzednią wskazówką, zobaczymy czy mi się uda smile.gif

Napisany przez: Tomplus 18.11.2019, 21:45:23

Teraz patrząc po Twoim kodzie to nie potrzebna jest w funkcji argument $akcesoria.


Napisany przez: misteroous 21.11.2019, 04:03:51

No dobrze udało mi się to zrobić w taki sposób, że kiedy

  1. <?php
  2. $text=[
  3. "1||Kurczak Kung Pao",
  4. "1||Kurczak Kung Pao",
  5. "1||Wołowina w czerwonym curry",
  6. "1||Wołowina w czerwonym curry",
  7. ];
  8. $sum = [];
  9. foreach($text as $row)
  10. {
  11. list($value,$name) = http://www.php.net/explode("||", $row);
  12.  
  13. if(!http://www.php.net/isset($sum[$name])){
  14. $sum[$name] = 0;
  15. }
  16.  
  17. $sum[$name] += $value;
  18. }
  19. http://www.php.net/var_dump($sum);
  20. ?>

skrypt działa i wyświetla:
  1. http://www.php.net/array(2) { ["Kurczak Kung Pao"]=> int(2) ["Wołowina w czerwonym curry"]=> int(2) }

czyli zlicza i dobrze...

Ale kiedy wkrypt wygląda tak:
  1. <?php
  2. $text=[
  3. http://www.php.net/array_map(function ($var) {
  4. http://www.php.net/echo "<br />", "\n",'"' .$var['ilosc'], "||", $var['opis']. '"',",";
  5. }, $arr)
  6. ];
  7.  
  8.  
  9. $sum = [];
  10. foreach($text as $row)
  11. {
  12. list($value,$name) = http://www.php.net/explode("||", $row);
  13.  
  14. if(!http://www.php.net/isset($sum[$name])){
  15. $sum[$name] = 0;
  16. }
  17.  
  18. $sum[$name] += $value;
  19. }
  20. http://www.php.net/var_dump($sum);
  21. ?>

skrypt już nie działa pomimo tego, że
  1. http://www.php.net/array_map(function ($var) {
  2. http://www.php.net/echo "<br />", "\n",'"' .$var['ilosc'], "||", $var['opis']. '"',",";
  3. }, $arr);
daję identyczną wartość co:
  1. "1||Kurczak Kung Pao",
  2. "1||Kurczak Kung Pao",
  3. "1||Wołowina w czerwonym curry",
  4. "1||Wołowina w czerwonym curry",

I wyświetla taki błąd:
  1. Warning: http://www.php.net/explode() expects parameter 2 to be string, http://www.php.net/array given in

Proszę o pomoc, co robię źle i jak to naprawić?
Pozdrawiam

Napisany przez: Lord 21.11.2019, 08:17:22

Cytat(misteroous @ 21.11.2019, 06:03:51 ) *
  1. <?php
  2. $text=[
  3. http://www.php.net/array_map(function ($var) {
  4. http://www.php.net/echo "<br />", "\n",'"' .$var['ilosc'], "||", $var['opis']. '"',",";
  5. }, $arr)
  6. ];


Cytat(misteroous @ 21.11.2019, 06:03:51 ) *
  1. <?php
  2. $text=[
  3. http://www.php.net/array_map(function ($var) {
  4. return "<br />", "\n",'"' .$var['ilosc'], "||", $var['opis']. '"',",";
  5. }, $arr)
  6. ];


Napisany przez: Tomplus 21.11.2019, 09:01:53

Przemyśl czy jest sens tworzyć treści w postaci:
Ilosc||Nazwa

bo dużo wygodniejsze jest praca na tablicy:
korzystając z funkcji json_encode($array) i json_decode($stringJson, true)

Napisany przez: dublinka 21.11.2019, 10:20:46

  1. $tablica = http://www.php.net/array('Jan Serce',
  2. 'Maria Dąbrowska',
  3. 'Bolesław Chrobry',
  4. 'Zygmunt III Waza',
  5. 'Bolesław Chrobry',
  6. 'Maria Dąbrowska',
  7. 'Fryderyk Chopin',
  8. 'Jan Serce',
  9. 'Zygmunt III Waza',
  10. 'Bolesław Chrobry',
  11. 'Fryderyk Chopin',
  12. 'Zygmunt III Waza',
  13. 'Roman Wilhelmi');
  14.  
  15. $tbl = http://www.php.net/array_count_values($tablica);
  16. http://www.php.net/arsort($tbl);
  17. foreach($tbl as $kl => $val)
  18. {
  19.  
  20. http://www.php.net/echo 'Nazwa <b>' . $kl . '</b> występuje <b>' . $val . '</b> raz/y.<br>';
  21.  
  22. }

Napisany przez: misteroous 21.11.2019, 12:49:45

Dziękuję wszystkim za zainteresowanie.

@Lord próbując twoim przykładem wyskakuję mi błąd:

  1. Parse error: syntax error, unexpected ','

właśnie w linii w której zamieniłem echo na return

@Tomplus
Mógłbyś pokazać na przykładzie?

@dublinka
Dalej nie wiem jak zaimplementować ten skrypt do wartości $text
  1. http://www.php.net/array_map(function ($var) {
  2. http://www.php.net/echo "<br />", "\n",'"' .$var['ilosc'], "||", $var['opis']. '"',",";
  3. }, $arr);

Napisany przez: Lord 21.11.2019, 15:14:52

Cytat(misteroous @ 21.11.2019, 14:49:45 ) *
@Lord próbując twoim przykładem wyskakuję mi błąd:
  1. Parse error: syntax error, unexpected ','


  1. http://www.php.net/array_map(function ($var) {
  2. http://www.php.net/echo "<br />", "\n",'"' .$var['ilosc'], "||", $var['opis']. '"',",";
  3. }, $arr);


bo stringi w php łaczysz . a nie ,


  1. $a. ' - '.$b

Napisany przez: misteroous 21.11.2019, 15:25:29

Dobrze, poprawiłem to tak:

  1. $text=[
  2. http://www.php.net/array_map(function ($var) {
  3. return "<br />". "\n".'"' .$var['ilosc']. "||". $var['opis']. '"'.",";
  4. }, $arr)
  5. ];

Ale wciąż wywala mi błąd:
  1. Warning: http://www.php.net/explode() expects parameter 2 to be string, http://www.php.net/array given in

  1. $text=[
  2. http://www.php.net/array_map(function ($var) {
  3. return "<br />". "\n".'"' .$var['ilosc']. "||". $var['opis']. '"'.",";
  4. }, $arr)
  5. ];
  6.  
  7. $sum = [];
  8. foreach($text as $row)
  9. {
  10. list($value,$name) = http://www.php.net/explode("||", $row); <========== TUTAJ
  11.  
  12. if(!http://www.php.net/isset($sum[$name])){
  13. $sum[$name] = 0;
  14. }
  15.  
  16. $sum[$name] += $value;
  17. }
  18. http://www.php.net/var_dump($sum);

Napisany przez: nospor 21.11.2019, 15:30:01

Po grzyba tworzysz tablice w tablicy?

nie
$text=[
array_map(function ($var) {
return "<br />". "\n".'"' .$var['ilosc']. "||". $var['opis']. '"'.",";
}, $arr)
];

a:

$text=
array_map(function ($var) {
return "<br />". "\n".'"' .$var['ilosc']. "||". $var['opis']. '"'.",";
}, $arr)
;



A tak w ogole po grzyba przeksztalcasz tablice na tekst, tylko po to by pare linijek nizej ten tekst przeksztalcic na te sama tablice? Przeciez to nie ma zadnego sensu

Napisany przez: misteroous 21.11.2019, 15:35:02

@nospor
Kiedy robię tak jak napisałeś, otrzymuje:

  1. Warning: A non-numeric value encountered in

dla każdej z wartości

Napisany przez: nospor 21.11.2019, 15:37:25

Ja napisalem, caly ten kod jest do 4 liter - bez obrazy.Nie ma zadnej logiki anie sensu.

Zamiast zamieniac $arr na tablice tekstow, to iteruj bezposrednio po $arr i sobie sumuj co masz sumowac. Nie ma sensu poprawiac tego co tu teraz stworzyles bo to tylko marnowanie czasu

Napisany przez: prz3kus 21.11.2019, 15:38:38

wklej kod co Ty tam robisz teraz smile.gif

Napisany przez: misteroous 21.11.2019, 15:47:00

Nie obrażam się, napisałem, że jestem początkujący i to bardzo. Ten skrypt nie jest mój, ja tylko staram się go przerobić.
Wkleję wam oryginalny skrypt a wy postarajcie się może w miarę swoich możliwości podpowiedzieć co mam zrobić żeby działało tak jak trzeba...

  1. Plik php.php:
  2.  
  3. <?php
  4. function poczatek_sesji()
  5. {
  6. @http://www.php.net/session_start();
  7. if (!http://www.php.net/isset($_SESSION['koszyk']))
  8. {
  9. $_SESSION['koszyk']=http://www.php.net/array('ksiazki'=>array(),'akcesoria'=>array());
  10. }
  11. }
  12.  
  13. function do_koszyka($ksiazki)
  14. {
  15. if (!http://www.php.net/isset($_POST['do_koszyka'])) return;
  16. if (http://www.php.net/count($_POST['towary'])===0) return;
  17. $towary=$_POST['towary'];
  18. foreach($towary as $towar)
  19. {
  20. $id=(int)(http://www.php.net/substr($towar,0,6));
  21. $klucz_cena='cena'.$id;
  22. $klucz_ilosc='ile'.$id;
  23. if ($ksiazki)
  24. {
  25. $count=http://www.php.net/count($_SESSION['koszyk']['ksiazki']);
  26. $_SESSION['koszyk']['ksiazki'][$count]['opis']=http://www.php.net/substr($towar,6);
  27. $_SESSION['koszyk']['ksiazki'][$count]['cena']=$_POST[$klucz_cena];
  28. $_SESSION['koszyk']['ksiazki'][$count]['ilosc']=$_POST[$klucz_ilosc];
  29. }
  30. else
  31. {
  32. $count=http://www.php.net/count($_SESSION['koszyk']['akcesoria']);
  33. $_SESSION['koszyk']['akcesoria'][$count]['opis']=http://www.php.net/substr($towar,6);
  34. $_SESSION['koszyk']['akcesoria'][$count]['cena']=$_POST[$klucz_cena];
  35. $_SESSION['koszyk']['akcesoria'][$count]['ilosc']=$_POST[$klucz_ilosc];
  36. }
  37. }
  38. }
  39.  
  40. function pusty_koszyk()
  41. {
  42. if (!http://www.php.net/isset($_POST['pusty_koszyk'])) return;
  43. $_SESSION['koszyk']['ksiazki']=http://www.php.net/array();
  44. $_SESSION['koszyk']['akcesoria']=http://www.php.net/array();
  45. http://www.php.net/echo '<br />Koszyk jest pusty!';
  46. }
  47.  
  48. function pokaz_koszyk()
  49. {
  50. if (!http://www.php.net/isset($_POST['pokaz_koszyk'])) return;
  51. $ksiazki=$_SESSION['koszyk']['ksiazki'];
  52. $akcesoria=$_SESSION['koszyk']['akcesoria'];
  53.  
  54. http://www.php.net/echo '<br />';
  55. if (http://www.php.net/count($ksiazki)===0 && http://www.php.net/count($akcesoria)===0)
  56. {
  57. http://www.php.net/echo 'Koszyk jest pusty!';
  58. return;
  59. }
  60.  
  61. $suma=0;
  62. if (http://www.php.net/count($ksiazki)>0)
  63. {
  64. http://www.php.net/echo 'Książki:<br />';
  65. for($k=0;$k<count($ksiazki);$k++)
  66. {
  67. $suma+=$ksiazki[$k]['cena']*$ksiazki[$k]['ilosc'];
  68. http://www.php.net/echo ($k+1).'. '.$ksiazki[$k]['opis'].', cena: '
  69. .$ksiazki[$k]['cena'].', ilość: '.$ksiazki[$k]['ilosc'].'<br />'."\n";
  70. }
  71. }
  72.  
  73. if (http://www.php.net/count($akcesoria)>0)
  74. {
  75. http://www.php.net/echo '<br />Akcesoria:<br />';
  76. for($k=0;$k<count($akcesoria);$k++)
  77. {
  78. $suma+=$akcesoria[$k]['cena']*$akcesoria[$k]['ilosc'];
  79. http://www.php.net/echo ($k+1).'. '.$akcesoria[$k]['opis'].
  80. ', cena: '.$akcesoria[$k]['cena'].', ilość: '.$akcesoria[$k]['ilosc'].'<br />'."\n";
  81. }
  82. }
  83. http://www.php.net/echo '<br />Wartość towarów w koszyku: '.$suma;
  84. }
  85. ?>
  86. Plik sklep.php
  87.  
  88. <?php
  89. include('php.php');
  90. poczatek_sesji();
  91. ?>
  92. <!doctype html>
  93. <html>
  94. <head>
  95. <title>Testowanie skryptów PHP</title>
  96. <meta charset="utf-8" />
  97. </head>
  98. <body>
  99. <h1>Sklep internetowy</h1>
  100. <p><a href="ksiazki.php">Książki</a></p>
  101. <p><a href="akcesoria.php">Akcesoria</a></p>
  102. <br />
  103. <form action="sklep.php" method="post">
  104. <input type="submit" name="pusty_koszyk" value="Pusty koszyk" />
  105. <input type="submit" name="pokaz_koszyk" value="Pokaż koszyk" />
  106. </form>
  107. <?php
  108. pusty_koszyk();
  109. pokaz_koszyk();
  110. ?>
  111. </body>
  112. </html>
  113. Plik ksiazki.php
  114.  
  115. <?php
  116. include('php.php');
  117. poczatek_sesji();
  118. ?>
  119. <!doctype html>
  120. <html>
  121. <head>
  122. <title>Testowanie skryptów PHP</title>
  123. <meta charset="utf-8" />
  124. </head>
  125. <body>
  126. <h1>Książki</h1>
  127. <p><a href="sklep.php">Sklep</a></p>
  128. <p><a href="akcesoria.php">Akcesoria</a></p>
  129. <br />
  130. <form action="ksiazki.php" method="post">
  131. <p>
  132. <label><input type="checkbox" name="towary[]"
  133. value="000000Jak zdać egzamin, autor: Józef Nauczyciel" />
  134. Jak zdać egzamin, autor: Józef Nauczyciel
  135. </label>
  136. , cena<input type="text" name="cena0" value="20" style="width:30px;" />
  137. , ilość<input type="text" name="ile0" style="width:30px;" />
  138. </p>
  139. <p>
  140. <label><input type="checkbox" name="towary[]"
  141. value="000001Podstawy PHP, autor: Jan Mądry" />
  142. Podstawy PHP, autor: Jan Mądry
  143. </label>
  144. , cena<input type="text" name="cena1" value="40" style="width:30px;" />
  145. , ilość<input type="text" name="ile1" style="width:30px;" />
  146. </p>
  147. <p>
  148. <label><input type="checkbox" name="towary[]"
  149. value="000002HTML 5, autor: Piotr Programista" />
  150. HTML 5, autor: Piotr Programista
  151. </label>
  152. , cena<input type="text" name="cena2" value="60" style="width:30px;" />
  153. , lość<input type="text" name="ile2" style="width:30px;" />
  154. </p>
  155.  
  156. <input type="submit" name="do_koszyka" value="Do koszyka" />
  157. <input type="submit" name="pusty_koszyk" value="Pusty koszyk" />
  158. <input type="submit" name="pokaz_koszyk" value="Pokaż koszyk" />
  159. </form>
  160. <?php
  161. do_koszyka(true);
  162. pusty_koszyk();
  163. pokaz_koszyk();
  164. ?>
  165. </body>
  166. </html>
  167. Plik akcesoria.php
  168.  
  169. <?php
  170. include('php.php');
  171. poczatek_sesji();
  172. ?>
  173. <!doctype html>
  174. <html>
  175. <head>
  176. <title>Testowanie skryptów PHP</title>
  177. <meta charset="utf-8" />
  178. </head>
  179. <body>
  180. <h1>Akcesoria</h1>
  181. <p><a href="sklep.php">Sklep</a></p>
  182. <p><a href="ksiazki.php">Książki</a></p>
  183. <br />
  184. <form action="akcesoria.php" method="post">
  185. <p>
  186. <label><input type="checkbox" name="towary[]"
  187. value="000000Płyta główna" />
  188. Płyta główna
  189. </label>
  190. , cena<input type="text" name="cena0" value="200" style="width:30px;" />
  191. , ilość<input type="text" name="ile0" style="width:30px;" />
  192. </p>
  193. <p>
  194. <label><input type="checkbox" name="towary[]"
  195. value="000001Procesor" />
  196. Procesor
  197. </label>
  198. , cena<input type="text" name="cena1" value="300" style="width:30px;" />
  199. , ilość<input type="text" name="ile1" style="width:30px;" />
  200. </p>
  201. <p>
  202. <label><input type="checkbox" name="towary[]"
  203. value="000002Karta graficzna" />
  204. Karta graficzna
  205. </label>
  206. , cena<input type="text" name="cena2" value="120" style="width:30px;" />
  207. , lość<input type="text" name="ile2" style="width:30px;" />
  208. </p>
  209.  
  210. <input type="submit" name="do_koszyka" value="Do koszyka" />
  211. <input type="submit" name="pusty_koszyk" value="Pusty koszyk" />
  212. <input type="submit" name="pokaz_koszyk" value="Pokaż koszyk" />
  213. </form>
  214. <?php
  215. do_koszyka(false);
  216. pusty_koszyk();
  217. pokaz_koszyk();
  218. ?>
  219. </body>
  220. </html>


Problem polega na tym, że gdy dwa razy dodam produkt po 1 zamiast zsumować te produkty to dodaje jeden pod drugim po 1.
zamiast:
  1. Akcesoria:
  2. 1. Płyta główna, cena: 200, ilość: 2
  3.  
  4. Wartość towarów w koszyku: 400


To otrzymuję:
  1. Akcesoria:
  2. 1. Płyta główna, cena: 200, ilość: 1
  3. 2. Płyta główna, cena: 200, ilość: 1
  4.  
  5. Wartość towarów w koszyku: 400


Może teraz coś pomożecie smile.gif

Napisany przez: nospor 21.11.2019, 16:02:09

czy w tablicy $ksiazki jest w ogole jakis jej identyfikator? Bo OPIS ciezko uznac za takowy

Napisany przez: misteroous 21.11.2019, 16:32:29

A dokładnie o jaki identyfikator ci chodzi i jak miałby on wyglądać i do czego miałbym go użyć?
Pytam bo jestem zielony wink.gif
Czemu opis nie? Niech sumuje wszystkie te same opisy z przypisaną do nich ilością.

Napisany przez: nospor 21.11.2019, 16:37:13

Bo teoretycznie opis moze byc taki sam dla roznych ksiazek. Identyfikator z nazwy jest unikalny wink.gif

Napisany przez: misteroous 21.11.2019, 16:51:24

U mnie opis jest unikalny dla każdego produktu więc nie ma problemu smile.gif

@edit
naprawdę tak jak ja nikt nie ma pomysłu jak to zrobić?

Napisany przez: nospor 22.11.2019, 11:41:25

To ze ktos nie odpisuje, nie znaczy ze nie ma pomyslu. Moze np poprostu mu sie nie chciec lub nie miec czasu tongue.gif
Pomysl ci juz dawno napisalem...



  1. $newKsiazki = [];
  2. foreach ($ksiazki as $ksiazka) {
  3. $opis = $ksiazka['opis'];
  4. if (!http://www.php.net/isset($newKsiazki[$opis])) {
  5. $newKsiazki[$opis] = [
  6. 'cena' => $ksiazka['cena'],
  7. 'ilosc' => 0
  8. ];
  9. }
  10.  
  11. $newKsiazki[$opis]['ilosc'] += $ksiazka['ilosc'];
  12.  
  13. }
  14. http://www.php.net/echo 'Książki:<br />';
  15. foreach ($newKsiazki as $opis => $ksiazka)
  16. {
  17. http://www.php.net/echo $opis.', cena: ' .$ksiazka['cena'].', ilość: '.$ksiazka['ilosc'].'<br />'."\n";
  18. }

Napisany przez: Tomplus 22.11.2019, 14:02:14

IDENTYFIKATOR - w skrócie `id` - zwykle unikalne, nie zmienialne liczbowe określenie pojedynczej jednostki zasobu.

U Ciebie opis wcześniej czy później możesz zmienić np. stwierdzisz że w opisie musi być autor, marka etc, albo stwierdzisz że będziesz musiał wyświetlić skróconą nazwę.

Dzięki używaniu ID, nie musisz się przejmować nazwami. Czytelniejszy jest odczyt i zapis, następnie tworzenie potencjalnych statystyk sprzedaży.



Napisany przez: misteroous 24.11.2019, 17:54:41

Dziękuję ci nospor smile.gif
Skrypt działa temat można zamknąć.
Dałem pomógł bo tylko tak mogę się odwdzięczyć.
Jeszcze raz dziękuję za pomoc. Pozdrawiam smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)