SaVaGe123 21 Zgłoś post Napisano Grudzień 16, 2011 Rozbudowałem skrypt ze po wpisaniu kodu wartego 2 zł dodaje 2 zł a jak kod warty 6 zł to dodaje 6 zł wszystko ładnie pięknie działa tylko mam problem w wywalaniem komunikatu. Jeśli wpisze kod za 2 3 lub 6 zł to wywala mi "Niepoprawny kod" lecz dodaje pieniądze a jesli za 9 zł (ostatni w skrypcie) to wtedy "Dodano 9 złotych". Jak przerobic ten kod aby posprawdzało wszystkie w bazie i jak niebędzie wywaliło jeden komunikat ? Oto kod : <?php if(!empty($_POST['kod'])){ $_POST['kod'] = mysql_real_escape_string($_POST['kod']); $msg = ""; mysql_query("update kody_2zl set status = 1, data = now(), gracz = '.$login.' where kod = '".$_POST['kod']."' and status = 0"); if(mysql_affected_rows() == 1){ mysql_query("update users set waluta = waluta + 2 where login = '$login'"); $row->waluta += 2; $msg = "<p class='true'>Dodano 2 złote</p>"; } mysql_query("update kody_3zl set status = 1, data = now(), gracz = '.$login.' where kod = '".$_POST['kod']."' and status = 0"); if(mysql_affected_rows() == 1){ mysql_query("update users set waluta = waluta + 3 where login = '$login'"); $row->waluta += 3; $msg = "<p class='true'>Dodano 3 złote</p>"; } mysql_query("update kody_6zl set status = 1, data = now(), gracz = '.$login.' where kod = '".$_POST['kod']."' and status = 0"); if(mysql_affected_rows() == 1){ mysql_query("update users set waluta = waluta + 6 where login = '$login'"); $row->waluta += 6; $msg = "<p class='true'>Dodano 6 złotych</p>"; } mysql_query("update kody_9zl set status = 1, data = now(), gracz = '.$login.' where kod = '".$_POST['kod']."' and status = 0"); if(mysql_affected_rows() == 1){ mysql_query("update users set waluta = waluta + 9 where login = '$login'"); $row->waluta += 9; $msg = "<p class='true'>Dodano 9 złotych</p>"; } else $msg = "<p class='error'>Niepoprawny kod</p>"; echo $msg."<br><br><br>";} ?> Więcej informacji w temacie: http://www.webhostin...ania-pieniedzy/ Udostępnij ten post Link to postu Udostępnij na innych stronach
kafi 2425 Zgłoś post Napisano Grudzień 16, 2011 Problemem twoim jest ta konstrukcja: if(mysql_affected_rows() == 1){ mysql_query("update users set waluta = waluta + 9 where login = '$login'"); $row->waluta += 9; $msg = "<p class='true'>Dodano 9 złotych</p>"; } else $msg = "<p class='error'>Niepoprawny kod</p>"; Jeśli chcesz już tak bylejak to robić, to wszystkie if poza pierwszym zamień na else if. Chociaż IMO rozsądniejszym było by wyciągnięcie jednym zapytaniem ile kod jest warty i drugim dodać odpowiednią mamonę graczowi. Udostępnij ten post Link to postu Udostępnij na innych stronach
SaVaGe123 21 Zgłoś post Napisano Grudzień 17, 2011 (edytowany) Próbowałem już wcześniej z "else" za pierwszą razą wywaliło błąd a potem sumowało kody czyli jeśli wpisałem kod za 6 zł to zsumowało 2+3+6 i dodało 11. Teraz spróbuje tak jak ty mówiłeś tylko dręczy mnie jedna rzecz ile kod jest warty wyciągne dam pod zmienną wstawie tą zmienną w mysql_query("update users set waluta = waluta +$wartosckodu where login = '$login'"); $row->waluta += $wartosckodu; $msg = "<p class='true'>Dodano $wartosckodu złotych</p>"; Ale jak tutaj teraz wywalić błąd że zły kod ? mogę użyć starego skryptu czy próbować pisać nowy ? Dałem też coś takiego: <?php if(!empty($_POST['kod'])){ $_POST['kod'] = mysql_real_escape_string($_POST['kod']); $msg = ""; mysql_query("update kody_2zl set status = 1, data = now(), gracz = '.$login.' where kod = '".$_POST['kod']."' and status = 0"); if(mysql_affected_rows() == 1){ mysql_query("update users set waluta = waluta + $row->wkod where login = '$login'"); $row->waluta += $row->wkod; $msg = "<p class='true'>Dodano $row->wkod złote</p>"; } else $msg = "<p class='error'>Niepoprawny kod</p>"; echo $msg."<br><br>";} ?> Tylko nie wiem jak tu dać teraz pętle z mysql_fetch_object Edytowano Grudzień 17, 2011 przez SaVaGe123 (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
kafi 2425 Zgłoś post Napisano Grudzień 17, 2011 Zmień filozofię myślenia Moja propozycja: kody ------ kod - varchar(iletamkodmaznakow) - primarykey wartosc - int data_wykorzystania - datetime/NULL, domyślnie NULL gracz - int/NULL, domyślnie NULL Teraz, zakładając, że kody nie mogą się powtarzać, to robisz atomowo dwie operacje: SELECT wartosc FROM kody WHERE kod = "123456" AND data_wykorzystania IS NULL; // jeśli licznik zwroconych rekordow jest rowny zero, to smialo mozna napisac, ze kod jest nieprawidlowy. // jesli nie, to mozemy ustawic kod jako wykorzystany... LOCK TABLE kody WRITE; UPDATE kody SET data_wykorzystania=NOW(), gracz=1234 WHERE kod = "123456"; UNLOCK TABLES; Udostępnij ten post Link to postu Udostępnij na innych stronach
SaVaGe123 21 Zgłoś post Napisano Grudzień 17, 2011 Nie chce wam już zajmować czasu. Zamówiłem książkę. Internetowe kursy to jednak za mało. Zamiast tych twoich dwóch "atomowych operacji" można dać do bazy "waznosc_kodu" jeśli wynik z zapytania równa się 0 operacja leci dalej, jeśli jest 1 zwraca komunikat o wykorzystaniu kodu . Przeczytam książkę jeśli nie będę dalej umiał przeczytam jeszcze raz i tak do skutku. Dzięki za pomoc Udostępnij ten post Link to postu Udostępnij na innych stronach
regdos 1848 Zgłoś post Napisano Grudzień 17, 2011 @kafi a ten LOCK to powinien być przed SELECT żeby zablokować tabelę dla obu operacji bo po SELECT a przed UPDATE inny skrypt może też wybrać dane dla tego samego kodu. Udostępnij ten post Link to postu Udostępnij na innych stronach
kafi 2425 Zgłoś post Napisano Grudzień 17, 2011 można dać do bazy "waznosc_kodu" jeśli wynik z zapytania równa się 0 operacja leci dalej, jeśli jest 1 zwraca komunikat o wykorzystaniu kodu . Ale to jest tylko zbędna kolumna w bazie danych Przecież w opisanym przeze mnie kodzie to NULL w kolumnie data_wykorzystania jest tożsamy z waznosc_kodu=1, a jakakolwiek inna wartość - z waznosc_kodu=0 A @regdos - masz oczywiście rację. Urok kopiowania kilku części do tego cudnego whtkowego edytora :/ Udostępnij ten post Link to postu Udostępnij na innych stronach
Misiek08 285 Zgłoś post Napisano Grudzień 19, 2011 Pierwszy kod jest ok, tyko trzeba dodać elseif zamiast ifów. Pierwszy ma być if, a potem wszędzie elseif. Udostępnij ten post Link to postu Udostępnij na innych stronach
SaVaGe123 21 Zgłoś post Napisano Grudzień 20, 2011 Dając elseif wywala mi błąd składni, już próbowałem Oto kod : <?php if(!empty($_POST['kod'])){ $_POST['kod'] = mysql_real_escape_string($_POST['kod']); $msg = ""; mysql_query("update kody_2zl set status = 1, data = now(), gracz = '.$login.' where kod = '".$_POST['kod']."' and status = 0"); elseif(mysql_affected_rows() == 1){ mysql_query("update users set waluta = waluta + 2 where login = '$login'"); $row->waluta += 2; $msg = "<p class='true'>Dodano 2 złote</p>"; } mysql_query("update kody_3zl set status = 1, data = now(), gracz = '.$login.' where kod = '".$_POST['kod']."' and status = 0"); elseif(mysql_affected_rows() == 1){ mysql_query("update users set waluta = waluta + 3 where login = '$login'"); $row->waluta += 3; $msg = "<p class='true'>Dodano 3 złote</p>"; } mysql_query("update kody_6zl set status = 1, data = now(), gracz = '.$login.' where kod = '".$_POST['kod']."' and status = 0"); elseif(mysql_affected_rows() == 1){ mysql_query("update users set waluta = waluta + 6 where login = '$login'"); $row->waluta += 6; $msg = "<p class='true'>Dodano 6 złotych</p>"; } mysql_query("update kody_9zl set status = 1, data = now(), gracz = '.$login.' where kod = '".$_POST['kod']."' and status = 0"); elseif(mysql_affected_rows() == 1){ mysql_query("update users set waluta = waluta + 9 where login = '$login'"); $row->waluta += 9; $msg = "<p class='true'>Dodano 9 złotych</p>"; } else $msg = "<p class='error'>Niepoprawny kod</p>"; echo $msg."<br><br><br>";} ?> i Wywala : Parse error: syntax error, unexpected T_ELSEIF in C:\xampp\htdocs\dot.php on line 557 Udostępnij ten post Link to postu Udostępnij na innych stronach
kafi 2425 Zgłoś post Napisano Grudzień 20, 2011 else [spacja] if a nie elseif Udostępnij ten post Link to postu Udostępnij na innych stronach
SaVaGe123 21 Zgłoś post Napisano Grudzień 20, 2011 kafi "else if" i "elseif" to zaznacze "chyba" to samo Jak się uczyłem gdzie nie było to tylko elseif dlatego tak pisałem Udostępnij ten post Link to postu Udostępnij na innych stronach
regdos 1848 Zgłoś post Napisano Grudzień 20, 2011 To nie jest problemem, problemem są źle zamknięte }. Po } a przed elseif jest dodatkowy wiersz. Autorowi brak podstawowych umiejętności programowania a dokładnie podstaw składni i działania instrukcji warunkowej if. Udostępnij ten post Link to postu Udostępnij na innych stronach
Misiek08 285 Zgłoś post Napisano Grudzień 20, 2011 Pierwszy if z kodami miał zostać. <?php if(!empty($_POST['kod'])){ $_POST['kod'] = mysql_real_escape_string($_POST['kod']); $msg = ""; mysql_query("update kody_2zl set status = 1, data = now(), gracz = '.$login.' where kod = '".$_POST['kod']."' and status = 0"); if(mysql_affected_rows() == 1){ mysql_query("update users set waluta = waluta + 2 where login = '$login'"); $row->waluta += 2; $msg = "<p class='true'>Dodano 2 złote</p>"; } mysql_query("update kody_3zl set status = 1, data = now(), gracz = '.$login.' where kod = '".$_POST['kod']."' and status = 0"); elseif(mysql_affected_rows() == 1){ mysql_query("update users set waluta = waluta + 3 where login = '$login'"); $row->waluta += 3; $msg = "<p class='true'>Dodano 3 złote</p>"; } mysql_query("update kody_6zl set status = 1, data = now(), gracz = '.$login.' where kod = '".$_POST['kod']."' and status = 0"); elseif(mysql_affected_rows() == 1){ mysql_query("update users set waluta = waluta + 6 where login = '$login'"); $row->waluta += 6; $msg = "<p class='true'>Dodano 6 złotych</p>"; } mysql_query("update kody_9zl set status = 1, data = now(), gracz = '.$login.' where kod = '".$_POST['kod']."' and status = 0"); elseif(mysql_affected_rows() == 1){ mysql_query("update users set waluta = waluta + 9 where login = '$login'"); $row->waluta += 9; $msg = "<p class='true'>Dodano 9 złotych</p>"; } } else { $msg = "<p class='error'>Niepoprawny kod</p>"; } echo $msg."<br><br><br>"; ?> Udostępnij ten post Link to postu Udostępnij na innych stronach
SaVaGe123 21 Zgłoś post Napisano Grudzień 20, 2011 (edytowany) Czy ja jestem ślepy czy co ale tu jest wszystko poprawnie pozamykane. Na początku jest dany if ze sprawdzeniem if(!empty($_POST['kod'])) Daje { Potem wywołuje funkcje aby zabezpieczyć dane: $_POST['kod'] = mysql_real_escape_string($_POST['kod']); Strzelam update do bazy i potem leci tak jak radziliście elseif i z mysql_affected_rows jeśli zwróci wartość 1 leci kod i tutaj wstawiam { wykonuje zadanie } jesli nie leci kolejny elseif { wykonuje zadanie } i tak dalej na koniec daje else z waidomoścą i zamykam 1 if-a } Więc co nie jest tak redgos ? Dopiero zaczynam, ten skrypt JEST mojego autorstwa może nie przyszło mi napisanie go z taką łatwością jak tobie ale nie wyciągaj pochopnych wniosków. [EDIT] Misiek wiem po prostu wkleiłem kod jak wszystkiego próbowałem i else z wiadomością wywaliłeś poza pierwszego if-a on musi tam siedzieć. A jedynym problemem czemu ten skrypt nie działa jest do że przed elseif update do bazy . Edytowano Grudzień 20, 2011 przez SaVaGe123 (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
kafi 2425 Zgłoś post Napisano Grudzień 20, 2011 Nie możesz stosować konstukcji if(warunek) { cośtam } jakieśblablatrabla elseif(drugiwarunek) { cośtam } Udostępnij ten post Link to postu Udostępnij na innych stronach
Misiek08 285 Zgłoś post Napisano Grudzień 21, 2011 Tzn to co podałem to poprawione if'y, bo nie ma racji bytu to mysql_query miedzy } a elseif. Udostępnij ten post Link to postu Udostępnij na innych stronach
SaVaGe123 21 Zgłoś post Napisano Grudzień 23, 2011 (edytowany) Dobrze o tym wiem ;] Miałem 2 dniową awarię internetu. Książka przyszła biorę się za tą lekturę, a jeśli ktoś ma pomysł co do tego pożal się boże skryptu to pisać !! :] Edytowano Grudzień 23, 2011 przez SaVaGe123 (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach