Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][MySQL][PHP]Zmiana wartości pola w bazie
Forum PHP.pl > Forum > Przedszkole
djgarsi
Witam. Próbuję właśnie zrobić regulację wartości pola (+/-) w bazie danych.
Wygląda to mniej więcej tak: + 10 -, po kilknięciu na + chcę aby zwiększyła się wartość pola w bazie np o 5 i w miejscu 10 pojawiło się 15.

Obecnie stworzyłem skrypt ajax'a ale nie działa.
Kod
$(window).load(function(){
    function zwieksz(id){
        $.ajax({
           type: "POST",
           url: "zm_ob.php?id=" + id + "",
           data: "akcja=dodaj",
           success: function(wynik) {
            $("#ile").html(wynik)
           }
          });
          return false;
    }
    function zmniejsz(id){
        $.ajax({
           type: "POST",
           url: "zm_ob.php?id=" + id + "",
           data: "akcja=odejmij",
           success: function(wynik) {
            $("#ile").html(wynik)
           }
          });
          return false;
    }
});


plik zm_ob.php zawiera:
  1. //polaczenie z baza jest
  2. $id = $_GET['id.'];
  3. $Query= 'SELECT id,wartosc FROM tabela WHERE id = "'.$id.'"';
  4. $result = mysql_query($Query) or die(mysql_error());
  5. while($rt = mysql_fetch_array($result)) {
  6. $how = $rt['wartosc'];
  7. }
  8. $decrease = 'UPDATE tabela SET wartosc=wartosc-5 WHERE id = "'.$id.'"';
  9. $increase = 'UPDATE tabela SET wartosc=wartosc+5 WHERE id = "'.$id.'"';
  10. if($_POST['akcja']=='dodaj') {
  11. mysql_query($increase);
  12. $how += 5;
  13. echo $how;
  14. }
  15. elseif($_POST['akcja']=='odejmij') {
  16. mysql_query($decrease);
  17. $how -= 5;
  18. echo $how;
  19. }


I teraz pytanie czy da się coś z tym zrobić?
Turson
data: "akcja=odejmij",
sprawdz jeszcze raz jak to powinno wygladac
trueblue
  1. $id = $_GET['id'];
?
A oprócz tego obydwa skrypty zmieniłbym tak:
  1. function zmien(id,typ){
  2. $.ajax({
  3. type: "POST",
  4. url: "zm_ob.php?id=" + id + "",
  5. data: {'akcja':typ}, //Turson ma rację
  6. success: function(wynik) {
  7. $("#ile").html(wynik)
  8. }
  9. });
  10. return false;
  11. }

  1. if($_POST['akcja']=="dodaj"||$_POST['akcja']=="odejmij"){
  2. $zmien = 'UPDATE tabela SET wartosc=wartosc+'.($_POST['akcja']=="odejmij"?"-":"").'5 WHERE id = "'.$id.'"';
  3. mysql_query($zmien);
  4. $how=$how+($_POST['akcja']=="odejmij"?-5:5);
  5. echo $how;
  6. }
djgarsi
rozumiem że link wywołujący funkcję powinien wyglądać np tak:
  1. <a href="java script:zmien(1,dodaj); return false;">Dodaj</a> <span id="ile">tu wartosc</span> <a href="java script:zmien(1,odejmij); return false;">Odejmij</a>

Dobrze myślę?
trueblue
Prawie, bo typ przesyłasz jako string, więc:
  1. <a href="java script:zmien(1,'dodaj'); return false;">Dodaj</a> <span id="ile">tu wartosc</span> <a href="java script:zmien(1,'odejmij'); return false;">Odejmij</a>

Ale nie musisz tego przesyłać tak, równie dobrze możesz podać 0 (dla dodaj), 1 (dla odejmij) i odpowiednio zmodyfikować skrypt PHP.
djgarsi
Kod
SyntaxError: return not in function
zmien(1,'dodaj'); return false;


Konsola wywala coś takiego.
trueblue
Nie zwracaj nic jeśli jesteś w "href", czyli samo wywołanie funkcji, bez return false;
djgarsi
Kod
ReferenceError: zmien is not defined


Teraz to. Plik z funkcją js jest dodany do head.
trueblue
Wrzuć trochę więcej kodu.
Wytnij to czego nie chcesz pokazywać.
djgarsi
HTML gdzie dane będą prezentowane:
  1. <a href="java script:zmien(<?php echo $id_ob; ?>,'dodaj');" ><i class="glyphicon glyphicon-plus"></i></a> <span id="ile"><?php echo $obciazenie; ?></span> <a href="java script:zmien(<?php echo $id_ob; ?>,'odejmij');"><i class="glyphicon glyphicon-minus"></i></a></p>


