avatar_LeGrand

Награда Legrand Vote за голосование в Файл-модуле - новинкиMUonline.ru

Автор LeGrand, 2009 Сен. 20, 19:49

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] mu onlinelegrand voteфайл-модуль

LeGrand

Собсна вопрос для многих насущный, решил выложить свою систему вознаграждения за голосование ;)
Файл-модуль. Вставляется в папку для модулей
<?
$result = mssql_query("SELECT TOP 50 * from vote_system_links");
$count = mssql_num_rows($result);
for($i=0;$i < $count;++$i)
{
$id = $id+1;
$go_select = mssql_query("SELECT link,img_src from vote_system_links where id='$id'");
$go_select = mssql_fetch_row($go_select);?>
<p align="center"><a href="away.php?id=<?print $id;?>" target="_blank"><img border="0" src="<?print $go_select[1];?>"></a></p>
<?  }
?>
Главный файл, обработка/проверка/выдача призов
Копировать в корневую директорию сайта. Назвать away.php
<?
/********************************************************************************
Настройки системы голосования!
********************************************************************************/
$vote_reward_type = '0'; //0-награда кредиты/акры...(MEMB_CREDITS таблица), 1-зенки в сундук
$vote_reward = '3'; //Скоко вознаграждение?
$vote_time_wait_for = '24'; //Через сколько часов возможно повторное голосование?
$user='sa'; //Логин от БД
$pass='mypass';//Пасс от БД
$database='MuOnline';//Имя БД
$host='127.0.0.1';
/********************************************************************************
Подключаемся к базе
********************************************************************************/
$sql['connect'] = mssql_connect($host, $user, $pass);
$sql['db_change'] = mssql_select_db($database);
$sql['connect'] or die("Cannot connect Database");
$sql['db_change'] or die("Cannot select Database");

/********************************************************************************
Ниже идет кодес, написанный мною tag-egor.
Разрешаю модификацию и изменение исходного кода
Не забывайте о копирайтах ;)
Дата релиза - 20.09.09
Форум: [url=https://Forum.x-mu.net]https://Forum.x-mu.net[/url]

********************************************************************************/


$LeException = new LeException;//инициализация класса

/*******************************************************************************
Функция проверяет (на низшем уровне) попытки внедрения в базу произвольного кода
*******************************************************************************/
function low_level_check($value_checking)
{

$value_checking = strtolower($value_checking);
$value_checking = str_replace("'","",$value_checking);
$value_checking = str_replace(";","",$value_checking);
$value_checking = str_replace("update","",$value_checking);
$value_checking = str_replace("drop","",$value_checking);
$value_checking = str_replace("insert","",$value_checking);
$value_checking = str_replace("delete","",$value_checking);
$value_checking = str_replace("muonline","",$value_checking);

if(eregi("[^a-zA-Z0-9_-]", $value_checking))
{


$LeException = new LeException;
$LeException->throw_error(1,TRUE);
}
}
/*******************************************************************************
Модифицированная функция запроса к бд. Имеет счетчик запросов.
Для подсчета запросов делайте print $SQL_counter;
*******************************************************************************/
function legrand_query($query)
{
global $SQL_counter;
$SQL_counter=$SQL_counter+1;
$result=mssql_query($query);
return $result;
}

function check_inject($value_check)
{

$LeException = new LeException;

$value_check=strtolower($value_check);
$badchars = array("drop", "delete","shutdown");
if(in_array($value_check, $badchars))
{

$LeException->throw_error(2,TRUE);
}
else
{
$check = preg_split("//", $value_check, -1, PREG_SPLIT_OFFSET_CAPTURE);
foreach($check as $char)
{
if(in_array($char, $badchars))
{
$LeException->throw_error(2,TRUE);
}
}
}

return $value_check;
}


/*******************************************************************************
Функция из MuWeb. Чистит строку
*******************************************************************************/
function clean_variable($var)
{
$newvar = preg_replace('/[^a-zA-Z0-9_-]/', '', $var);
return $newvar;
}

