Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] cookies
Forum PHP.pl > Forum > Przedszkole
integer000
Napisałem coś takiego:
  1. <?php
  2.  
  3. if(!isset($action)) {
  4. $action="koszyk";
  5. }
  6. switch ($action) {
  7. case "koszyk":
  8. $wva = $_COOKIE["TestCookie"];
  9. $data=explode("*|*", $wva);
  10.  
  11. $licz=0;
  12.  
  13. while($data[$licz]!=''){
  14.  
  15. $data2 = explode("}^{", $data[$licz]);
  16. $ccc=0;
  17. $ccc++;
  18. $idproduct = $licz + $ccc;
  19.  
  20. echo"<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\" width=\"600px\">
  21. <tr>
  22. <td>$data2[0]</td> <td>$data2[1]</td> <td>$data2[2]</td>
  23. </tr>
  24. <tr>
  25. <td colspan=\"3\"><a href=\"2.php?action=del&idproduct=$idproduct\">usuń</a></td>
  26. </tr>
  27. </table>";
  28. echo '<br>';
  29.  
  30. $licz++;
  31. };
  32.  
  33. break;
  34. case"del":
  35.  
  36. //echo $idproduct;
  37. // questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif
  38.  
  39. break;
  40.  
  41.  
  42. }
  43.  
  44. echo'<br><br><br><br><br><br><br><br><br><br><br><br><br><br>';
  45. echo'<a href="1.php">____________</a>';
  46. echo 'jest '.$licz;
  47.  
  48. ?>


