Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][JavaScript]Formularz.. aktualizacja
Forum PHP.pl > Forum > Przedszkole
pa-jong
Witam,
tak prosto z mostu, potem będę sie tłumaczył wink.gif

formularz otwieram tak:
  1. <form action="index.php?tab=koszyk&action=update" method="post" id="cart">



w tej części po kliknięciu w link "zmień ilość produktów" wykonuje się skrypt który pokazuje diva z polem input z którym mam problem..
  1. $output[] = ' <td valign="top">';
  2. $output[] = ' <div style="display:inline;" id="count'.$id.'">';
  3. $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");">';
  4. $output[] = ' </a>'.$qty.'';
  5. $output[] = ' </div>';
  6. $output[] = ' <div style="display:none;" id="countUpdate'.$id.'">';
  7. $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");">';
  8. $output[] = ' </a>';
  9. $output[] = ' <input name="qty'.$id.'" title="Enter = zapisz" class="editores" style="width:20px;" type="text" value="'.$qty.'" onkeypress="handleKeyPress(event,this.form)" >';
  10. $output[] = ' </div></td>';



a tak usuwam.
  1. $output[] = ' <td valign="top">';
  2. $output[] = " <a href='java script:delete(\"".$id."\",\"delete\")' class='ui-icon ui-icon-trash' style='float: left; cursor: auto;' title='usuń z zamówienia'>";
  3. $output[] = ' </a></td>';




a tutaj skrypty obsługujące.

  1.  
  2.  
  3. // Submit po naciśnięciu Enter
  4. function handleKeyPress(e,form){
  5. var key=e.keyCode || e.which;
  6. if (key==13){
  7. form.submit();
  8. }
  9. }
  10.  
  11. // Usuń z zamówienia
  12. function delete(idp,akcja)
  13. {
  14. $.ajax({
  15. url: 'cart.php',
  16. type: 'POST',
  17. data: {
  18. tryb : 'usun_z_koszyka' ,
  19. id_przedmiotu : idp,
  20. action: akcja
  21. },
  22. success: function(odpowiedz)
  23. {
  24.  
  25. //document.getElementById('info').style.display='block';
  26. $('#info').fadeIn('slow');
  27. setTimeout('ukryj()',2000);
  28. $('#infotext').html('Produkt usunięty z zamówienia.');
  29. // $('#koszyk').load('cart.php');
  30.  
  31. // alert('odpowiedz');
  32.  
  33. },
  34. error: function(){
  35.  
  36. document.getElementById('info').style.display='block';
  37.  
  38. setTimeout('ukryj()',1500);
  39. $('#infotext').html('Błąd Połączenia - Spróbój jeszcze Raz.');
  40.  
  41. //alert('Błąd połączenia ajax');
  42.  
  43. }
  44.  
  45.  
  46. });
  47. }
  48.  
  49.  
  50. function ukryj() {
  51.  
  52. $('#info').fadeOut('slow');
  53.  
  54. }
  55.  


co chcę osiągnąć, to aby zaktualizować zamówienie bez przeładowania strony
czyli tak jak to jest w przypadku usuwania.
czytałm próbowałem modyfikować funkcję odpowiedzialną za usuwanie, niestety moje próby spełzły na niczym..
niestety moja znajomość javascriptu tudziez jQuery mocno kuleje i dlatego zwracam się do was z prośbą o pomoc..
potrzebuje wskazówek, przykładów na których mógłbym się oprzeć i zastosować w moim przypadku..
za wszelką pomoc dziękuje wink.gif

// edit

