Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Pomoc w wykończeniu skrypty pod diablo moda!3/4 skryptu załączone


  • Zamknięty Temat jest zamknięty
6 odpowiedzi w tym temacie

#1 Radeon

    Profesjonalista

  • Zbanowany

Reputacja: 9
Nowy

  • Postów:166
  • Lokalizacja:US?
Offline

Napisano 05.02.2010 23:02

UPRZEDAM! W miejsce X P (doświadczenie) powstawialy się idiotyczne emotikony "xP", 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 xP, znajdzie tą postać i doda jej do aktualnego xP daną wartość xP.

Całość opierała by sie na dwóch plikach - panel dodawania i drugi w który wykonuje skrypt :)

Dodawanie xP 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 xP 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?

Użytkownik Radeon edytował ten post 05.02.2010 23:03


#2 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 05.02.2010 23:41

absolutnie źle xD

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
  • +
  • -
  • 1

#3 Radeon

    Profesjonalista

  • Autor tematu
  • Zbanowany

Reputacja: 9
Nowy

  • Postów:166
  • Lokalizacja:US?
Offline

Napisano 06.02.2010 00:04

Dzięki!

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? :)

#4 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 06.02.2010 00:07

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

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>

  • +
  • -
  • 0

#5 Radeon

    Profesjonalista

  • Autor tematu
  • Zbanowany

Reputacja: 9
Nowy

  • Postów:166
  • Lokalizacja:US?
Offline

Napisano 06.02.2010 00:20

EDIT: Wyprzedziłeś mnie z editem kiedy pisałem posta poniżej :D

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

Użytkownik Radeon edytował ten post 06.02.2010 00:22


#6 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 06.02.2010 00:22

jak do option dodasz value to w $_POST['klasa'] będzie właśnie value, a nie etykieta ;D

tak, zmieniasz tylko forma
  • +
  • -
  • 1

#7 Radeon

    Profesjonalista

  • Autor tematu
  • Zbanowany

Reputacja: 9
Nowy

  • Postów:166
  • Lokalizacja:US?
Offline

Napisano 14.02.2010 21:55

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 xP z konkursów dla adminów, zabezpieczone na hasło skryptem java (o dziwo z ustawieniem hasla na .htaccess i .htpsswrd nie dziala..)




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych