Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Koszyk w PHP dubluje wyniki powyżej 3tys rekordów
slawek19926
post
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 29.07.2016

Ostrzeżenie: (0%)
-----


Witam wszystkich.
Jeśli to zły dział proszę o przeniesienie do odpowiedniego.

Przechodząc do tematu problem polega na tym, że:
mam sobie taki kod - http://hastebin.com/ucopinadax.xml
Do 3 tysięcy rekordów wszystko było ok tzn można było zmienić ilość w koszyku bez żadnego problemu oraz można było usunąć produkt z koszyka.
Teraz rekordów jest 13 tysięcy i właśnie tu zaczynają się problemy:
1. przy próbie zmiany ilości jak jest więcej niż 1 produkt w koszyku dubluje mi zmieniany produkt (pierwszy zostaje z początkową ilością, a drugi jest z poprawioną)
2. nie można usunąć żadnego produktu powyżej ID 3000 jeśli jest w koszyku więcej niż 1 produkt, nawet tego zdublowanego.

Na próbę dodałem rekord o ID 1301 i odziwo ten działa poprawnie tzn można go zmieniać, usuwać

Siedzę już nad tym 4 dni i wymiękam więc proszę o pomoc.
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
aras785
post
Post #2





Grupa: Zarejestrowani
Postów: 859
Pomógł: 177
Dołączył: 29.10.2009

Ostrzeżenie: (0%)
-----


Cześć.

Fragment do "update" wygląda tak:

  1. case "update":
  2. $found = false;
  3. foreach($_SESSION['cart_item'] as $product)
  4. {
  5. if($_REQUEST['reference'] == $product['reference']) {
  6. $found = true;
  7. break;


i gdzie tutaj jest jakaś aktualizacja?
Go to the top of the page
+Quote Post
slawek19926
post
Post #3





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 29.07.2016

Ostrzeżenie: (0%)
-----


To akurat była moja kombinacja bo normalnie działało to na case"add"
Go to the top of the page
+Quote Post
maly_swd
post
Post #4





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


http://www.php.net/manual/en/info.configur....max-input-vars

Lub
max_input_vars = 3000
suhosin.post.max_vars = 3000
suhosin.request.max_vars = 3000

Musisz zwiększyć te wartości


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
slawek19926
post
Post #5





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 29.07.2016

Ostrzeżenie: (0%)
-----


Niestety nic to nie daje co_jest.gif
Go to the top of the page
+Quote Post
maly_swd
post
Post #6





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


A ja Ci mówię, że to to.

Pokaż co masz w phpinfo?


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@maly_swd zwroc uwage ze on wysyla oddzielnego forma dla kazdego produktu a nie wszystkie produkty w jednym formie

@slawek Twoj kod jest fatalny.
Skoro kluczem w $_SESSION["cart_item"] jest reference to:
1) Nie ma sensu bys latal po calej tablicy i sprawdzal kazdy elelement, skoro mozesz od razu zrobic:
$_SESSION["cart_item"]['szukanyrefence']

2) Skoro kluczem jest UNIKALNY reference to nie ma prawa sie nic dublowac bo jak zrobisz w tablicy
$tab[1] = 'jeden';
$tab[1] = 'dwa';
to drugie 1 nadpisze ci pierwsze i nie ma mowy o duplikatach
Tak wiec cos krecisz, albo nagle ci refence zmienia na inne.

Popraw ten kod, uporzadkuj bo teraz to jest, przepraszam, wielki burdel - pomimo ze kodu duzo nie ma.


Masz niepoprawna strukture html, np. <tr><form><td>
Zajrzyj do dokumentacji html i zobacz jak wyglada poprawna tabela, HINT: miedzy TR a TD nie ma prawa nic innego byc.

edit:
ten kod z akcji ADD a nie UPDATE wyglada ze moze robic to co mowisz
  1. if(in_array($productByCode[0]["reference"],$_SESSION["cart_item"])) {
  2. foreach($_SESSION["cart_item"] as $k => $v) {
  3. if($productByCode[0]["reference"] == $k)
  4. $_SESSION["cart_item"][$k]["quantity"] = $_POST["quantity"];
  5. }
  6. } else {
  7. $_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray);
  8. }

Tylko ze to jest ADD a nie UPDATE jak pisales wczesniej. Do rzeczy:
to
if(in_array($productByCode[0]["reference"],$_SESSION["cart_item"])) {
nigdy nie jest prawdziwe bo szukasz reference na liscie tablic a nie liscie referencji wiec wchodzi co do ELSE czyli do
$_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray);
a array_merge gdy tablice maja indexy numeryczne to poprostu numeruje wszystko od nowa wiec tak, to ci moze dublowac i zmieniac totalnie wszystko wiec nic dziwnego ze potem nie jest w stanie kasowac jak indesky sie pozmienialy.