zapomniałem dać skrypt obslugujący update

  1. switch ($action) {
  2. case 'add':
  3. if ($cart) {
  4. $cart .= ','.$_POST['id_przedmiotu'];
  5. } else {
  6. $cart = $_POST['id_przedmiotu'];
  7. }
  8. break;
  9. case 'delete':
  10. if ($cart) {
  11. $items = explode(',',$cart);
  12. $newcart = '';
  13. foreach ($items as $item) {
  14. //if ($_GET['id'] != $item) {
  15. if ($_POST['id_przedmiotu'] != $item) {
  16. if ($newcart != '') {
  17. $newcart .= ','.$item;
  18. } else {
  19. $newcart = $item;
  20. }
  21. }
  22. }
  23. $cart = $newcart;
  24. }
  25. break;
  26. case 'update':
  27. if ($cart) {
  28. $newcart = '';
  29. foreach ($_POST as $key=>$value) {
  30. if (stristr($key,'qty')) {
  31. $id = str_replace('qty','',$key);
  32. $items = ($newcart != '') ? explode(',',$newcart) : explode(',',$cart);
  33. $newcart = '';
  34. foreach ($items as $item) {
  35. if ($id != $item) {
  36. if ($newcart != '') {
  37. $newcart .= ','.$item;
  38. } else {
  39. $newcart = $item;
  40. }
  41. }
  42. }
  43. for ($i=1;$i<=$value;$i++) {
  44. if ($newcart != '') {
  45. $newcart .= ','.$id;
  46. } else {
  47. $newcart = $id;
  48. }
  49. }
  50. }
  51. }
  52. }
  53. $cart = $newcart;
  54. break;
  55. }
  56.  
  57.  
  58. //// zdublowany update z $_GET używany obecnie..
  59. if ($_GET['action'] == 'update') {
  60. if ($cart) {
  61. $newcart = '';
  62. foreach ($_POST as $key=>$value) {
  63. if (stristr($key,'qty')) {
  64. $id = str_replace('qty','',$key);
  65. $items = ($newcart != '') ? explode(',',$newcart) : explode(',',$cart);
  66. $newcart = '';
  67. foreach ($items as $item) {
  68. if ($id != $item) {
  69. if ($newcart != '') {
  70. $newcart .= ','.$item;
  71. } else {
  72. $newcart = $item;
  73. }
  74. }
  75. }
  76. for ($i=1;$i<=$value;$i++) {
  77. if ($newcart != '') {
  78. $newcart .= ','.$id;
  79. } else {
  80. $newcart = $id;
  81. }
  82. }
  83. }
  84. }
  85. }
  86. $cart = $newcart;
  87. }
camikazee
W moim sklepie zastosowałem podobny mechanizm.
A działa on tak:
  • generuje tabelkę z produktami w koszyku, każda linia zawiera atrybud zawierający id produktu w koszyku
  • skryptem jQuery w pętli each deklaruję funkcje usuwania pojedynczych produktów z koszyka, w momencie tej akcji poprzez ajaxa usuwam produkt i funkcją jQuery typu $("#" + id).fadeOut() ukrywam
  • skrypt również wykrywa zmiany pól z ilością produktów i po zmianie któregokolwiek odsłania przycisk "zaktualizuj ilość"


Co do Twojego kodu, pamiętaj, że np. funkcję document.getElementById('info').style.display='block'; możesz zastąpić $("#info").hide(); lub bardziej "bajeranckimi" np. fadeOut()
pa-jong
  1. $("#" + id).fadeOut()


czyli, że dajmy na to jak poprostu nadam id dla <tr> np:

  1. $output[] = ' <tr id="item'.$id.'" class="ui-state-default">';
  2. $output[] = ' <td valign="top"> '.$i.'. </td>';
  3. $output[] = ' <td valign="top" style="color: #4d8214; class="username-coloured"> '.$id.' </td>';
  4. $output[] = ' <td style="width:300px; '.$col.'" valign="top">';
  5. $output[] = ' '.$Nazwa.'</td>';
  6.  
  7. (...)


i przy "usuń" dam np onClick


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


to powinno mi dynamicznie ukryć dany rekord na www tak ?
jakos mi sie to zbyt proste wydaje, a nie mam jak obecnie sprawdzić..
camikazee
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Test</title>
  5. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  6. $(document).ready(function(){
  7. $("td.del a").click(function() {
  8. var idproduktu = $(this).attr('id');
  9.  
  10. //ajaxem usuwam produkt, w przypasku powodzenia ukrywam go
  11. $("#" + idproduktu).parent().fadeOut();
  12.  
  13. return false;
  14. });
  15. });
  16. </head>
  17.  
  18. <table border="1">
  19. <tr>
  20. <td class="del">
  21. <a href="#" id="idproduktu1" class="ui-icon ui-icon-trash" style="float: left; cursor: auto;" title="usuń z zamówienia">Usuń zamówienie 1</a>
  22. </td>
  23. </tr>
  24. <tr>
  25. <td class="del">
  26. <a href="#" id="idproduktu2" class="ui-icon ui-icon-trash" style="float: left; cursor: auto;" title="usuń z zamówienia">Usuń zamówienie 2</a>
  27. </td>
  28. </tr>
  29. <tr>
  30. <td class="del">
  31. <a href="#" id="idproduktu3" class="ui-icon ui-icon-trash" style="float: left; cursor: auto;" title="usuń z zamówienia">Usuń zamówienie 3</a>
  32. </td>
  33. </tr>
  34. </body>
  35. </html>
  36.  


