avatar_knyazev

Нужна помощь, парсер голосов, проверка статуса аккаунта

Автор knyazev, 2014 Нояб. 20, 17:19

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

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

Ключевые слова [SEO] mu onlineсерверные файлы MUпомощьmmotopпарсер голосовпроверка статуса аккаунта

knyazev

Пишу парсер голосов рейтинга mmotop, всё работает прекрасно. Данные заносятся в бд, поощрение поступает, но необходимо, чтобы поощрение давалось только в том случае, если аккаунт оффлайн, если онлайн, пропускаем.

Сделал я это примерно так:
// Запрос ))
$CheckChar = mssql_num_rows(mssql_query("SELECT AccountID, Name FROM Character WHERE Name = '$VoteChar'"));
$connect_stat = mssql_fetch_array(mssql_query("SELECT ConnectStat FROM MEMB_STAT WHERE memb___id = '".$CheckChar['AccountID']."' "));
if ($connect_stat['ConnectStat'] == 1) continue;

// Проверяем перса
if ($CheckChar > 0) {
$CheckVote = mssql_num_rows(mssql_query("SELECT * FROM MEMB_VOTES WHERE vote_id = '$VoteID' AND vote_time = '$VoteTime' AND vote_char = '$VoteChar' AND vote_type = '$VoteType';"));

// Тип голоса
if ($VoteType == 2) {
$RewardCoins = $MMOTOP['sms'];
}
else {
$RewardCoins = $MMOTOP['vote'];
}

// Выдача награды
if ($CheckVote <= 0) {
$Query = mssql_query("UPDATE Character SET pcpoint = pcpoint + $RewardCoins WHERE Name = '$VoteChar';
INSERT INTO MEMB_VOTES (vote_id,vote_time,vote_ip,vote_char,vote_type) VALUES ('$VoteID','$VoteTime','$VoteIP','$VoteChar','$VoteType');");
}
}
}

// Конец
echo 'OK';

Награду выдает, но всем, независимо онлайн/оффлайн.

Очень надеюсь на помощь.

Profesor08

#1
тут это проверяется
$connect_stat = mssql_fetch_array(mssql_query("SELECT ConnectStat FROM MEMB_STAT WHERE memb___id = '".$CheckChar['AccountID']."' "));
if ($connect_stat['ConnectStat'] == 1) continue;

epmak

#2
я бы поступил иначе:
создал бы табличку с голосами и с кол-вом не выданных призов и при дисконнекте (процедуре) выдавал бы. это было бы гораздо эффективнее и 500 проверок на пхп писать было б не к чему

knyazev

Цитата: Profesor08 от 2014 Нояб. 20, 17:36  тут это проверяется
$connect_stat = mssql_fetch_array(mssql_query("SELECT ConnectStat FROM MEMB_STAT WHERE memb___id = '".$CheckChar['AccountID']."' "));
if ($connect_stat['ConnectStat'] == 1) continue;
Я то знаю, и вроде всё верно, но тем не менее, в ConnectStat значение 1 у аккаунта, выполняю скрипт - а данные записываются в бд, а не должны. Вот и прошу помощи.

worope

Цитата: knyazev от 2014 Нояб. 20, 17:48  Я то знаю, и вроде всё верно, но тем не менее, в ConnectStat значение 1 у аккаунта, выполняю скрипт - а данные записываются в бд, а не должны. Вот и прошу помощи.
Посмотри на свой код
if ($connect_stat['ConnectStat'] == 1) continue;Тут написано если конектстат равен 1 то продолжить выполнение скрипта.
Так-что если хочешь чтобы при 1 скрипт не трогал акк ставь 0 =)))

epmak

Цитата: worope от 2014 Нояб. 20, 20:17  Тут написано если конектстат равен 1 то продолжить выполнение скрипта.
Так-что если хочешь чтобы при 1 скрипт не трогал акк ставь 0 =)))
уважаемый, тут написано, что если аккаунт онлайн, то переходим к новой итерации продолжая цикл, а ту, что есть, не выполняем.
просто там еще есть сверху foreach, который ТС не указал.
в этом коде коннект стат будет всегда 0.

Profesor08

#6
$CheckChar = mssql_num_rows(mssql_query("SELECT AccountID, Name FROM Character WHERE Name = '$VoteChar'"));

тут возвращается число, либо 0 либо 1.  но далее этот $CheckChar, пытаются использовать как массив. поэтому, $connect_stat['ConnectStat'] всегда будет undefined и будет кидать warning.

$result = mssql_query("SELECT AccountID, Name FROM Character WHERE Name = '$VoteChar'");
if (mssql_num_rows($result) > 0)
{

$CheckChar = mssql_fetch_array($result);

$connect_stat = mssql_fetch_array(mssql_query("SELECT ConnectStat FROM MEMB_STAT WHERE memb___id = '".$CheckChar['AccountID']."' "));

if ($connect_stat['ConnectStat'] == 1) continue;

$CheckVote = mssql_num_rows(mssql_query("SELECT * FROM MEMB_VOTES WHERE vote_id = '$VoteID' AND vote_time = '$VoteTime' AND vote_char = '$VoteChar' AND vote_type = '$VoteType';"));

if ($VoteType == 2)
{
$RewardCoins = $MMOTOP['sms'];
}
else
{
$RewardCoins = $MMOTOP['vote'];
}

if ($CheckVote <= 0)
{
$Query = mssql_query("UPDATE Character SET pcpoint = pcpoint + $RewardCoins WHERE Name = '$VoteChar'; INSERT INTO MEMB_VOTES (vote_id,vote_time,vote_ip,vote_char,vote_type) VALUES ('$VoteID','$VoteTime','$VoteIP','$VoteChar','$VoteType');");
}
}

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