/*******************************************************************************
Проверка кукисов, постов, гетов...
*******************************************************************************/
function check_data_transfers($value)
{
$LeException = new LeException;


$badchars = array(";","'","*","/","  ","DROP", "SELECT", "UPDATE", "DELETE", "drop", "select", "update", "delete", "WHERE", "where", "-1", "-2", "-3","-4", "-5", "-6", "-7", "-8", "-9",);

$value = strtolower($value);
$value = clean_variable($value);
if(in_array($value, $badchars))
{
$LeException->throw_error(1,TRUE);
}
else
{
$check = preg_split("//", $value, -1, PREG_SPLIT_OFFSET_CAPTURE);
foreach($check as $char)
{
if(in_array($char, $badchars))
{
$LeException->throw_error(2,TRUE);
}
}
}


}



/*******************************************************************************
Класс критической ошибки
*******************************************************************************/
class LeException {

function throw_error($erlevel,$log)
{
switch($erlevel)
{
case 1: $color='DBFFFF'; $why='Попытка SQL-inject, используйте только [a-z, A-Z, 0-9]'; break;
case 2: $color='D02F2B'; $why='URL-запрос содержит недопустимые символы'; break;
case 3: $color='FF0000'; $why='Неверная форма запроса к БД'; break;
case 4: $color='FF0000'; $why='Неверные данные о сессии, повторите ваш вход'; break;
}



echo "<div align="center">
<table border="0" width="70%" cellspacing="1" cellpadding="6">
<tr>
<td bgcolor="$color">
<p align="center"><font color="#FF0000">Критическая ошибка</font>
</td>
</tr>
<tr>
<td bgcolor="#522927">
<table border="0" width="100%" bgcolor="#000000" height="145">
<tr>
<td>
<p align="center"><font color="#FF0000">$why</font>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>"; Die();
}


}


$reward = $vote_reward;
function go_add_cred($login,$id,$reward,$vote_time_to_wait)
{
$user_ip=getenv("REMOTE_ADDR");
$take_time = time();
$next_vote = $vote_time_to_wait*3600 + $take_time;
$find_rows = legrand_query("SELECT count(time_next) FROM vote_system_ip_vote_time where ip='$user_ip' and login='$login' and vote_id='$id'");
$rows= mssql_result($find_rows,0,0);
if($rows > '0')
{
$set_next_vote = legrand_query("UPDATE vote_system_ip_vote_time set time_next='$next_vote' where ip='$user_ip' and login='$login' and vote_id='$id'");
$give_reward = legrand_query("UPDATE MEMB_CREDITS set credits = credits + '$reward' where memb___id='$login'");
$check_null=legrand_query("SELECT vip_pts from MEMB_CREDITS where memb___id='$login'");
$verify=mssql_fetch_row($check_null);
$verify=$verify[0];
if($verify==NULL)
{
$add_in_mcred=legrand_query("UPDATE MEMB_CREDITS set vip_pts=1 where memb___id='$login'");
}
$add_in_mcred=legrand_query("UPDATE MEMB_CREDITS set vip_pts=vip_pts + 1 where memb___id='$login'");
}
Else
{
$add_in_mcred=legrand_query("UPDATE MEMB_CREDITS set vip_pts=50 where memb___id='$text'");
$go_add_new_line = legrand_query("INSERT Into vote_system_ip_vote_time VALUES ('$user_ip','$next_vote','$id','$login')");
$give_reward = legrand_query("UPDATE MEMB_CREDITS set credits = credits + '$reward' where memb___id='$login'");
$check_null=legrand_query("SELECT vip_pts from MEMB_CREDITS where memb___id='$login'");
$verify=mssql_fetch_row($check_null);
$verify=$verify[0];
if($verify==NULL)
{
$add_in_mcred=legrand_query("UPDATE MEMB_CREDITS set vip_pts=1 where memb___id='$login'");
}
$add_in_mcred=legrand_query("UPDATE MEMB_CREDITS set vip_pts=vip_pts + 1 where memb___id='$login'");
}

}

