Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [jQuery]Update Koszyka
pa-jong
post
Post #1





Grupa: Zarejestrowani
Postów: 64
Pomógł: 1
Dołączył: 21.02.2008
Skąd: Warszawa

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


Witam,

Od dłuższego czasu próbuje przerobić poniższy skrypt tak aby działał bez przeładowania strony..
do tej pory udało mi się zrobić dodawanie oraz usuwanie poległem niestety przy update..

czy znajdzie się ktoś kto pomoże mi rozwiązać tą kwestię ?




Formularz.
  1. <form action="admin.php?tab=koszyk&action=update" method="post" id="cart" >
  2.  
  3. (...)
  4.  
  5. <input name="qty'.$id.'" title="Enter = zapisz" class="editores" style="width:20px;" type="text" value="'.$qty.'" onkeypress="handleKeyPress(event,this.form)">



Skrypt odpowiedzialny za update..
  1. (...)
  2.  
  3. case 'update':
  4. if ($cart) {
  5. $newcart = '';
  6. foreach ($_POST as $key=>$value) {
  7. if (stristr($key,'qty')) {
  8. $id = str_replace('qty','',$key);
  9. $items = ($newcart != '') ? explode(',',$newcart) : explode(',',$cart);
  10. $newcart = '';
  11. foreach ($items as $item) {
  12. if ($id != $item) {
  13. if ($newcart != '') {
  14. $newcart .= ','.$item;
  15. } else {
  16. $newcart = $item;
  17. }
  18. }
  19. }
  20. for ($i=1;$i<=$value;$i++) {
  21. if ($newcart != '') {
  22. $newcart .= ','.$id;
  23. } else {
  24. $newcart = $id;
  25. }
  26. }
  27. }
  28. }
  29. }
  30. $cart = $newcart;
  31. break;
  32. }
  33.  
  34.  
  35. //// zdublowany update z $_GET używany obecnie..
  36. if ($_GET['action'] == 'update') {
  37. if ($cart) {
  38. $newcart = '';
  39. foreach ($_POST as $key=>$value) {
  40. if (stristr($key,'qty')) {
  41. $id = str_replace('qty','',$key);
  42. $items = ($newcart != '') ? explode(',',$newcart) : explode(',',$cart);
  43. $newcart = '';
  44. foreach ($items as $item) {
  45. if ($id != $item) {
  46. if ($newcart != '') {
  47. $newcart .= ','.$item;
  48. } else {
  49. $newcart = $item;
  50. }
  51. }
  52. }
  53. for ($i=1;$i<=$value;$i++) {
  54. if ($newcart != '') {
  55. $newcart .= ','.$id;
  56. } else {
  57. $newcart = $id;
  58. }
  59. }
  60. }
  61. }
  62. }
  63. $cart = $newcart;
  64. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
pa-jong
post
Post #2





Grupa: Zarejestrowani
Postów: 64
Pomógł: 1
Dołączył: 21.02.2008
Skąd: Warszawa

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


nie do końca sie zrozumieliśmy (IMG:style_emoticons/default/wink.gif)
opisze od początku (IMG:style_emoticons/default/wink.gif)

jest sobie jakaś tam lista produktów,

  1.  
  2. echo "<td class='nazwa'><a href='java script:ddk(\"".StringToHTML($arrRow["Symbol"])."\",\"add\")'>".StringToHTML($arrRow["Nazwa"])."</a></td>".$eol;


po kliknięciu w produkt jest on wysyłany do koszyka.
  1. <script type='text/javascript'>
  2. function ddk(idp,akcja)
  3. {
  4. $.ajax({
  5. url: 'cart.php',
  6. type: 'POST',
  7. data: {
  8. tryb : 'dodaj_do_koszyka' ,
  9. id_przedmiotu : idp,
  10. action: akcja
  11. },
  12. success: function(odpowiedz)
  13. {
  14.  
  15. //document.getElementById('info').style.display='block';
  16. $('#info').fadeIn('slow');
  17. setTimeout('ukryj()',2000);
  18. $('#infotext').html('Produkt dodany do zamówienia.');
  19. // $('#koszyk').load('cart.php');
  20.  
  21. // alert('odpowiedz');
  22.  
  23. },
  24. error: function(){
  25.  
  26. document.getElementById('info').style.display='block';
  27.  
  28. setTimeout('ukryj()',1500);
  29. $('#infotext').html('Błąd Połączenia - Spróbój jeszcze Raz.');
  30.  
  31. //alert('Błąd połączenia ajax');
  32.  
  33. }
  34.  
  35.  
  36. });
  37. }
  38.  
  39.  
  40. function ukryj() {
  41.  
  42. $('#info').fadeOut('slow');
  43.  
  44. }
  45.  
  46. </script>


i skrypt obslugujący dodawanie
  1. $cart = $_SESSION['cart'];
  2. $action = $_POST['action'];
  3.  
  4. switch ($action) {
  5. case 'add':
  6. if ($cart) {
  7. $cart .= ','.$_POST['id_przedmiotu'];
  8. } else {
  9. $cart = $_POST['id_przedmiotu'];
  10. }
  11. break;
  12.  
  13. (...)
  14.  


tutaj odrazu może wspomnę że po kliknięciu dodaje się 1szt danego przedmiotu.
docelowo chciałbym aby po kliknięciu pokazywał się input gdzie można by było zdefiniować ilość.
jeszcze się nie zastanawiałem jak to zrobić ale czuje w kościach ze kolorowo nie będzie tym bardziej, ze poległem na etapie edycji..
zobaczymy (IMG:style_emoticons/default/wink.gif)

wracając do tematu..
dalej mamy listę zamawianych produktów
gdzie można zmienić ilość sztuk czyli to o co się rozchodzi..

  1. (...)
  2. <form action="admin.php?tab=koszyk" method="post" id="cart" >
  3. (...)
  4.  
  5. $output[] = ' <div style="display:inline;" id="count'.$id.'">';
  6. $output[] = ' <a href="java script:void(0)" class="ui-icon ui-icon-pencil" style="float: left; cursor: auto; " title="Zmień ilość produktów" onclick="$("#count'.$id.'").attr("style","display:none");$("#countUpdate'.$id.'").attr("style","display:inline");">';
  7. $output[] = ' </a>'.$qty.'';
  8. $output[] = ' </div>';
  9. $output[] = ' <div style="display:none;" id="countUpdate'.$id.'">';
  10. $output[] = ' <a href="java script:void(0)" class="ui-icon ui-icon-close" style="float: left; cursor: auto; " onclick="$("#countUpdate'.$id.'").attr("style","display:none");$("#count'.$id.'").attr("style","display:inline");">';
  11. $output[] = ' </a>';
  12. $output[] = ' <input name="action" value="update" type="hidden">';
  13. $output[] = ' <input name="qty'.$id.'" id="qty'.$id.'" title="Enter = zapisz" class="editores" style="width:20px;" type="text" value="'.$qty.'" onkeypress="handleKeyPress(event,this.form)">';
  14. $output[] = ' </div></td>';


skrypty obsługujące
  1. <script type="text/javascript">
  2. function handleKeyPress(e,form){
  3. var key=e.keyCode || e.which;
  4. if (key==13){
  5. form.submit();
  6. }
  7.  
  8. }
  9.  


  1. case 'update':
  2. if ($cart) {
  3. $newcart = '';
  4. foreach ($_POST as $key=>$value) {
  5. if (stristr($key,'qty')) {
  6. $id = str_replace('qty','',$key);
  7. $items = ($newcart != '') ? explode(',',$newcart) : explode(',',$cart);
  8. $newcart = '';
  9. foreach ($items as $item) {
  10. if ($id != $item) {
  11. if ($newcart != '') {
  12. $newcart .= ','.$item;
  13. } else {
  14. $newcart = $item;
  15. }
  16. }
  17. }
  18. for ($i=1;$i<=$value;$i++) {
  19. if ($newcart != '') {
  20. $newcart .= ','.$id;
  21. } else {
  22. $newcart = $id;
  23. }
  24. }
  25. }
  26. }
  27. }
  28. $cart = $newcart;
  29. break;


oraz usuwanie przedmiotu z koszyka.
  1. $output[] = ' <td valign="top">';
  2. $output[] = " <a href='java script:uzk(\"".$id."\",\"delete\")' onClick='$(\"#item".$id."\").fadeOut(\"slow\")' class='ui-icon ui-icon-trash' style='float: left; cursor: auto; ' title='usuń z zamówienia'>";
  3. $output[] = ' </a></td>';


  1. <script type='text/javascript'>
  2. function uzk(idp,akcja)
  3. {
  4. $.ajax({
  5. url: 'cart.php',
  6. type: 'POST',
  7. data: {
  8. tryb : 'usun_z_koszyka' ,
  9. id_przedmiotu : idp,
  10. action: akcja
  11. },
  12. success: function(odpowiedz)
  13. {
  14.  
  15. //document.getElementById('info').style.display='block';
  16. $('#info').fadeIn('slow');
  17. setTimeout('ukryj()',2000);
  18. $('#infotext').html('Produkt usunięty z zamówienia.');
  19. // $('#koszyk').load('cart.php');
  20.  
  21. // alert('odpowiedz');
  22.  
  23. },
  24. error: function(){
  25.  
  26. document.getElementById('info').style.display='block';
  27.  
  28. setTimeout('ukryj()',1500);
  29. $('#infotext').html('Błąd Połączenia - Spróbój jeszcze Raz.');
  30.  
  31. //alert('Błąd połączenia ajax');
  32.  
  33. }
  34.  
  35.  
  36. });
  37. }
  38.  
  39.  
  40. function ukryj() {
  41.  
  42. $('#info').fadeOut('slow');
  43.  
  44. }
  45.  


  1. case 'delete':
  2. if ($cart) {
  3. $items = explode(',',$cart);
  4. $newcart = '';
  5. foreach ($items as $item) {
  6. //if ($_GET['id'] != $item) {
  7. if ($_POST['id_przedmiotu'] != $item) {
  8. if ($newcart != '') {
  9. $newcart .= ','.$item;
  10. } else {
  11. $newcart = $item;
  12. }
  13. }
  14. }
  15. $cart = $newcart;
  16. }
  17. break;



jak widać update odbywa się tylko za pomocą PHP
chce to zmienić na jQuery czyli bez przeładowania strony no i tak żeby zmiany były odrazu widoczne,
gdyż jak wspominałem wcześniej będą na pewno takie sytuacje kiedy ktoś przy pozycji 50, 100 i 150 wymyśli sobie zmianę ilości sztuk
i niech przy pozycji 50 wciśnie enter.. strona się przeładuje,lista wróci do początku i trzeba będzie przewijać z powrotem w dól do pozycji nr 100... nieco męczące dlatego chce to wyeliminować (IMG:style_emoticons/default/wink.gif)


mam nadzieje ze teraz jest bardziej zrozumiale (IMG:style_emoticons/default/wink.gif)


//edit
przez POST ma być wysłane:
action = update
qty.'$id.' = '.$qty.'


Próbowałem dać tak,

  1. <input name="qty'.$id.'" id="qty'.$id.'" title="Enter = zapisz" class="editores" style="width:20px;" type="text" value="'.$qty.'" onchange="ewk(\"update\",\"'.$qty.'\")" >


  1. function ewk(akcja,ilosc)
  2. {
  3. $.ajax({
  4. url: 'cart.php',
  5. type: 'POST',
  6. data: {
  7. tryb : 'edytuj_w_koszyku' ,
  8. action: akcja,
  9. ilosc : qty
  10. },


i mam 2 problemy.


1. jeżeli dobrze myślę to w powyższym skrypcie zamiast "ilość" powinienem mieć qty'.$id.'
tak aby za każda zmianą było qty1 : 5 / qty2 : 7/ itd
ale jest to niemożliwe gdyż zmienne definiowane są w zupełnie gdzie indziej wiec nie mogę użyć ich w tym miejscu..
znając życie to na pewno istnieje na to proste rozwiązanie..
2. zmieniam zawartość inputa ale firebug w ogole nie wyłapuje aby cokolwiek się wysyłało i nie wiem dlaczego..

Ten post edytował pa-jong 15.05.2012, 22:31:29
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 10.10.2025 - 22:50