• logo_cipsoft
    Nowe serwery zostały otwarte 19 Lut 2025:
    Noctalia (Open PvP) Ignitera (Open PvP) us_logo Xybra (Open PvP)

Polecanie graczy

Status
Zamknięty.

Sasuki

Banned
Dołączył
Marzec 12, 2009
Posty
196
Liczba reakcji
12
Skrypt zosta? zabezpieczony przed atakami sql injection dzi?ki pomocy Kowol'a.

Do Modelatora!
Je?eli jest taka mo?liwo?? to prosi? bym o zmian? tematu na:
[G?sior Acc] Polecanie graczy​



Witam wszystkich.
Skrypt zosta? stworzony na potrzeby , ale pomy?la?em ?e mog? go tutaj wrzuci?.
To m?j pierwszy wi?kszy skrypt w php wi?c mile widziane s? rady, co mo?na by?o zrobi? lepiej.
Jak on dzia?a?
Posiadaj?c konto masz sw?j link. je?eli kto? wejdzie na ten link, zarejestruje si? i wy?le smsa to ty dostaniesz 100 punkt?w premium ;] Proste
Podobne systemy cz?sto wyst?puj? w grach przez przegl?dark? typu jakie? plemiona itd.
Screen:
scaled.php

Na pocz?tku tworzymy nowe pole w accounts w naszej bazie danych
Kod:
ALTER TABLE `accounts` ADD `polecany` INT( 11 ) NOT NULL AFTER `premium_points`
Nast?pnie wchodzimy w index.php i za:
PHP:
session_start();
ob_start("ob_gzhandler");
wklejamy:
PHP:
$polecany = (int) $_GET['polecany'];
if(!isset($_COOKIE['wizyta']))
     {
     setcookie('wizyta', $polecany);
     }
oraz za:
PHP:
case "accountmanagement";
        $topic = "Account Management";
        $subtopic = "accountmanagement";
        include("accountmanagement.php");
    break;
Wklejamy:
PHP:
case "polecani";
		$topic = "Polec Graczy";
		$subtopic = "polecani";
		include("polecani.php");
	break;