function go_add_zen($login,$id,$reward,$vote_time_to_wait)
{
$user_ip=getenv("REMOTE_ADDR");
$take_time = time();
$next_vote = $vote_time_to_wait*3600 + $take_time;
$find_rows = legrand_query("SELECT count(time_next) FROM vote_system_ip_vote_time where ip='$user_ip' and login='$login' and vote_id='$id'");
$rows= mssql_result($find_rows,0,0);
if($rows > '0')
{
$set_next_vote = legrand_query("UPDATE vote_system_ip_vote_time set time_next='$next_vote' where ip='$user_ip' and login='$login' and vote_id='$id'");
$give_reward = legrand_query("UPDATE warehouse set Money = Money + '$reward' where accountid='$login'");
}
Else{
$go_add_new_line = legrand_query("INSERT Into vote_system_ip_vote_time VALUES ('$user_ip','$next_vote','$id','$login')");
$give_reward = legrand_query("UPDATE Warehouse set money = money + '$reward' where accountid='$login'");}}


function reward_user($id,$reward,$vote_reward_type,$vote_time_to_wait)
{
$user_ip=getenv("REMOTE_ADDR");
$reward_type = $vote['reward_type'];
$login = $_COOKIE["username"];
$start_check = legrand_query("SELECT time_next from vote_system_ip_vote_time where ip='$user_ip' and login='$login' and vote_id='$id'");
$find_rows = legrand_query("SELECT count(time_next) FROM vote_system_ip_vote_time where ip='$user_ip' and login='$login' and vote_id='$id'");
$rows= mssql_result($find_rows,0,0);
if($rows < '0')
{
if($vote_reward_type=='0')
{
$go_reward_user = go_add_cred($login,$id,$reward,$vote_time_to_wait);
}
if($vote_reward_type=='1')
{
$go_reward_user = go_add_zen($login,$id,$reward,$vote_time_to_wait);
}
}
//Ниже идет код, на разработку которого ушло немало нервов xD
$time = mssql_fetch_row($start_check);
$time = $time[0];
$get_time = time();
$time_to_wait = $time - $get_time;
$minutes = $time_to_wait/60;
$munutes = explode(".",$minutes);
$hours = $time_to_wait/3600;
$hours = explode(".",$hours);
$sec_sum = $munutes[0] * $hours[0];
$sec = $time_to_wait - $sec_sum;
$sec = explode(".",$sec);
$minutes_new = $munutes[0]-$hours[0]*60;
if($time > $get_time)
{
Exit("Вы должны подождать $hours[0] часов и $minutes_new минут для того, чтобы вновь проголосовать по данной ссылке");
}
if($vote_reward_type=='0')
{
$go_reward_user=go_add_cred($login,$id,$reward,$vote_time_to_wait);
}
if($vote_reward_type=='1')
{
$go_reward_user=go_add_zen($login,$id,$reward,$vote_time_to_wait);
}
}


$id = $_GET['id'];
$check_id = low_level_check($id);

Switch($id)
{
case 01: $id=1; break;
case 02: $id=2; break;
case 03: $id=3; break;
case 04: $id=4; break;
case 05: $id=5; break;
case 06: $id=6; break;
case 07: $id=7; break;
case 08: $id=8; break;
case 09: $id=9; break;
}


$go_check_value = legrand_query("SELECT id from vote_system_links where id='$id'");
$go_check_value = mssql_num_rows($go_check_value);
if($go_check_value <= 0)
{
Die("Нет такой ссылки ;)");
}


if(!isset($_GET['id']))
{
header("Location: index.php");
}


$link = legrand_query("SELECT link from vote_system_links where id='$id'");
$link = mssql_fetch_row($link);