Dobrze by bylo jakbys pisal opis problemu troche bardziej porzadnie na przyszlosc bo opisales ze podczas UPDATE ci sie duplikuje a tu raczej podczas ADD jest duplikacja
Powód edycji: [nospor]:


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
slawek19926
post
Post #8





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 29.07.2016

Ostrzeżenie: (0%)
-----


Może zrobię tak, że podam link do tego co nie działa i już. Wtedy każdy sobie zobaczy w czym tkwi problem.
katalog online
PHP INFO

Pozdr.
Go to the top of the page
+Quote Post
aniolekx
post
Post #9





Grupa: Zarejestrowani
Postów: 340
Pomógł: 46
Dołączył: 31.07.2009
Skąd: A

Ostrzeżenie: (0%)
-----


sprawdzales za pomoca debuggera co sie dzieje w kodzie?
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Może zrobię tak, że podam link do tego co nie działa i już
A moze poprostu popraw rzeczy ktore ci wskazalem?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
slawek19926
post
Post #11





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 29.07.2016

Ostrzeżenie: (0%)
-----


Pozmieniałem i nadal nic :/
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




I oczywiscie ja wiem na co pozmieniales...
Tak trudno podac poprawiony kod?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
slawek19926
post
Post #13





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 29.07.2016

Ostrzeżenie: (0%)
-----


Tzn zmieniłem form w html i wyrzuciłem case update. Tylko qrcze ciągle nie wiem jak zmienić to co pisałeś odnośnie tablic.

KOD


Ten post edytował slawek19926 2.08.2016, 10:02:43
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Czyli zrobiles cale nic ale oczywiscie musiales napisac:
Cytat
Pozmieniałem i nadal nic :/

Guzik pozmieniales, struktura html nadal nie poprawna. Prosilem, zajrzyj do dokumentacji jak ma wygladac poprawna struktura TABLE.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
slawek19926
post
Post #15





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 29.07.2016

Ostrzeżenie: (0%)
-----


Co mi to da jak poprawię strukturę table poza czytelnością?
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Czasami niepoprawna struktura html jest powodem blednie wysylanych formow. Nie mowie, ze tak jest w tym przypadku, nie mniej jednak strasznie kluje po oczach. smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Pyton_000
post
Post #17





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


A masz, co mi tam...
Resztę sobie sam ogarniaj, koniec dobroci smile.gif
  1. <?php
  2. require_once("dbcontroller.php");
  3. $db_handle = new DBController();
  4. if(!empty($_GET["action"])) {
  5.  
  6. if(!isset($_SESSION["cart_item"])) {
  7. $_SESSION["cart_item"] = [];
  8. }
  9.  
  10. switch($_GET["action"]) {
  11. case "add":
  12. if(!empty($_POST["quantity"])) {
  13. mysql_query("SET CHARSET utf8"); // polskie znaki
  14. mysql_query("SET NAMES `utf8` COLLATE `utf8_polish_ci`"); // polskie znaki
  15. $productByCode = $db_handle->runQuery("SELECT * FROM cenniki WHERE reference='" . $_GET["reference"] . "' ORDER BY reference LIMIT 1");
  16.  
  17.  
  18. $quantity = (int)$_POST["quantity"];
  19. $product = $productByCode[0];
  20. $product['quantity'] = $quantity;
  21.  
  22. if(array_key_exists($product['reference'], $_SESSION["cart_item"])) {
  23. $_SESSION["cart_item"][$product['reference']]['quantity'] = $quantity;
  24. break;
  25. }
  26.  
  27. $_SESSION["cart_item"][$product['reference']] = $product;
  28. break;
  29. }
  30. break;
  31. case "remove":
  32. if(array_key_exists($_GET["reference"], $_SESSION["cart_item"])) {
  33. unset($_SESSION["cart_item"][$_GET["reference"]]);
  34. }
  35. break;
  36. case "empty":
  37. $_SESSION["cart_item"] = [];
  38. break;
  39. }
  40. }
  41. ?>


Oczywiście to może nie działać w 100% i na 100% nie jest wolne od wad...

Ten post edytował Pyton_000 2.08.2016, 10:25:52
Go to the top of the page
+Quote Post
slawek19926
post
Post #18





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 29.07.2016

Ostrzeżenie: (0%)
-----


Rozumiem, że mam teraz to połączyć ze swoim nieudolnym kodem?
Go to the top of the page
+Quote Post
nospor
post
Post #19





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Masz zastapic caly swoj kod php z poczatku twojego pliku tym co dostales od Pytona


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
slawek19926
post
Post #20





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 29.07.2016

Ostrzeżenie: (0%)
-----


Początkowo zastąpiłem, ale jest błąd 500
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 04:41