Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usuwanie pozycji z koszyka - $_GET ?
Forum PHP.pl > Forum > PHP
shpaque
Witam, dziś mam jeszcze zagwostkę - jeśli mój koszyk pobiera zmienne za pomocą $_GET
  1. function AddToCart()
  2. {
  3. $cart = isset($_SESSION['cart']) ? $_SESSION['cart'] : '';
  4. $itemcount = isset($_SESSION['itemcount']) ? $_SESSION['itemcount'] : 0;
  5.  
  6. $cart[PRODUCTIMAGE][$itemcount] = $_GET['productimage'];
  7. $cart[CATEGORY][$itemcount] = $_GET['category'];
  8. $cart[PRODUCTCODE][$itemcount] = $_GET['productcode'];
  9. $cart[PRODUCTNAME][$itemcount] = $_GET['productname'];
  10. $cart[FIRMA][$itemcount] = $_GET['firma'];
  11. $cart[PRICE][$itemcount] = $_GET['price'];
  12. $itemcount = $itemcount + 1;
  13.  
  14. $_SESSION['cart'] = $cart;
  15. $_SESSION['itemcount'] = $itemcount;
  16. }


  1. $total = 0;
  2. for ($i=0; $i<$itemcount; $i++)
  3. {
  4. $strHTML .= "<tr>"."\n";
  5. $strHTML .= "<td align=center><img src='./db/images/tn".$cart[PRODUCTIMAGE][$i]."'></td>"."\n";
  6. $strHTML .= "<td align=center><h2>".$cart[CATEGORY][$i]."</td>"."\n";
  7. $strHTML .= "<td align=center><h2>".$cart[PRODUCTCODE][$i]."</td>"."\n";
  8. $strHTML .= "<td align=center><h2>".$cart[PRODUCTNAME][$i]."</td>"."\n";
  9. $strHTML .= "<td align=center><h2>".$cart[FIRMA][$i]."</td>"."\n";
  10. $strHTML .= "<td align=center><h2>"."".number_format($cart[PRICE][$i],2)."</td>"."\n";
  11. $strHTML .= "<td align=center><img src='./images/del.png' title='Usuń pozycję'></td>"."\n";
  12. $strHTML .= "<tr>"."\n";


to czy mógłbym zrobić coś takiego?
  1. $strHTML .= "<td align=center><a href='torba.php?action=delete'><img src='./images/del.png' title='Usuń pozycję'></a></td>"."\n";

Jeśli tak jak to powinno poprawnie brzmieć i jak zdefiniować akcję zeby usunąć pozycję (i jak usunąć wszystko z koszyka)?

dzięki za pomoc - z góry
Fifi209
Dodaj po action=delete&id=id_pozycji

Potem w skrypcie sprawdzaj czy action == delete, sprawdzaj czy id_pozycji występuje - jeżeli tak to usuń (ew. zmień ilość o jeden [sprawdzając czy będzie > 0])

A co do wszystkich to:

action=delete_all

Najprościej i wtedy usuwaj koszyk.
shpaque
ale czy akcja zostanie spełniona? czy mam podawac w request method w akcji $_GET?

podam cały początek z definicjami akcji - tu na pewno jest błąd...
  1. <?php
  2.  
  3. define("PRODUCTIMAGE", 0);
  4. define("CATEGORY", 1);
  5. define("PRODUCTCODE", 2);
  6. define("PRODUCTNAME", 3);
  7. define("FIRMA", 4);
  8. define("PRICE", 5);
  9.  
  10. if ($_SERVER['REQUEST_METHOD'] == 'GET')
  11. {
  12. if (!empty($_GET['productimage']))
  13. {
  14. AddToCart();
  15. }
  16. else
  17. {
  18. $action = isset($_POST['action']) ? $_POST['action'] : '';
  19. $value = strtoupper(substr($action, 0, 6));
  20. switch ($value)
  21. {
  22.  
  23. // Opróżnij torbę
  24. case "Opróżnij torbę":
  25. unset($_SESSION['cart']);
  26. header("Location: "."torba.php");
  27. break;
  28.  
  29. // Dalej
  30. case "Dalej":
  31. header("Location: "."klient.php");
  32. break;
  33.  
  34. }
  35.  
  36. $action = isset($_GET['action']) ? $_GET['action'] : '';
  37. $value = strtoupper(substr($action, 0, 6));
  38. switch ($value)
  39. {
  40.  
  41. // Delete
  42. case "delete":
  43. echo "fakju";
  44. break;
  45. }
  46.  
  47. }
  48. }
  49.  
  50. function AddToCart()
  51. {
  52. $cart = isset($_SESSION['cart']) ? $_SESSION['cart'] : '';
  53. $itemcount = isset($_SESSION['itemcount']) ? $_SESSION['itemcount'] : 0;
  54.  
  55. $cart[PRODUCTIMAGE][$itemcount] = $_GET['productimage'];
  56. $cart[CATEGORY][$itemcount] = $_GET['category'];
  57. $cart[PRODUCTCODE][$itemcount] = $_GET['productcode'];
  58. $cart[PRODUCTNAME][$itemcount] = $_GET['productname'];
  59. $cart[FIRMA][$itemcount] = $_GET['firma'];
  60. $cart[PRICE][$itemcount] = $_GET['price'];
  61. $itemcount = $itemcount + 1;
  62.  
  63. $_SESSION['cart'] = $cart;
  64. $_SESSION['itemcount'] = $itemcount;
  65. }
  66.  
  67. ?>


nikt mi nie pomoze..?
muk4
  1. case 'delete':
  2. if(isset($_SESSION['itemcount'])) $_SESSION['itemcount'] -= 1;
  3. break;


Nie wiem czy o to chodzi. Dziwny masz ten koszyk...
shpaque
w zasadzie nie jest zle, ale przy takim kodzie usuwa wszystko co jest dodane do tej konkretnej pozycji - to znaczy jesli mam rzecz A B C i D i kliknej usun pozycje na "B" ususnie mi B C i D
Crozin
1. Wszystkie dane modyfikujące coś (dodanie, usunięcie, modyfikacja koszyka) muszą być wysyłane w żądaniu POST, a nie jako część URL-a.
2. Skąd taki dziwny pomysł na przechowywanie danych jako:
Kod
Array (
  [PRODUCTNAME] => Array (
    [0] => 'Produkt #1',
    [1] => 'Produkt #2'
  ),
  [PRICE] => Array (
    [0] => 59.99,
    [1] => 9.90
  )
)
Zamiast w normalnej formie:
Kod
Array (
  [0] => Array (
    [PRODUCTNAME] => 'Produkt #1',
    [PRICE] => 59.99
  ),
  [1] => Array (
    [PRODUCTNAME] => 'Produkt #2',
    [PRICE] => 9.90
  )
)
Sam sobie rzucasz kłody pod nogi.
shpaque
Wlasnie problem w tym, ze to nie moj pomysl tylko programu, ktory wygenerowal taki kod, ja usiluje jedynie go pod siebie podpasowac, nie chcac wiele zmieniac bo nie mam kompletnie prawie wiedzy na ten temat... Mniej wiecej rozumiem o co chodzi tylko teraz znow musialbym tydzien siedziec zeby dojsc do tego sposobu i pozmieniac wszystko...

Ad1. Dlaczego MUSZĄ być wysyłane za pomocą POST? Umnie w GET wszystko chodzi pięknie pozostaje tylko usuniecie konkretnej pozycji i calego koszyka (bo program wygenerowal sobie usuniecie koszyka kasowaniem calej sesji - wowczas pada mi logowanie, obsluga baz danych, i extrasy uzytkownika)
Crozin
Ponieważ żądania typu GET mogą być cache'owne (na dowolnym poziomie), znacznie łatwiej jest wymusić na kimś nieświadome ich wywołanie (jeżeli takie rzeczy jak realizacja zamówienia również lecą GET-em to mogę właściwie zrealizować zamówienie z czyjegoś konta bez jego wiedzy) - w dużym skrócie: z ogólnych powodów bezpieczeństwa.
shpaque
to jak mam kod zmodyfikowac zeby dzialalo?

  1. $total = 0;
  2. for ($i=0; $i<$itemcount; $i++)
  3. {
  4. $strHTML .= "<tr>"."\n";
  5. $strHTML .= "<td align=center><img src='./db/images/tn".$cart[PRODUCTIMAGE][$i]."'></td>"."\n";
  6. $strHTML .= "<td align=center><h2>".$cart[CATEGORY][$i]."</td>"."\n";
  7. $strHTML .= "<td align=center><h2>".$cart[PRODUCTCODE][$i]."</td>"."\n";
  8. $strHTML .= "<td align=center><h2>".$cart[PRODUCTNAME][$i]."</td>"."\n";
  9. $strHTML .= "<td align=center><h2>".$cart[FIRMA][$i]."</td>"."\n";
  10. $strHTML .= "<td align=center><h2>"."".number_format($cart[PRICE][$i],2)."</td>"."\n";
  11. $strHTML .= "<td align=center><a href='./torba.php?act=delete&id=$i'><img src='./images/del.png' title='Usuń pozycję'></a></td>"."\n";
  12. $strHTML .= "<tr>"."\n";
  13.  
  14. $act=$_GET['act'];
  15. $id=$_GET['id'];
  16.  
  17. if ($act == 'delete')
  18. {
  19. unset($_SESSION['itemcount']);
  20. unset($_SESSION['cart']['id']);
  21. break;
  22. }


a coś w ten deseń się nie da wykombinować? Jestem pewien że dla kogoś kto zna się na php to jest sekunda odnaleźć kod który usuwa konkretną pozycję... ;(
adbacz
Odnaleźć? Albo nie napisałeś kodu "usuwania" aby go "odnaleźć" albo go po prostu nie ma i trzeba napisać.

Ja bym zrobił tak jak jeden użytkownik wyżej napsiał. W zmiennej $_GET['id'] dać ID danego produktu (ale tu nasuwa się pytanie - skąd wziąć te ID?) a w $_GET['action'] dać 'delete' i później sprawdzać za pomocą instrukcji warunkowej, czy istnieją te zmienne i jeśli tak, to za pomocą pętli, która przeleci po wszystkich rzeczach w schowku sprawdzając przy okazji warunek, czy któryś z tych rzeczy ma takie samo ID jak to w $_GET['id']. Jesli tak (faktycznie dziwnie jets ta tablica z rzeczami) to usunąć wszystkie dane głównych indeksów, gdzie podrzędne maja taki sam index jak ten ID.

Trosza namieszałem ale to dość proste jest...

PS.
Z tego co widać, to podczas dodawania czegoś do koszyka, nie ma gdzie się zapisać jakieś unikalny ID produktu więc musiałbyś dopisać jeszcze kilka linijek i dopiero to co napisałem będzie grało.
shpaque
Dziekuję za odzew w końcku ktoś z nowym pomysłem napisał - tyle że mi to nic nie mówi 'kilka linijek dopisac' ok gdybym sie na tym znal dopisalbym sobie kilka linijek - tyle ze ja nie wiem CO i GDZIE dopisac...

i dalej stoję z tematem - nie wiem co zrobic... ;/

  1. ... $strHTML .= "<td align=center><a href='./torba.php?action=delete&id=$i'><img src='./images/del.png' title='Usuń pozycję'></a></td>"."\n";
  2. $strHTML .= "<tr>"."\n";
  3.  
  4. $act = 'action';
  5. $id = 'id';
  6. if ($act == 'delete')
  7. {
  8. if(isset($_SESSION['itemcount'])) $_SESSION['itemcount'] -= 1;
  9. break;
  10. }

to nie działa i nie mam pojęcia dlaczego...

a może tak?:

  1. // Odejmij
  2. case "ODEJM":
  3. if(isset($_SESSION['itemcount']))
  4. {
  5. $_SESSION['cart'] -= $_SESSION['cart']['id'];
  6. }
  7. break;
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.