Nast?pnie wchodzimy w creatteaccount.php, szukamy:
PHP:
if($action == "saveaccount") {
    $reg_name = strtoupper(trim($_POST['reg_name']));
    $reg_email = trim($_POST['reg_email']);
    $reg_password = trim($_POST['reg_password']);
    $reg_code = trim($_POST['reg_code']);
i pod tym wstawiamy:
PHP:
$polecany = trim($_COOKIE['wizyta']);
nast?pnie szukamy:
PHP:
$reg_account->setCustomField("premdays", $config['site']['newaccount_premdays']);
            $reg_account->setCustomField("lastday", time());
i wklejamy pod tym:
PHP:
$reg_account->setCustomField("polecany", $polecany);
Co do createaccount.php to juz wszystko.
Nast?pnie wchodzimy w buypoints.php
i za tym:
PHP:
if($code_info[0] == 0)
                $errors[] = 'Podany kod z SMSa/przelewu jest niepoprawny lub wybrano zla opcje SMSa/przelewu.';
            else
            {
                if(add_points($account, $config['dotpay'][$sms_type]['addpoints']))
                {
Wklejamy to:
PHP:
$last = $SQL->query("SELECT `polecany` FROM `accounts` where `id`=".$account." ;");
foreach($last as $lastj) {
$last1 = $SQL->query("SELECT `premium_points` FROM `accounts` where `id`=".urlencode($lastj['polecany'])." ;");
foreach($last1 as $lastj1) {
$pkt=urlencode($lastj1['premium_points'])+$config['site']['pktplus'];
$SQL->query("UPDATE accounts SET premium_points='".$pkt."' WHERE id='".urlencode($lastj['polecany'])."' LIMIT 1;");
}}

Otwieramy sobie plik /config/config.php i wklejamy gdzie? na ko?cu:
PHP:
$config['site']['pktplus'] = 100; //ile punktow ma dodawac za polecenie gracza



Nast?pnie tworzymy sobie plik
polecani.php
i wklejamy do niego:
PHP:
   <?PHP
 
if (!$logged)
      Header('Location: ?subtopic=accountmanagement');  
 
 $main_content .= '<b>Za kazdego wyslanego smsa przez gracza ktorego poleciles dostaniesz '.$config['site']['pktplus'].' punktow do sms shopu.</b><br>';
 
 
 
$main_content .= 'Pod tym linkiem mozesz nas polecic nowym graczom: <br><form><input type="text" size="70" name="nazwa" value="http://zgn.sytes.net/?polecany='.$account_logged->getId().'" /></form><br>';
            
$main_content .= '<div align=center><h3>Poleceni gracze:</h3></div><br>';
$account_id = $SQL->query("SELECT id FROM accounts WHERE polecany = ".$account_logged->getId()."")->fetchAll();
    if ($account_id){
        $main_content .= '<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=1 WIDTH=100%></TABLE><TABLE BORDER=0 CELLPADDING=4 CELLSPACING=1 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD WIDTH=20% CLASS=whites><B><center>Nick</center></B></TD><TD WIDTH=15% CLASS=whites><B><center>Level</center></B></TD><TD WIDTH=25% CLASS=whites><b><center>Profesja</center></B></TD>';
        $counter = 0;
        foreach($account_id as $acc_id){
            $acc_idd = $acc_id['id'];
            $players = $SQL->query("SELECT id, name, level, group_id, promotion, vocation FROM players WHERE account_id = ".$acc_idd."")->fetchAll();
            foreach($players as $player){
            $counter++;
            if(is_int($counter / 2))
                $bgcolor = $config['site']['darkborder'];
            else
                $bgcolor = $config['site']['lightborder'];
            if ($player){
                $player_group = $player['group_id'];
                $player_name = $player['name'];
                $player_level = $player['level'];
                $player_id = $player['id'];
                $player_pro = $player['promotion'];
                $player_voc = $vocation_name[0][$player_pro][$player['vocation']];
                if ($player_id > 6){
                    $main_content .= '<tr bgcolor="'.$bgcolor.'"><td><a href="?subtopic=characters&name='.$player_name.'"><center>'.$player_name.'</center></a></td><td><center>'.$player_level.'</center></td><td><center>'.$player_voc.'</center></td>';
                }
            }
            }
        }
        $main_content .= '</table>';
    }
    else{
        $main_content .= 'W tej chwili nie poleciles jeszcze zadnego gracza.';
    }
    $last1 = $SQL->query("SELECT `premium_points` FROM `accounts` where `id`=".$account_logged->getId()." ;");
foreach($last1 as $lastj1) {
$main_content .='<br><center><h2>Twoje Punkty: '.urlencode($lastj1['premium_points']).'</h2></center><br><br>';
    
}


$main_content .= '<p align = "right"><small>System created by <a href="http://pokemon-ots.zapto.org"><img src="http://img513.imageshack.us/img513/4161/bannerek.gif"></a>.<br>
Do pobrania z <a href="http://tibia.net.pl/php/433604-polecanie-graczy.html">tibia.net.pl</a>


</small></p>';
?>
I ostatnia rzecz to dodanie linku do layoutu, ale to ju? ka?dy w swoim zakresie niech doda.
ZABRANIAM USUWANIA STOPKI ZE SKRYPTU!!!
Prosz? o ocen? skryptu.

Troszk? przerobi?em skrypt ;] Jest on lepszy do edycji ;]
Skrypt zosta? zabezpieczony przed atakami sql injection. ;]
 
Odp: Polecanie graczy

Albo mi cos nie dziala albo niewiem po wpisaniu tego do buypoints jest blad strony
 
Ostatnia edycja:
Odp: Polecanie graczy

Ok ju? jest dobrze, bo tam by?a liter?wka.
Zabrak?o }} na ko?cu.

PHP:
foreach($last as $lastj) {
$last1 = $SQL->query("SELECT `premium_points` FROM `accounts` where `id`=".urlencode($lastj['polecany'])." ;");
foreach($last1 as $lastj1) {
$pkt=urlencode($lastj1['premium_points'])+100;
$SQL->query("UPDATE accounts SET premium_points='".$pkt."' WHERE id='".urlencode($lastj['polecany'])."' LIMIT 1;");
}}
 
