Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Błąd odejmowania punktów
Forum PHP.pl > Forum > Przedszkole
Stron: 1, 2
Dominator
Witajcie, mam taki problem, mam kolumny array (kolumna array to są użytkownicy) i hs_nagrody (tam gdzie są nagrody), no i każdy użytkownik ma powiedzmy 500 punktów, aby odjęło punkty muszę zrobić 2 zapytania, jedno do użytkownika o stan ile ma punktów, a drugie zapytanie to ile kosztuje nagroda dla danego użytkownika, i mam problem, wywala mi błąd, ciągle naprawiam i dupa.

  1. $zapytanie = mysql_query("SELECT punkty FROM array where login='".$login."'", $polaczenie) or die(mysql_error());
  2. $zapytanie = mysql_query("SELECT koszt FROM hs_nagrody where koszt='".$koszt."'", $polaczenie) or die(mysql_error());
  3.  
  4. $pytanie = mysql_fetch_assoc($zapytanie);
  5. $punkty = $pytanie['punkty'];
  6. $koszt = $pytanie['koszt'];
  7.  
  8. $newitem = $punkty - $koszt;
  9.  
  10. $aktualizacja = mysql_query("UPDATE array SET punkty='".$newitem."' WHERE login='".$login."'", $polaczenie) or die(mysql_error());


Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in ...
drozdii07
Nie może być czegoś takiego: " "" ". Te " w środku można zastąpić ' ' albo escapować za pomocą \
Dominator
O którą konkretnie linijkę Ci chodzi ?
drozdii07
W każdym zapytaniu tak masz wink.gif Napisz poprostu:
  1. SELECT ... WHERE login = '$login'
i po sprawie.
Dominator
Ale poza tym wszystko dobrze zrobiłem ?

Po zastosowaniu twoich opcji:

Parse error: syntax error, unexpected T_STRING in
Fifi209
Nie.
Najpierw wykonujesz zapytanie, potem je nadpisujesz. wink.gif

$zapytanie = ...
$zapytanie = ...
drozdii07
A dokladnie to jak wygląda twoje zapytanie po zmianach ?
Dominator
Cytat(Fifi209 @ 6.08.2011, 13:32:57 ) *
Nie.
Najpierw wykonujesz zapytanie, potem je nadpisujesz. wink.gif

$zapytanie = ...
$zapytanie = ...



Przecież tak zrobiłem -,- Co nie tak ?
drozdii07
Zrób tak:

$zapytanie = pierwsze zapytanie
$zapytanie_drugie = drugie zapytanie

