[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с скриптом. Прошу помощи.
ESSE
Всем доброго дня. Собственно вот у меня мой скрипт котороый даёт бонусы игрокам сервера в игре. Так вот, когда человек ввел свой ник и нажал кнопочку "Получить Бонус", то если он нажмет обновить страницу броузера, то ему ещё раз начислится бонус. Хотя бонус должен начисляться каждые 24 часа. Вот мой скрип. Посматрите пожайлуста, что в нем не так и поправьте его если можно:

<?

if(!isset($_POST['name'])){
$l2top_id=5255; // Ваш ID в рейтинге L2Top
?>
<div align="center"><b>Здесь вы можете принять участие в акции «Бонус за голосование».<br>

Для этого необходимо:</b><br>

1. Проголосовать за наш сервер в рейтинге L2top.ru: <a href="http://l2top.ru/?voteme=<?php echo"$l2top_id";?>">
<img src="core/cont_img/l2top.png"></a><br>

2. Получить бонус. Для чего необходимо:<br>
Вписать в форму ниже ник вашего чара
(не путайте с названием аккаунта), ну и нажать кнопку smile.gif<br>
После этого вашему чару в инвентарь будет выдано поощрение
1.000.000 Миллион Аден.<br>
Чтобы получить бонус ваш ник должен быть в <a href="http://l2top.ru/?servID=<?php echo"$l2top_id"; ?>&act=info"><b>этом списке</b></a><br><br>
<?
echo '<form action="" method="post">';


echo 'Ник персонажа<br/>
<input type="text" name="name"/><br/><br/>
<input type="submit" value="Получить бонус"/>

</form></div>';


}else{

$bonus_id=57; // ID предмета-бонуса (по умолчанию Coin of Luck)
$cols_for_vote=100000; // Колличество зачисляемых вещей за одно голосование
$id_l2top=5255; // Ваш ID в рейтинге L2Top

$host='91.124.216.50'; // сервер на котором установлена база данных L2J
$user='xxxxx'; // имя пользователя от базы данный
$pass='xxxxxxxxxx'; // пароль пользователя от базы данный
$db='BD'; // название базы данных

$mc = mysql_connect($host, $user, $pass);
if($mc){
$db = mysql_select_db ($db);
}

if(!$mc || !$db){

echo 'Нет соединения с базой данных.';

exit;

}

$name=mysql_escape_string($_POST['name']);

$ch=mysql_query("SELECT charId FROM characters WHERE char_name = '$name';");
$chd=mysql_fetch_assoc($ch);

$char_id=$chd['charId'];
$total=0;
$your_ip = $_SERVER['REMOTE_ADDR'];
$dip=explode('.',$your_ip);
$your_ip1 = $dip[0].'.'.$dip[1].'.'.$dip[2].'.xxx';

$html = @file_get_contents('http://l2top.ru/?servID='.$id_l2top.'&act=info');
if (!$html || !preg_match_all('/<td>([^<]+)<\/td>/', $html, $matches))
$error .= '<div align=center>Не удалось получить информацию с L2Top.ru!<br/></div>';
else
{
foreach ($matches[1] as $id => $nick)
{
if (strtolower(trim($nick))==strtolower(trim($name))) {
$voters[] = $matches[1][$id-2];
}
}
if ($voters != array())
{
foreach ($voters as $time)
{
$result = mysql_query("SELECT * FROM `l2top` WHERE `nick` = '".mysql_escape_string($name)."' AND `time` = '".mysql_escape_string($time)."'");
$row = mysql_fetch_assoc($result);
if ($row == array())
{
$result = mysql_query("SELECT * FROM `items` WHERE `owner_id` = ".mysql_escape_string($char_id)." AND `item_id` = 57");
$row = mysql_fetch_assoc($result);
if ($row == array())
{
$result = mysql_query("SELECT MAX(`object_id`)+1 AS `id` FROM `items`");
$row = mysql_fetch_assoc($result);
$ins_id = $row['id'];
$kk=mysql_query("INSERT INTO items (owner_id, object_id, item_id, count, enchant_level, loc, loc_data, time_of_use, custom_type1, custom_type2, mana_left, attributes) VALUES('".mysql_escape_string($char_id)."', '$ins_id', '$bonus_id', '$cols_for_vote', '0', 'INVENTORY', '0', NULL, '0', '0', '-1', 'none')") or die("FUCK");
}
else
mysql_query("UPDATE `items` SET `count` = `count` + ".$cols_for_vote." WHERE `owner_id` = ".mysql_escape_string($char_id)." AND `item_id` = 57");
mysql_query("INSERT INTO `l2top` (`nick`, `ip`, `time`) VALUES ('".$name."', '".mysql_escape_string($your_ip1)."', '".mysql_escape_string($time)."')");
$total += $cols_for_vote;
$error .= '<div align=center>Голос за '. $time.' зачислен.<br/></div>';
}
else
$error .= '<div align=center>Голос за '. $time.' уже был зачислен.<br/></div>';
}
}
else
$error .= '<div align=center>Ваш голос на сайте L2Top.ru не найден.<br></div>';
}

echo $error.'<div align=center><br><b>'.$total.'</b> Аден зачислено вашему персонажу!<br/></div>';

}

?>
[color=crimson][/color]



Спустя 2 часа, 10 минут, 47 секунд (20.03.2009 - 12:45) waldicom написал(а):
Хавести дополнительное поле, в котором сохранять дату получения последнего бонуса

Спустя 22 часа, 5 минут, 47 секунд (21.03.2009 - 10:51) olgatcpip написал(а):
тут и срипт смотреть не надо, правду говорят, запминай дату, когда ты бонусы давал.

Спустя 1 час, 51 минута, 44 секунды (21.03.2009 - 12:43) sergeiss написал(а):
В дополнение к тому, что надо запоминать дату (без этого никак не обойдешься), еще надо сделать еще одно дополнительное действие.
После выбора "получить бонус" человек через header должен сначала перейти на вспомогательную страницу с текстом типа "Спасибо, вы получили бонус", после чего вернуться на нужную страницу. Тогда все параметры будут сброшены, и простое обновление страницы в браузере не приведет к повторному вводу.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.