Na innej stronie dodaje sobie dane do COOKIE w postaci:
produkt}^{cena}^{ile*|*drugiprodukt}^{drugacena}^{ile*|*3produkt}^{3cena}^{ileto
waru*|*
Skrypt ten odczytuje te dane i umieszcza je w tabelki, tylko teraz niewiem jak mogę usunąć którąś z tabelek a wszystko pozostałe zapisać spowrotem do COOKIE.
Innymi słowy jak usunąć jeden produkt z "koszyka" a reszta zapisać spowrotem do cookie ?
W miejsca znaków zapytania trzeba stworzyć coś co brało by pod uwagę który produkt chce się usunąć ( $idproduct), i usuwało go...


Kod skryptu napisałem w tagach HTML, dlatego że w tagach php był na tyle nieczytelny że nieszło z niego nic zrobić...
strife
Heh, trochę dziwny ten Twój sposób, nie będę się zagłębiał w kod, ponieważ jest trochę nieczytelny, więc dam Ci dobrą radę, zamiast bawić się » explode" title="Zobacz w manualu php" target="_manual, trzymaj ciastka w zserializowanej tablicy » serialize" title="Zobacz w manualu php" target="_manual, wtedy usunięcie danego elementu będzie dziecinnie proste winksmiley.jpg

Jeżeli jednak się upierasz to usunąć dany element u Ciebie możesz w ten sposób, że... Przelatujesz to rozbite ciastko z jakąś petlą, i warunek, że jeżeli zmienna w pasku adresu będzie odpowiała kluczowi w tablicy to pomijasz ten element a w else tworzysz nową tablicę i zapisujesz ponownie ciastko. Taki mały zarys:
  1. <?php
  2. // .. kasowanie elementu ciastka
  3. $cookie = $_COOKIE['TestCookie'];
  4. $arrCookie = explode( '#', $cookie );
  5. foreach( $arrCookie as $key => $value )
  6. {
  7. if ( $key != $_GET['idProdukt'] )
  8. {
  9. $array[$key] = $value;
  10. }
  11. }
  12. setcookie( 'TestCookie', implode( '#', $array ), time() + 3600() );
  13. ?>


Pozdrawiam!
Vogel
a czemu to chcesz robic na _COOKIES? nie lepiej uzyc sesji?
integer000
Doszłem do czegoś takiego:
  1. <?php
  2. case"del":
  3.  
  4. $wva = $_COOKIE["TestCookie"];
  5. $data=explode("*|*", $wva);
  6.  
  7. $licz=0;
  8.  
  9.  while($data[$licz]!=''){
  10.  
  11. $data2 = explode("}^{", $data[$licz]);
  12. $ccc=0; 
  13. $ccc++; 
  14. $idp = $licz + $ccc;
  15.  
  16.  
  17. if ($idp != $idproduct) {
  18.  $va = $data2[0].'}^{'.$data2[1].'}^{'.$data2[2].'*|*';
  19.  ////////////////?questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif?/
  20.  //////////////////////////// questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif
  21.  }
  22.  
  23.  $licz++;  
  24.  };
  25.  
  26. //////////////////////////////?questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif?
  27.  /////////////////////////?questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif
  28.  setcookie ("TestCookie", $vas);
  29. break;
  30. ?>


W miejscach zaznaczonych "?questionmark.gifquestionmark.gif" mam jeszcze braki...
Braki te są tego typu że zmienna $va przechowuje dane, które ulegają zmianie podczas każdego zapętlenia. I teraz muszę te dane jakoś z sobą połączyć. To znaczy przed każdym powtóżeniem funkcji while trzeba pobrać wartość zmiennej $va i jakoś wyprowadzić ją poza obręb działania while { }... a po każdym następnym zapętleniem dodawać wartość $va do wczęśniej wyprowadzonej zmiennej.....

---
Prosze korzystać z odpowiednich znaczników bbCode.
Poprawiłem Ci. Jak widzisz dzialają doskonale.
~mike_mech
strife
Ale żeś się uparł na to » explode" title="Zobacz w manualu php" target="_manual laugh.gif Ja cały czas będę przy swoim, czyli użyj zserializowanej tablicy smile.gif No, ale jak już wiercisz ten temat to postaram Ci pomóc tak jak to sobie wymyśliłeś, więc:

  1. <?php
  2. while($data[$licz]!=''){
  3. ?>

Heh, że niby co chcesz w ten sposób sprawdzić czy dany element tablicy nie jest pusty tak? Poczytaj o » empty" title="Zobacz w manualu php" target="_manual.

Bardzo zagmatwałeś sprawę ostatnim postem, więc postanowiłem napisać to po swojemu winksmiley.jpg

  1. <?php
  2. case 'del':
  3.  
  4. $arrCookies = explode( '*|*', $_COOKIE['TestCookie'] );
  5. array_pop( $arrCookies );
  6.  
  7. foreach( $arrCookies as $key => $value )
  8. {
  9. $arrDetails = explode( '}^{', $value );
  10.  
  11. if ( $key != $_GET['idProdukt'] )
  12. {
  13. $newDetails[] .= $value;
  14. }
  15.  
  16. }
  17.  
  18. $rebuildCookies = implode( '*|*', $newDetails );
  19.  
  20. // set new cookie
  21. setcookie( 'TestCookie', $rebuildCookies, time() + 3600 );
  22.  
  23. break;
  24. ?>


~edit
» integer000 - No widzę, że przeanalizowałeś mój kod, bardzo się z tego cieszę, jak widzisz brakowało Ci jedynie łączenia ciągów znaków ( $var .= ).
integer000
  1. <?php
  2. case"del":
  3.  
  4.  $wva = $_COOKIE["TestCookie"];
  5. $data=explode("*|*", $wva);
  6.  
  7. $licz=0;
  8.  
  9.  while($data[$licz]!=''){
  10.  
  11. $data2 = explode("}^{", $data[$licz]);
  12. $ccc=0; 
  13. $ccc++; 
  14. $idp = $licz + $ccc;
  15.  
  16.  
  17. if ($idp != $idproduct) {
  18.  $va = $data2[0].'}^{'.$data2[1].'}^{'.$data2[2].'*|*';
  19.  $qqq .= $va; 
  20.  }
  21.  $licz++;  
  22.  };
  23.  
  24.  setcookie ("TestCookie", $qqq);
  25.  
  26. echo'<a href="2.php?action=koszyk">ggggggggggggggggg</a>';
  27. ?>


tak napisałem i działa OK :-)
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.