JS:
  1. $(window).load(function(){
  2. function zmien(id,typ){
  3. $.ajax({
  4. type: "POST",
  5. url: "zm_ob.php?id=" + id + "",
  6. data: {'akcja':typ}, //Turson ma rację
  7. success: function(wynik) {
  8. $("#ile").html(wynik)
  9. }
  10. });
  11. return false;
  12. }
  13. });


PHP:
  1. include('db_connect.php');
  2. $id = $_GET['id'];
  3. if($_POST['akcja']=="dodaj") {
  4. $zmien = 'UPDATE treningi SET obciazenie=obciazenie+5 WHERE id = "'.$id.'"';
  5. mysql_query($zmien);
  6. $how=$how+5;
  7. echo $how;
  8. }
  9. if($_POST['akcja']=="odejmij") {
  10. $zmien = 'UPDATE treningi SET obciazenie=obciazenie-5 WHERE id = "'.$id.'"';
  11. mysql_query($zmien);
  12. $how=$how-5;
  13. echo $how;
  14. }


Co może być nie tak?
IProSoft
Wyrzuć funkcję zmien() poza $(window).load i wtedy sprawdź.
djgarsi
Cytat(IProSoft @ 30.03.2014, 23:47:20 ) *
Wyrzuć funkcję zmien() poza $(window).load i wtedy sprawdź.


Nic to nie daje.
trueblue
Może ta literówka:
  1. href="java script:
djgarsi
No właśnie to parser forum tę spację dodaje. W kodzie jest ok.
trueblue
A po radzie IProSoft, aby wyrzucić poza "load", gdzie wrzuciłeś funkcję? Nie czasem do "ready"?
djgarsi
Też na to wpadłem. Próbowałem w load, ready i bez obu. to samo za każdym razem.
trueblue
Zostaw tak jak jest niżej, bez żadnych zmian, działa (oczywiście status żądania będzie 404)?
  1. <!DOCTYPE>
  2. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  3. <script type="text/javascript">
  4. function zmien(id,typ){
  5. $.ajax({
  6. type: "POST",
  7. url: "blabla.php?id=" + id + "",
  8. data: {'akcja':typ},
  9. success: function(wynik) {
  10. $("#ile").html(wynik)
  11. }
  12. });
  13. return false;
  14. }
  15.  
  16. </head>
  17. <a href="java script:zmien(1,'dodaj');" >dodaj<i class="glyphicon glyphicon-plus"></i></a>
  18. <span id="ile">1</span>
  19. <a href="java script:zmien(1,'odejmij');">odejmij<i class="glyphicon glyphicon-minus"></i></a>
  20. </body>
  21. </html>
djgarsi
Tu jest link do działania.
nospor
Nie:
<a href="java script:zmien(1,'dodaj');" >dodaj<i class="glyphicon glyphicon-plus"></i></a>

a:
<a href="#" onclick="zmien(1,'dodaj');return false;" >dodaj<i class="glyphicon glyphicon-plus"></i></a>

Analogicznie reszta
trueblue
nospor, tyle, że w przypadku podpięcia pod href również powinno działać (i działa).
nospor
Mi nie dziala smile.gif Mnie przenosi na strone: java script:..... wink.gif

Moim zdaniem dawanie js w HREF jest brzydkim rozwiązaniem. Uwazam, ze lepszym rozwiązaniem jest to co podalem. Chocby z takiego powodu, ze jak ktos nie ma wlaczonego js, to go bez sensu nie bedzie przekierowywac
trueblue
Bo poprawnym protokołem jest java script: a nie java script:, pisał o tym djgrasi (parser BB tak przeformatowuje).

Najlepszym będzie dodanie zdarzeń z wykorzystaniem jQuery, skoro takowe jest wykorzystywane gdzie indziej.
nospor
Cytat
Bo poprawnym protokołem jest java script: a nie java script:, pisał o tym djgrasi (parser BB tak przeformatowuje).
Przeciez wiem, nie musisz mi tego tlumaczyc. Poza tym widze jak ma na stronie.....
Jak pisalem: mi przekierowuje na java script:..... (spacje dodaje parser forum, wiec sie nie czepiaj ze wyswietla sie spacja...)

Cytat
Najlepszym będzie dodanie zdarzeń z wykorzystaniem jQuery, skoro takowe jest wykorzystywane gdzie indziej.
Lub to co ja napisalem wink.gif
trueblue
Nie czepiam się, nie wiem w których miejscach dodał parser, a w których występuje faktyczna literówka.
djgarsi
Już działa super wink.gif Dziękuję smile.gif
Ajax trueblue, html nospor wink.gif
nospor
Cytat
Nie czepiam się, nie wiem w których miejscach dodał parser, a w których występuje faktyczna literówka.

No to juz wiesz. Parser rozdziela kazde slowo javascript z dwukropkiem
Poza tym pisalem, ze mi przenosi z jego strony, a na stronie mial poprawnie napisane jak mu kazales, wiec nie bylo mowy bym czepial sie literowki wink.gif
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.