Taki mały skrót myślowy, który mam nadzieję wyjaśni mechanizm usuwania i przewagę wykorzystania jQuery nad umieszczaniem zbędnego kodu js w linkach "a".
pa-jong
mniej więcej czaje
a przynajmniej na tyle aby zrobić to czym miałem się zająć w następnej kolejności, dzięki wink.gif
może nie jest to idealny kod ale działa, poprawkami zajmę się później wink.gif

jednakże dalej nie uporałem się z updatem koszyka poprzez jquery.. struktura pliku wygląda tak..

admin.php
  1. if (isset($_GET['tab']) && $_GET['tab'] == 'koszyk') {
  2. include ('cart.php');


natomiast w cart.php jest m.in. formularz z ostatnią nieudolną próbą..
  1. $output[] = ' <form action="admin.php?tab=koszyk&action=update" method="post" id="cart" >';
  2.  
  3. (...)
  4.  
  5. $output[] = ' <input name="qty'.$id.'" title="Enter = zapisz" class="editores" style="width:20px;" type="text" value="'.$qty.'" onkeypress="handleKeyPress(event,this.form)" onchange="$.post("cart.php", { name: qty'.$id.', value: '.$qty.', action: update } );">';



onkeypress w admin.php
( zawierają się tez tutaj funkcje odpowiedzialne za dodawanie i usuwanie )
  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. </script>


skrypt odpowiedzialny za update
cart.php
  1. switch ($action) {
  2. case 'add':
  3. if ($cart) {
  4. $cart .= ','.$_POST['id_przedmiotu'];
  5. } else {
  6. $cart = $_POST['id_przedmiotu'];
  7. }
  8. break;
  9. case 'delete':
  10. if ($cart) {
  11. $items = explode(',',$cart);
  12. $newcart = '';
  13. foreach ($items as $item) {
  14. //if ($_GET['id'] != $item) {
  15. if ($_POST['id_przedmiotu'] != $item) {
  16. if ($newcart != '') {
  17. $newcart .= ','.$item;
  18. } else {
  19. $newcart = $item;
  20. }
  21. }
  22. }
  23. $cart = $newcart;
  24. }
  25. break;
  26. case 'update':
  27. if ($cart) {
  28. $newcart = '';
  29. foreach ($_POST as $key=>$value) {
  30. if (stristr($key,'qty')) {
  31. $id = str_replace('qty','',$key);
  32. $items = ($newcart != '') ? explode(',',$newcart) : explode(',',$cart);
  33. $newcart = '';
  34. foreach ($items as $item) {
  35. if ($id != $item) {
  36. if ($newcart != '') {
  37. $newcart .= ','.$item;
  38. } else {
  39. $newcart = $item;
  40. }
  41. }
  42. }
  43. for ($i=1;$i<=$value;$i++) {
  44. if ($newcart != '') {
  45. $newcart .= ','.$id;
  46. } else {
  47. $newcart = $id;
  48. }
  49. }
  50. }
  51. }
  52. }
  53. $cart = $newcart;
  54. break;
  55. }
  56.  
  57.  
  58. //// zdublowany update z $_GET używany obecnie..
  59. if ($_GET['action'] == 'update') {
  60. if ($cart) {
  61. $newcart = '';
  62. foreach ($_POST as $key=>$value) {
  63. if (stristr($key,'qty')) {
  64. $id = str_replace('qty','',$key);
  65. $items = ($newcart != '') ? explode(',',$newcart) : explode(',',$cart);
  66. $newcart = '';
  67. foreach ($items as $item) {
  68. if ($id != $item) {
  69. if ($newcart != '') {
  70. $newcart .= ','.$item;
  71. } else {
  72. $newcart = $item;
  73. }
  74. }
  75. }
  76. for ($i=1;$i<=$value;$i++) {
  77. if ($newcart != '') {
  78. $newcart .= ','.$id;
  79. } else {
  80. $newcart = $id;
  81. }
  82. }
  83. }
  84. }
  85. }
  86. $cart = $newcart;
  87. }


//edit
po chwili nieobecności i leniwieniu się nad brzegami atlantyku, wracam do problemu.
czy będzie mi ktoś w stanie pomoc ?
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.