Pomoc w wykończeniu skrypty pod diablo mod...
Radeon 05.02.2010
UPRZEDAM! W miejsce X P (doświadczenie) powstawialy się idiotyczne emotikony "", więc proszę je czytać jako experience.
Witam,
jako że nie chciałbym popełnić jakiegoś błędu i zrobić dziury w skrypcie, to potrzebowałbym pomocy przy pisaniu skryptu, który:
Po podaniu steam_id i wyborze klasy (lub podaniu jej numeru), oraz wartości , znajdzie tą postać i doda jej do aktualnego daną wartość .
Całość opierała by sie na dwóch plikach - panel dodawania i drugi w który wykonuje skrypt
Dodawanie panel:
I teraz gorsza sprawa:
Dodawanie skrypt:
Jestem ciekaw czy ktoś tutaj pomoże?
Edited by Radeon, 05.02.2010 23:03.
Witam,
jako że nie chciałbym popełnić jakiegoś błędu i zrobić dziury w skrypcie, to potrzebowałbym pomocy przy pisaniu skryptu, który:
Po podaniu steam_id i wyborze klasy (lub podaniu jej numeru), oraz wartości , znajdzie tą postać i doda jej do aktualnego daną wartość .
Całość opierała by sie na dwóch plikach - panel dodawania i drugi w który wykonuje skrypt
Dodawanie panel:
<center><? echo ' <form action="dodajxp.php" method="post"> SID:<br /> <input type="text" name="sid" value=""><br /> Klasa:<br /> <input type="text" name="klasa" value=""><br /> Exp:<br /> <input type="text" name="exp" value=""><br /> <br /><br /> <input type="submit" value="dodaj" /> </td> </tr> </table></form>'; ?></center>
I teraz gorsza sprawa:
Dodawanie skrypt:
<?php $sid = $_POST['sid']; $klasa = $_POST['klasa']; $exp = $_POST['exp']; if($sid and $klasa and $exp) { //połączenie z bazą $connection = @mysql_connect('localhost', 'login', 'hasło') or die('Brak połączenia z serwerem MySQL'); $db = @mysql_select_db('user_bazy', $connection) or die('Nie pykło'); //Funkcja sprawdzająca czy istnieje takia osoba w razie błędu wywala połączenie ---- NIE WIEM CZY POPRAWNE $ins1 = @mysql_query("SELECT * FROM 'tabela_diablo' WHERE sida='$sid' "); if($ins1) { continue; } else echo "Nie pykło"; mysql_close($connection); } //Funkcja szukająca odpowiedniej klasy ---- NIE WIEM CZY POPRAWNE, proszę o sprawdzenie $ins2 = @mysql_query("SELECT * FROM 'tabela_diablo' WHERE klasa='$klasa' "); //Stawiam na 99% że jest to źle zrobione, najpierw trzeba wybrać wartość exp i potem dodać, ale nie chcę już źle kompilkować, stawiam 1%, że ktoś tu umie PHP i mi pomoże $ins3 = @mysql_query("INSERT INTO tabela_diablo SET exp+'$exp'); if($ins3) echo "Panie! Udało się!"; else echo "I teraz znów Ci nie pykło"; mysql_close($connection); } ?>
Jestem ciekaw czy ktoś tutaj pomoże?
Edited by Radeon, 05.02.2010 23:03.
R3X
05.02.2010
absolutnie źle
ani select ani insert tylko UPDATE i możesz używać obecnej wartości pola, więc będzie coś takiego:
i wszystko z GET musisz zabezpieczyć przed SQL Injection PHP: mysql_real_escape_string - Manual
ani select ani insert tylko UPDATE i możesz używać obecnej wartości pola, więc będzie coś takiego:
UPDATE tabela_diablo SET exp = exp+$exp WHERE sid = '$sid' && klasa = $klasa;
i wszystko z GET musisz zabezpieczyć przed SQL Injection PHP: mysql_real_escape_string - Manual
Radeon 06.02.2010
Dzięki!
Tylko sql injection raczej tutaj nie zastosujesz, gdyż całość będzie dostępna na hasło lub ip ustalone w .htaacces
Czy może wystarczy samo:
Tylko będzie wywalało w drugim błąd mysql w razie braku wpisu z daną klasą lub steam, co brzydko wygląda, ale działać będzie, right?
Tylko sql injection raczej tutaj nie zastosujesz, gdyż całość będzie dostępna na hasło lub ip ustalone w .htaacces
<?php $sid = $_POST['sid']; $klasa = $_POST['klasa']; $exp = $_POST['exp']; if($sid and $klasa and $exp) { //połączenie z bazą $connection = @mysql_connect('localhost', 'login', 'hasło') or die('Brak połączenia z serwerem MySQL'); $db = @mysql_select_db('user_bazy', $connection) or die('Nie pykło'); //Funkcja sprawdzająca czy istnieje takia osoba w razie błędu wywala połączenie $ins1 = @mysql_query("SELECT * FROM 'tabela_diablo' WHERE sida='$sid' "); if($ins1) { continue; } else echo "Nie pykło"; mysql_close($connection); } //Funkcja szukająca odpowiedniej klasy $ins2 = @mysql_query("SELECT * FROM 'tabela_diablo' WHERE klasa='$klasa' "); if($ins2) { continue; } else echo "Tu też nie pykło"; mysql_close($connection); } $ins3 = @mysql_query("UPDATE tabela_diablo SET exp = exp+$exp WHERE sid = '$sid' && klasa = $klasa;'); if($ins3) echo "Panie! Udało się!"; else echo "I teraz znów Ci nie pykło"; mysql_close($connection); } ?>
Czy może wystarczy samo:
<?php $sid = $_POST['sid']; $klasa = $_POST['klasa']; $exp = $_POST['exp']; if($sid and $klasa and $exp) { //połączenie z bazą $connection = @mysql_connect('localhost', 'login', 'hasło') or die('Brak połączenia z serwerem MySQL'); $db = @mysql_select_db('user_bazy', $connection) or die('Nie pykło'); $ins3 = @mysql_query("UPDATE tabela_diablo SET exp = exp+$exp WHERE sid = '$sid' && klasa = $klasa;'); if($ins3) echo "Panie! Udało się!"; else echo "I teraz znów Ci nie pykło"; mysql_close($connection); } ?>
Tylko będzie wywalało w drugim błąd mysql w razie braku wpisu z daną klasą lub steam, co brzydko wygląda, ale działać będzie, right?
R3X
06.02.2010
to drugie wystarczy, dałeś @ więc nie będzie komunikatów; żeby sprawdzić czy znalazło czy nie musisz użyć funkcji PHP: mysql_affected_rows - Manual
Fajniej by było z klasą jako <select> kodu php to nie zmieni, a używać będzie łatwiej
if($ins3){ if(mysql_affected_rows($ins3)) echo "Panie! Udało się!"; else echo "Nie ma takiego SID lub klasy"; }
Fajniej by było z klasą jako <select> kodu php to nie zmieni, a używać będzie łatwiej
<select name="klasa"> <option value="1">Mag</option> <option value="2">Mnich</option> <option value="3">Paladyn</option> <option value="4">Zabojca</option> <option value="5">Nekromanta</option> <option value="6">Barbarzynca</option> <option value="7">Ninja</option> <option value="8">Lowca</option> </select>
Radeon 06.02.2010
EDIT: Wyprzedziłeś mnie z editem kiedy pisałem posta poniżej
Czyli nadal zostaje:
Tylko formularz się zmienia?
--------------
A, żeby interpretowało klasy? Lub menu wysuwane i do wyboru klasy (niestety nie umiem takich tworzyć, więc przejde do interpretacji):
jak wpisze paladyn to ustawi mu cyfre 8
to:
Czy może coś na zasadzie stałych, że jeśli $klasa = paladyn to szukaj klasa 8
Tylko wtedy musiałbym stworzyć aż 8 warunków...
Edited by Radeon, 06.02.2010 00:22.
Czyli nadal zostaje:
$ins3 = @mysql_query("UPDATE tabela_diablo SET exp = exp+$exp WHERE sid = '$sid' && '$klasa' ");
Tylko formularz się zmienia?
--------------
A, żeby interpretowało klasy? Lub menu wysuwane i do wyboru klasy (niestety nie umiem takich tworzyć, więc przejde do interpretacji):
jak wpisze paladyn to ustawi mu cyfre 8
to:
if($klasa)='paladyn' SELECT tabela_diablo WHERE sid = '$sid' && klasa = '8' ;');
Czy może coś na zasadzie stałych, że jeśli $klasa = paladyn to szukaj klasa 8
if($klasa)='paladyn' { $ins3 = @mysql_query("UPDATE tabela_diablo SET exp = exp+$exp WHERE sid = '$sid' && klasa = '8';');
Tylko wtedy musiałbym stworzyć aż 8 warunków...
Edited by Radeon, 06.02.2010 00:22.
R3X
06.02.2010
jak do option dodasz value to w $_POST['klasa'] będzie właśnie value, a nie etykieta ;D
tak, zmieniasz tylko forma
tak, zmieniasz tylko forma
Radeon 14.02.2010
Poprawiłem jeszcze kilka błędów i śmiga jak należy
Tylko pytanko - jakbym chciał pod dotpay zrobić taki skrypt, tzn płatny dostęp do strony, to jak mogę zablokować dostęp do strony bez wcześniejszego podania kodu? Czy to już w dotpay dają taki skrypt?
Głównie chodzi mi tutaj o sesje - gracz ma ustalone na stałe 20k dodania, wybiera tylko klase i podaje SID i jak doda poprawnie to koniec sesji i nie wejdzie.
Aktualnie korzystam z tego jako dodawanie z konkursów dla adminów, zabezpieczone na hasło skryptem java (o dziwo z ustawieniem hasla na .htaccess i .htpsswrd nie dziala..)
Tylko pytanko - jakbym chciał pod dotpay zrobić taki skrypt, tzn płatny dostęp do strony, to jak mogę zablokować dostęp do strony bez wcześniejszego podania kodu? Czy to już w dotpay dają taki skrypt?
Głównie chodzi mi tutaj o sesje - gracz ma ustalone na stałe 20k dodania, wybiera tylko klase i podaje SID i jak doda poprawnie to koniec sesji i nie wejdzie.
Aktualnie korzystam z tego jako dodawanie z konkursów dla adminów, zabezpieczone na hasło skryptem java (o dziwo z ustawieniem hasla na .htaccess i .htpsswrd nie dziala..)