Ostatnia edycja:
Odp: Polecanie graczy

Niez?y pomys?, mam nadzieje, ?e to twoje. :) Z pewno?ci? pojawi si? ten system na moim ots'ie. Ocena to 10/10.
 
Odp: Polecanie graczy

Wiesz co fajniej by bylo jezeli by przy zakladaniu konta wpisywalo nick poleconego on by sie nam tam dalej pokazywal i dawal te pkt za sms poniewaz nie kazdy chce wejsc w dzisiejszych czasach w czyjs link bo moze to byc hak itp

@edit Jadnak cos nie dziala zrobilem sobie poleconego kupil smsa a mi pkt nie dodalo ;/
 
Ostatnia edycja:
Odp: Polecanie graczy

A na pisze jego nick?? tak jak to jest na obrazku na g?rze??
 
Ostatnia edycja:
Odp: Polecanie graczy

Znaczy wiesz co wczesniej pisal gdy ktos zrobil ale i tak nie dawalo pkt a teraz cos mi nie pokazuje wogole nicku jak ktos zrobi cos mi sie popsulo


@edit juz wiem czemu mi nie zapisywalo wbilem na gma a tam mam wszystkie polecone ktore bralem nawet z innych kont lols ;d
 
Ostatnia edycja:
Odp: Polecanie graczy

U mnie dzia?a perfekcyjnie. Hmm mo?e spr?buj jeszcze raz wszystko zrobi?. Z tymi informacjami ci??ko mi co? powiedzie?. Prosz? aby kto? jeszcze przetestowa? skrypt i powiedzia? jak to u niego wygl?da.
 
Odp: Polecanie graczy

Znaczy jest tak po 1 nie dodaje mi pkt po 2 wszystkie stworzone postacie dodaja mi sie do 1 konta jako poleconego nawet jak nie stworze z tego linku dziwne
 
Odp: Polecanie graczy

Bo ju? raz klikn??e? i to teraz sobie w ciasteczku siedzi ;]
 
Odp: Polecanie graczy

Wszystko dziala problem rozwiazany przepatrzylem skrypt jeszcze raz i brakowalo mi w buypoints poprostu 2 linijek musialem zle skopiowac.
 
Odp: Polecanie graczy

Nie sprawdzasz, czy osoba jest zalogowana, co skutkuje wy?wietleniem b??du:
Kod:
Fatal error: Call to a member function getId() on a non-object in C:\ots\xampp\htdocs\polecani.php on line 9
Skrypt jest podatny na atak sql injection, wi?c nie radz? go u?ywa?.
 
Ostatnia edycja:
Odp: Polecanie graczy

A jak go zabezpieczy??? Tak jak napisa?em, jestem laikiem w php
 
Odp: Polecanie graczy

A kto? m?g? by mi powiedzie? w kt?rym miejscu skrypt jest podatny na ataki bo za bardzo si? na tym nie znam. ;/
 
Odp: Polecanie graczy

Sprawdzaj poprawno?? ci?gu znaku wpisanego w zmienn? polecany. Powinna ona sk?ada? si? tylko z numerk?w, wi?c generalnie wystarczy zrobi? tak? operacje:
PHP:
$id = (int) $_GET['polecany'];
Od teraz zmienna $id zawiera tylko liczby ca?kowite, je?eli wpiszemy tam co? innego, to zmienna = NULL.

Btw. dodaj na pocz?tku skryptu dyrektyw?
PHP:
if (!$logged)
      Header('Location: ?subtopic=accountmanagement');
 
Ostatnia edycja:
Odp: Polecanie graczy

Kowol czy moglbys pokazac jak powinien wygladac skrypt zabezpieczony?

z g?ry thx.
 
Odp: Polecanie graczy

Dzi?ki bardzo! ;] Ju? wszystko powinno by? ok!
 
Ostatnia edycja:
Status
Zamknięty.
Do góry