$reward = $vote_reward;
$vote_type = $vote_reward_type;
$vote_time_to_wait = $vote_time_wait_for;
$go_reward = reward_user($id,$reward,$vote_type,$vote_time_to_wait);
header("Location: $link[0]");
?>
Установка:
Query editor ->
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[vote_system_ip_vote_time](
[ip] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[time_next] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[vote_id] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[login] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL
)

CREATE TABLE [dbo].[MEMB_CREDITS](
[memb___id] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[credits] [int] NULL,
[vip_pts] [int] NULL
)

CREATE TABLE [dbo].[vote_system_links](
[link] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[img_src] [nvarchar](500) COLLATE Chinese_PRC_CI_AS NULL,
[id] [int] NULL
) ON [PRIMARY]
Добавление новой ссылки для голосования:
Цитировать1. Открываем базу
2. Открываем таблицу vote_system_links
3. В первое поле вписываем адресс голосования
4. Во второе поле вписываем адресс картинки топа
5. В третье поле вписываем едентификатор голосования(число)
Наслаждаемся системой ;)

Deathless

Только надо заменить vip_pts на Credits, а то не у всех есть такие.

LeGrand

Добавил скрипт для новой таблицы memb_credits
Система очень сложная и у меня в пяти файлах
Пришлось добавлять функции в один файл

DeSSower

а для WOW'a сможеш сделатЬ ?  

Deathless

Почему-то не хочет в базу записывать login...
Уже пробовал заменить $_COOKIE на $_SESSION, всё равно не записывает.

LeGrand

$login = $_COOKIE["username"];Замени на $login = $_COOKIE["имя твоей куки..."];
Или если у тебя сессии $login = $_SESSION["имя сессии"];

Deathless

Решил проверить, и изменил код away.php так:
<?php if ($_SESSION['имя сессии'] == true) { ?>
...away.php...
<?php } else { echo "You are not logged"; } ?>
В итоге получается, что при нажатии на ТОП, открывается страница где написано: You are not logged.
Значит при переходе он думает что это другая сессия?

Zеvs

Цитата: Demka от 2009 Сен. 21, 13:42  Решил проверить, и изменил код away.php так:
<?php if ($_SESSION['имя сессии'] == true) { ?>
...away.php...
<?php } else { echo "You are not logged"; } ?>
В итоге получается, что при нажатии на ТОП, открывается страница где написано: You are not logged.
Значит при переходе он думает что это другая сессия?
<?php if(isset($_SESSION['s_name'])){ ?>
скрипт
<?php } else { echo "You are not logged"; } ?>

worldhero

Скрипт прикольный, весь проштудировал не поленился
желательно в нем - перенести все на сессии раз, так как у многих кукисы офф, сверять по IP or Account (внося в базу все акк которые будут созданы после голосования или же до голосования с этого IP и сесии в список игнора "пускай это и минус клубам но зато как не как защита").
давать награду в течении 1-2 часа (сверяя время прибывания на сервере, после голосования) - чтобы не делали клонов.
убрать в обще глобальные переменные - они тут даром ненужны. (метод гета передачи) объевлять в ручну. и проверять на символы и т.п.
а так скрипт очень даже хорошь
переделывать не буду, пускай создатель этим занимается - спс. оставил.

LeGrand

Эм... Одна глобальная переменная...
Она выполняет роль счетчика )

Скрипт нуждается в доработке "под себя"
Как я уже заявил, что делал его для себя, и не задумывался о расширении(в плане переноса работоспособности на другие сервера

Deathless

Цитата: LeGrand от 2009 Сен. 21, 14:44  Эм... Одна глобальная переменная...
Она выполняет роль счетчика )

Скрипт нуждается в доработке "под себя"
Как я уже заявил, что делал его для себя, и не задумывался о расширении(в плане переноса работоспособности на другие сервера ;)
Ну ладно, не велика потеря.

7664603