Dominator
Cytat(drozdii07 @ 6.08.2011, 13:33:11 ) *
A dokladnie to jak wygląda twoje zapytanie po zmianach ?


  1. $zapytanie = mysql_query("SELECT punkty FROM array where login='$login', $polaczenie) or die(mysql_error());
  2. $zapytanie = mysql_query("SELECT koszt FROM hs_nagrody where koszt='$koszt', $polaczenie) or die(mysql_error());
  3.  
  4. $pytanie = mysql_fetch_assoc($zapytanie);
  5. $punkty = $pytanie['punkty'];
  6. $koszt = $pytanie['koszt'];
  7.  
  8. $newitem = $punkty - $koszt;
  9.  
  10. $aktualizacja = mysql_query("UPDATE array SET punkty='$newitem' WHERE login='$login', $polaczenie) or die(mysql_error());
Fifi209
No właśnie. A ja Cię upominam, że tak zrobiłeś. Skoro jedno nadpisujesz drugim to jak potem chcesz z tego nadpisanego coś wyciągnąć?
Dominator
Kurna, mam ciągle

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in
drozdii07
W pierwszej linijce brakuje " na końcu zapytania wink.gif I w drugiej też
Dominator
Cytat(Fifi209 @ 6.08.2011, 13:36:44 ) *
No właśnie. A ja Cię upominam, że tak zrobiłeś. Skoro jedno nadpisujesz drugim to jak potem chcesz z tego nadpisanego coś wyciągnąć?



$zapytanie=
$zapytaniedwa=

potem

$pytanie = mysql_fetch_assoc($zapytanie, $zapytaniedwa);

?

Cytat(drozdii07 @ 6.08.2011, 13:38:12 ) *
W pierwszej linijce brakuje " na końcu zapytania wink.gif I w drugiej też



Wiem, już wcześniej to naprawiłem
drozdii07
Jeśli wcześniej to naprawiłeś to dlaczego dajesz kod z błędami ?
Fifi209
No z tym zap1 i zap2 ok, tylko mysql_fetch_assoc przyjmie max jeden argument
Dominator
Cytat(Fifi209 @ 6.08.2011, 13:43:35 ) *
No z tym zap1 i zap2 ok, tylko mysql_fetch_assoc przyjmie max jeden argument


To co zrobić aby przyjęło 2 argumenty ?
Fifi209
Użyć dwa razy? Po razie na każde zapytanie?
Dominator
Cytat(Fifi209 @ 6.08.2011, 13:47:30 ) *
Użyć dwa razy? Po razie na każde zapytanie?


Mógłbyś trochę konkretniej ? Czy o to Ci chodzi ?

$dwazapytania = $zapytanie + zapytaniedwa; ?
drozdii07
  1. $pytanie = mysql_fetch_assoc($zapytanie);
  2. ...
  3.  
  4. $pytaniedwa = mysql_fetch_assoc($zapytaniedwa);
Dominator
Mój kod wygląda następująco:

  1. $zapytanie1 = mysql_query("SELECT punkty FROM array where login='$login'", $polaczenie) or die(mysql_error());
  2.  
  3. $pytanie = mysql_fetch_assoc($zapytanie1);
  4.  
  5. $zapytanie2 = mysql_query("SELECT koszt FROM hs_nagrody where koszt='$koszt'", $polaczenie) or die(mysql_error());
  6.  
  7. $pytaniedwa = mysql_fetch_assoc($zapytanie2);
  8.  
  9. $punkty = $pytanie['punkty'];
  10. $koszt = $pytaniedwa['koszt'];
  11.  
  12. $newitem = $punkty - $koszt;
  13.  
  14. $aktualizacja = mysql_query("UPDATE array SET punkty='$newitem' WHERE login='$login'", $polaczenie) or die(mysql_error());


ciągle mi wywala błąd Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in

ten błąd jest gdzie $zapytanie1

Wsadziłem w złe miejsce i wywalał błąd sad.gif

Ale punktów nie odejmuje ...
drozdii07
Zrób:
  1. echo $punkty;
  2. echo $koszt;


I napisz co się pojawi wink.gif
Dominator
Nic się nie pojawia
mortus
Nie nawiązałeś połączenia z bazą danych. Jeśli połączenie nawiązujesz w innym pliku, to może po prostu go nie wstawiłeś (include).
W przypadku dalszych problemów podaj kod odpowiedzialny za połączenie z mysql. Coś w stylu:
  1. $polaczenie = mysql_connect(...)

Pamiętaj, żeby usunąć nazwę użytkownika i hasło.

EDIT
@down No przecież o tym mówi komunikat błędu.
drozdii07
Mi tamten kod działa, więc to musi być tylko i wyłącznie połączenie wink.gif
Dominator
Include jest cały czas, błędu żadnego nie wywala ale punktów nie odejmuje - czemu ?
drozdii07
No bo nie pobiera danych z bazy ! Pokaz jak się łączysz z bazą albo cały plik razem z tym include a nie tylko urywek z zapytaniem..
Dominator
Cytat(drozdii07 @ 6.08.2011, 14:40:25 ) *
No bo nie pobiera danych z bazy ! Pokaz jak się łączysz z bazą albo cały plik razem z tym include a nie tylko urywek z zapytaniem..



Uporałem się z tym, punkty zabiera ale zabiera wszystkie punkty zamiast np: dwustu oraz zabiera każdemu użytkownikowi a nie temu co akurat odejmuje sobie
drozdii07
Czyli, że zostaje 0 pkt. czy jak ? Wyświetl sobie $newitem i sprawdź czy dobra wartość wychodzi..

EDIT: Masz phpmyadmin ? Jeśli masz to weź konsole SQL i wykonaj to zapytanie UPDATE z jakimiś przykładowymi danymi, np. pkt. 30 a login jakiś jaki masz w bazie
Dominator
Cytat(drozdii07 @ 6.08.2011, 14:49:43 ) *
Czyli, że zostaje 0 pkt. czy jak ? Wyświetl sobie $newitem i sprawdź czy dobra wartość wychodzi..

EDIT: Masz phpmyadmin ? Jeśli masz to weź konsole SQL i wykonaj to zapytanie UPDATE z jakimiś przykładowymi danymi, np. pkt. 30 a login jakiś jaki masz w bazie



Wyświetla mi ile punktów mają wszyscy użytkownicy, ja ich mam 58, a ty dajmy że masz 100 to pokazuje mi "Posiadasz 58100" punktów :/
drozdii07
Pokaz jak masz skonstruowane tabele wink.gif
Dominator
Cytat(drozdii07 @ 6.08.2011, 15:00:09 ) *
Pokaz jak masz skonstruowane tabele wink.gif


Z użytkownikami czy z nagrodami ?
drozdii07
array i hs_nagrody i czy na pewno masz login w zmiennej $login ?
Dominator
Cytat(drozdii07 @ 6.08.2011, 15:03:43 ) *
array i hs_nagrody i czy na pewno masz login w zmiennej $login ?


hs_nagrody

CREATE TABLE IF NOT EXISTS `hs_nagrody` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`skrot` varchar(30) NOT NULL,
`nazwa` varchar(50) NOT NULL,
`opis` varchar(100) NOT NULL,
`pelnyopis` varchar(2000) NOT NULL,
`link` varchar(200) NOT NULL,
`ilosc` int(5) NOT NULL,
`koszt` varchar(30) NOT NULL,
`trescboxa` varchar(200) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=27 ;

array

CREATE TABLE `array` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`login` VARCHAR( 32 ) NOT NULL ,
`password` VARCHAR( 40 ) NOT NULL ,
`email` VARCHAR( 50 ) NOT NULL ,
`token` TEXT NOT NULL ,
`ban`TINYINT NOT NULL DEFAULT '0',
`punkty`TINYINT NOT NULL DEFAULT '0',
`potwierdzenie` TINYINT NOT NULL DEFAULT '0'
) ENGINE = MYISAM ;
drozdii07
To w koncu ta druga tabela to array czy users ? Bo w tym CREATE.. jest users a ty pobierasz z array
Dominator
Cytat(drozdii07 @ 6.08.2011, 15:10:41 ) *
To w koncu ta druga tabela to array czy users ? Bo w tym CREATE.. jest users a ty pobierasz z array


ta druga z uzytkownikami - array
drozdii07
Punkty mogą przyjąć wartość tylko do 127. Zmień typ na INT i zobacz czy działa wink.gif
Dominator
Ok, mogę dać powyżej 127 ale nadal pokazuje mi to co pokazywało - 58100 pkt
drozdii07
Daj mi cały kod jaki teraz używasz żeby to pobrać wink.gif
Dominator
Cytat(drozdii07 @ 6.08.2011, 15:17:58 ) *
Daj mi cały kod jaki teraz używasz żeby to pobrać wink.gif



  1.  
  2. ... przeniesienie do kategorii jesli ilosc nagrody jest równa zerze
  3.  
  4. $zapytanie1 = mysql_query("SELECT punkty FROM array where login='$login' ORDER BY id", $polaczenie) or die(mysql_error());
  5.  
  6. $pytanie = mysql_fetch_assoc($zapytanie1);
  7.  
  8. $zapytanie2 = mysql_query("SELECT koszt FROM hs_nagrody where koszt='$koszt' ORDER BY id", $polaczenie) or die(mysql_error());
  9.  
  10. $pytaniedwa = mysql_fetch_assoc($zapytanie2);
  11.  
  12. $punkty = $pytanie['punkty'];
  13. $koszt = $pytaniedwa['koszt'];
  14.  
  15. $newitem = $punkty - $koszt;
  16.  
  17. $aktualizacja = mysql_query("UPDATE array SET punkty='$newitem' WHERE login='$login' ORDER BY id", $polaczenie) or die(mysql_error());
  18.  
  19. odejmowanie jednej sztuki nagrody oraz gratulacje - zamowiles nagrode tratata
mortus
Zauważ, że to Twoje drugie zapytanie jest w ogóle niepotrzebne. Wybierasz z bazy danych koszt, który jest równy wartości zmiennej $koszt, bez sensu.
Sprawdź zawartość tych trzech zmiennych przed i po odejmowaniu (kod poniżej):
  1. var_dump($punkty, $koszt);
  2. $newitem = $punkty - $koszt;
  3. var_dump($punkty, $koszt, $newitem);

@down W takim razie, który koszt ma zostać pobrany, skoro może ich być ile dusza zapragnie? Źle zorganizowany jest cały skrypt.

Do drugiego zapytania powinieneś przekazać id nagrody:
  1. SELECT `koszt` FROM `hs_nagrody` WHERE `id` = $id_nagrody

To id nagrody powinno natomiast być przekazywane wcześniej przez $_GET lub $_POST.
drozdii07
  1. $zapytanie2 = mysql_query("SELECT koszt FROM hs_nagrody ORDER BY id", $polaczenie)


Chciałeś pobrać z bazy koszt gdzie koszt równy jest zmiennej, której nie ma przed zapytaniem wink.gif Teraz działa, przynajmniej mi.

@up Szybszy ;p Szukał rozwiązania dlaczego mu nie pobiera dobrze i dlaczego nie odejmuje. Jak on sobie później zrobi pobieranie kosztów to mnie szczerze nie obchodzi. Nie to jest tematem tego wątku więc nie chciałem się już w to zagłębiać wink.gif
Dominator
Ogarnąłem to że pokazuje ile kto ma punktów, i jeśli mam 58 to pokaże że mam 58 wink.gif

Ahh.. odjąć nie chce - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1, wiecie co to za błąd ?, sorki że was tak męczę sad.gif
drozdii07
No jakim cudem ? Pokaż co zmieniłeś, bo to zapytanie działa na 100%

  1. $aktualizacja = mysql_query("UPDATE array SET punkty='$newitem' WHERE login='$login'") OR die(mysql_error());
Dominator
Na wyświetlanie kto ile ma punktów to miałem

  1. <?php
  2. include('db.php');
  3.  
  4.  
  5. $zapytanie = "SELECT punkty FROM array";
  6. $pobierz = mysql_query($zapytanie);
  7.  
  8. while($dane = mysql_fetch_array($pobierz))
  9. {
  10. echo $dane['punkty'];
  11. }
  12.  
  13. ?>


ale zmodyfikowałem go tak

  1. <?php
  2. include('db.php');
  3.  
  4. $login = $_SESSION['login'];
  5.  
  6. $zapytanie = "SELECT punkty FROM array WHERE login='$login'";
  7. $pobierz = mysql_query($zapytanie);
  8.  
  9. while($dane = mysql_fetch_array($pobierz))
  10. {
  11. echo $dane['punkty'];
  12. }
  13.  
  14. ?>


wink.gif

---

Cytat(drozdii07 @ 6.08.2011, 15:41:09 ) *
No jakim cudem ? Pokaż co zmieniłeś, bo to zapytanie działa na 100%

  1. $aktualizacja = mysql_query("UPDATE array SET punkty='$newitem' WHERE login='$login'") OR die(mysql_error());


takie coś mam

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
drozdii07
Nie rozumiem, mi wszystko działa wink.gif Może jakiś przypadkowy " ci sie zawieruszył gdzies ?
Dominator
Nic mi nie pouciekało, wszystko sprawdziłem, jestem pewien na 100% że wszystko jest dobrze sad.gif, gdyby nie ten błąd ... kurde no
drozdii07
No to ja znowu proszę o cały kod wink.gif Bo z tego co już jest w temacie to nic nie widzę, żadnych błędów czy cos wink.gif
Dominator
  1. $zapytanie1 = mysql_query("SELECT punkty FROM array where login=$login", $polaczenie) or die(mysql_error());
  2.  
  3. $pytanie = mysql_fetch_assoc($zapytanie1);
  4.  
  5. $zapytanie2 = mysql_query("SELECT koszt FROM hs_nagrody where koszt=$koszt", $polaczenie) or die(mysql_error());
  6.  
  7. $pytaniedwa = mysql_fetch_assoc($zapytanie2);
  8.  
  9. $login = $_SESSION['login'];
  10.  
  11. $punkty = $pytanie['punkty'];
  12. $koszt = $pytaniedwa['koszt'];
  13.  
  14. $newitem = $punkty - $koszt;
  15.  
  16. $aktualizacja = mysql_query("UPDATE array WHERE login=$login SET punkty=$newitem") OR die(mysql_error());;



edit: wiem juz do czego się dowala - do " oraz '
Wychwyciłem błąd, dowala się do tego

  1. $zapytanie1 = mysql_query("SELECT punkty FROM array where login=$login", $polaczenie) or die(mysql_error());
drozdii07
To jednak nie ta linijka wink.gif W ostatniej linijce masz o jeden średnik za dużo 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.