Skocz do zawartości
Zaloguj się, aby obserwować  
SaVaGe123

Doładowanie

Polecane posty

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

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

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 przez SaVaGe123 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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

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

@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
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 smile.png

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 smile.png

 

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

Dając elseif wywala mi błąd składni, już próbowałem smile.png

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 "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

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

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

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 przez SaVaGe123 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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

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 przez SaVaGe123 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×