важно
<?
$result = mssql_query("SELECT TOP 50 * from vote_system_links");
$count = mssql_num_rows($result);
for($i=0;$i < $count;++$i)
{
$id = $id+1;
$go_select = mssql_query("SELECT link,img_src from vote_system_links where id='$id'");
$go_select = mssql_fetch_row($go_select);?>
<p align="center"><a href="away.php?id=<?print $id;?>" target="_blank"><img border="0" src="<?print $go_select[1];?>"></a></p>

ekvat

O4en prowu vas dajte gotovoe vop6e nevezaju kak i wto delatj

pocan4ik123

a ktota mozit mne pomo4 ivo uzstonovit????

Deathless

А вы оба типо читать не умеете???
Там всё написано: что и как!

Мой вам совет: не умеете - не суйтесь (а то нубо-админов хватает)

ekvat

Tam neponjatno napisano  kakojto fail modulj wto eto vop6e plizz pomogite !

Deathless

Цитата: newlv от 2009 Сен. 28, 10:08  Tam neponjatno napisano :( kakojto fail modulj wto eto vop6e plizz pomogite !
СПЕЦИАЛЬНО ДЛЯ ОДАРЁННЫХ:


Цитата: LeGrand от 2009 Сен. 20, 15:49  Файл-модуль. Вставляется в папку для модулей
Создай любой файл (напр.: vote.php) и положи его в папку с модулями (напр.: DSW - sub-pages)

Цитата: LeGrand от 2009 Сен. 20, 15:49  Главный файл, обработка/проверка/выдача призов
Копировать в корневую директорию сайта. Назвать away.php
Я надеюсь этот текст скопировать в созданный файл away.php и положить его в главную папку сайта ты сможешь.

Цитата: LeGrand от 2009 Сен. 20, 15:49  Установка:
Query editor
Надеюсь ты знаешь что такое Query Anlyzer (Start->Programms->MSSQL Server->Query Analyzer)

Цитата: LeGrand от 2009 Сен. 20, 15:49  Добавление новой ссылки для голосования:
В базе найдёшь созданную таблицу и заполнишь её.

ekvat

#17
Blin po4ti vso polu4ilos tolko neponemaju C:xampphtdocs tuda ja zakinul away.php i skript v papke htdocssub-pages tuda zakinul vote.php i script... potom v Query Analyzer zalil sledujuwee vso ok sozdalasj odna baza vote_system_ip_time , MEMB_CREDITS uze bil vmeste s webshopom eto daze nenado bilo zalevatj JA NENAWOL ETO v baze MuOnline vote_system_links mm ??? ili nado otdelnuju bazu ot MuOnine sozdovatj esli tak to s kakim nazvaniem i esli vso polu4ilos kak zajti proveritj rabotaet ili net ? https://127.0.0.1/...... ?

Vot zaxozu https://127.0.0.1/away.php

Warning: mssql_query() [function.mssql-query]: message: Invalid object name 'vote_system_links'. (severity 16) in C:xampphtdocsaway.php on line 63

Warning: mssql_query() [function.mssql-query]: Query failed in C:xampphtdocsaway.php on line 63

Warning: mssql_num_rows(): supplied argument is not a valid MS SQL-result resource in C:xampphtdocsaway.php on line 300
Нет такой ссылки

Deathless

away.php только для проверки ссылки.
Тебе надо перейти по этому адресу:
https://127.0.0.1/?pg=vote

ekvat

#19
1) 5. В третье поле вписываем едентификатор голосования(число) <--- wto sjuda vpisivatj imenno !

2) I teperj vrodebi i zdelal poevilis topi zaxozu na nix golosuju KREDITI NEDOBOVLAJUTSJA !! po4emu ?

3) Kak zdelatj wtob golosovatj mozno bilo tolko posle togo kak zaloginiewsja na webe... wto i kuda vpisivatj ?

Похожие темы (5)

Сообщений: 32
Просмотров: 16114

Автор NoBoDy


Сообщений: 11
Просмотров: 16624