Дело в том что через Сафари Аппле могут голосовать сколько угодно. Как мне это исправить?
<?php
if($_SESSION['user']['id']>0){
require_once 'voteconfig.php';
$URL = "http://wow.mmotop.ru/";
$query = "SELECT time FROM vote_cp_mmotop WHERE acc_name = '".$_SESSION['user']['username']."' ORDER BY `time` DESC";
$result = mysql_query ($query);
$m=mysql_fetch_assoc($result);
if(empty($m)) { $time=$date; $check = $votetime; }
else {
$time=$m['time']; $check = $date - $time;
}
//echo "<br>Check:";
//echo $check;
//проверить разницу времени и узнать можно ли голосовать или нельзя
if ($check >= $votetime)
{
if(empty($m))
$query = "INSERT INTO vote_cp_mmotop (`acc_name`, `ip`, `time`) VALUES ('".$_SESSION['user']['username']."', '$ip', '$date')";
else
$query = "UPDATE `vote_cp_mmotop` SET `ip`='".$ip."', `time`='".$date."' WHERE `acc_name`='".$_SESSION['user']['username']."'";
mysql_query ($query) or die(mysql_error());
echo "Спасибо, Ваш голос учтен. Сейчас Вы будете перенаправлены на сайт рейтинга.";
$query = "SELECT id FROM account WHERE username = '".$_SESSION['user']['username']."'";
$result = mysql_query ($query);
$acid = mysql_result($result,0);
$query = mysql_query("SELECT acid FROM `cp_shards` WHERE `acid` = '$acid'");
$query = mysql_num_rows($query);
if($query == 0)
{
$query = "INSERT INTO cp_shards (`acid`, `shard`) VALUES ('$acid', '$shard')";
mysql_query ($query);
}
else
{
$query = "SELECT bonuses FROM account WHERE acid = '$acid'";
$result = mysql_query ($query);
$user_shards = mysql_result($result,0);
$user_shards = $user_shards + $shard;
$query = "UPDATE account SET bonuses = bonuses + 1 WHERE id=$acid";
mysql_query ($query);
}
//далее следует функция редиректа на голосовалку топа и функция давания приза за голос
echo "<script>location.href='".$URL."'</script>";
}
else
{
echo "<br><br><br><br><br><b>Вы уже голосовали сегодня! <br>В следующий раз Вы сможете проголосовать после:<br>";
echo date("d-M-Y H:i:s", $time + $votetime);
}
}
?>
Спустя 14 минут, 7 секунд (28.10.2010 - 14:41) ИНСИ написал(а):
Xpund ты бы не мог, задачи скрипта изложить так:
1.....
2......
3.......
1.....
2......
3.......
Спустя 18 минут, 6 секунд (28.10.2010 - 14:59) Xpund написал(а):
Задачи:
1.Этот скрипт добавляет bonuses при переходе на страницу указаную в $url
2. В это время для этого юзера добавляеться сточка что он голосовал в формате unixtime.
3. Переходить по ссылку можно лишь раз в сутки
4. И бонус тоже должен защитываться только при переходе!
1.Этот скрипт добавляет bonuses при переходе на страницу указаную в $url
2. В это время для этого юзера добавляеться сточка что он голосовал в формате unixtime.
3. Переходить по ссылку можно лишь раз в сутки
4. И бонус тоже должен защитываться только при переходе!
Спустя 7 часов, 17 минут, 51 секунда (28.10.2010 - 22:17) ИНСИ написал(а):
Xpund немного странно ты сделал БД.
Итак:
1.
Итак:
1.
Цитата |
if($_SESSION['user']['id']>0){ |
странная конструкция

2.
Цитата |
SELECT time FROM vote_cp_mmotop WHERE acc_name = '".$_SESSION['user']['username']."' ORDER BY `time` DESC |
я так понял, ты в качестве того, чтобы определить пользователя, хранишь его логин? просто если он имеет возможность менять логин, то потом будет не очень

Цитата |
if(empty($m)) { $time=$date; $check = $votetime; } |
у тебя выше есть код еще? просто откуда берутся переменные $date и votetime;?
в общем... есть много всего, что можно сказать, просто я предлагаю сделать так:
1. Идет проверка на запись, нажимал ли пользователь на ссылку в течении 24 часов, то есть в запросе: WHERE `date` >= NOW() - INTERVAL 1 DAY
2. Далее, если пользователь уже нажимал, то сообщение, если нет еще, то делаю далее запросы.....
Должно получится что-то в этом роде:
if($_SESSION['user']['id']) {
// проверяем, есть ли запись пользоваля, которая была в течении последних 24 часов
$query = mysql_query("
SELECT `time`
FROM `vote_cp_mmotop`
WHERE `acc_name` = '{$_SESSION['user']['username']}' AND `time` >= NOW() - INTERVAL 1 DAY
ORDER BY `id` DESC
");
// если есть запись, то выводим сообщение, что пользователь уже голосовал
if(mysql_num_rows($query) > 0) {
echo '<br><br><br><br><br><b>Вы уже голосовали сегодня!';
} else {
// если не голосовал, то пишем в БД, что он голосовал
mysql_query("
INSERT
INTO `vote_cp_mmotop(`acc_name`,`ip`,`time`)
VALUES ('{$_SESSION['user']['username']}', '{$ip}', NOW())
");
// дальше делаешь что надо... если честно, я не понял что за запросы у тебя дальше идут. Ты давай названия таблицам и полям нормальные
}
}
Спустя 10 часов, 27 минут, 55 секунд (29.10.2010 - 08:45) Xpund написал(а):
Логин пользователи не могут менять!
Это в конфиге!
И подобную накрутку можно ток с определённого браузера сделать! Я указал с какого в первом посте!
if(empty($m)) { $time=$date; $check = $votetime; }
Это в конфиге!
И подобную накрутку можно ток с определённого браузера сделать! Я указал с какого в первом посте!
Спустя 19 минут, 37 секунд (29.10.2010 - 09:04) netruxa написал(а):
ИМХО Подобную накрутку можно совершить в любом браузере, отключив при этом куки. Нет куки - нет сессии
Спустя 39 минут, 48 секунд (29.10.2010 - 09:44) Xpund написал(а):
netruxa
Если нет сессии ты даже не увидишь страницу!
Если нет сессии ты даже не увидишь страницу!
Спустя 10 минут, 24 секунды (29.10.2010 - 09:55) ИНСИ написал(а):
Xpund а зачем тебе ограничивать пользователя в браузере?
Спустя 9 минут, 1 секунда (29.10.2010 - 10:04) Xpund написал(а):
Ну так надо)
Так должно быть?
if($_SESSION['user']['id']) {
// проверяем, есть ли запись пользоваля, которая была в течении последних 24 часов
$query = mysql_query("
SELECT `time`
FROM `vote_cp_mmotop`
WHERE `acc_name` = '{$_SESSION['user']['username']}' AND `time` >= NOW() - INTERVAL 1 DAY
ORDER BY `id` DESC
");
// если есть запись, то выводим сообщение, что пользователь уже голосовал
if(mysql_num_rows($query) > 0) {
echo '<br><br><br><br><br><b>Вы уже голосовали сегодня!';
} else {
// если не голосовал, то пишем в БД, что он голосовал
mysql_query("
INSERT
INTO `vote_cp_mmotop(`acc_name`,`ip`,`time`)
VALUES ('{$_SESSION['user']['username']}', '{$ip}', NOW())
");
$query = "SELECT id FROM account WHERE username = '".$_SESSION['user']['username']."'";
$result = mysql_query ($query);
$acid = mysql_result($result,0);
$query = mysql_query("SELECT acid FROM `cp_shards` WHERE `acid` = '$acid'");
$query = mysql_num_rows($query);
if($query == 0)
{
$query = "INSERT INTO cp_shards (`acid`, `shard`) VALUES ('$acid', '$shard')";
mysql_query ($query);
}
else
{
$query = "SELECT bonuses FROM account WHERE acid = '$acid'";
$result = mysql_query ($query);
$user_shards = mysql_result($result,0);
$user_shards = $user_shards + $shard;
$query = "UPDATE account SET bonuses = bonuses + 1 WHERE id=$acid";
mysql_query ($query);
}
//далее следует функция редиректа на голосовалку топа и функция давания приза за голос
echo "<script>location.href='".$URL."'</script>";
}
}
Так должно быть?
Спустя 9 часов, 6 минут, 50 секунд (29.10.2010 - 19:10) ИНСИ написал(а):
Xpund я не пойму, за что отвечают твои запросы, попробуй каждый этот запрос:
прокомментировать, что где и как вытаскивается
.......
Свернутый текст
$query = "SELECT id FROM account WHERE username = '".$_SESSION['user']['username']."'";
$result = mysql_query ($query);
$acid = mysql_result($result,0);
$query = mysql_query("SELECT acid FROM `cp_shards` WHERE `acid` = '$acid'");
$query = mysql_num_rows($query);
if($query == 0)
{
$query = "INSERT INTO cp_shards (`acid`, `shard`) VALUES ('$acid', '$shard')";
mysql_query ($query);
}
else
{
$query = "SELECT bonuses FROM account WHERE acid = '$acid'";
$result = mysql_query ($query);
$user_shards = mysql_result($result,0);
$user_shards = $user_shards + $shard;
$query = "UPDATE account SET bonuses = bonuses + 1 WHERE id=$acid";
mysql_query ($query);
}
прокомментировать, что где и как вытаскивается

Спустя 30 минут, 34 секунды (29.10.2010 - 19:41) Xpund написал(а):
// $acid = $_SESSION['user']['id']
$query = "SELECT id FROM account WHERE username = '".$_SESSION['user']['username']."'";
$result = mysql_query ($query);
$acid = mysql_result($result,0);
/*
Эти строки лишнее забыл убрать после модификации
$query = mysql_query("SELECT acid FROM `cp_shards` WHERE `acid` = '$acid'");
$query = mysql_num_rows($query);
if($query == 0)
{
$query = "INSERT INTO cp_shards (`acid`, `shard`) VALUES ('$acid', '$shard')";
mysql_query ($query);
}
*/
else
{
// Добавить бонус на такой то аккаунт
$query = "SELECT bonuses FROM account WHERE acid = '$acid'";
$result = mysql_query ($query);
$user_shards = mysql_result($result,0);
$user_shards = $user_shards + $shard;
$query = "UPDATE account SET bonuses = bonuses + 1 WHERE id=$acid";
mysql_query ($query);
}
Спустя 1 день, 3 часа, 5 минут, 35 секунд (30.10.2010 - 22:47) ИНСИ написал(а):
Xpund если честно, особо не понял, что именно тебе еще надо сделать, но вот код, может так:
if($_SESSION['user']['id']) {
if(strpos($_SERVER['HTTP_USER_AGENT'],'Safari') !== true) { echo 'Войдите через браузер Сафари!'; } // проверяем, открыт ли сайт через Сафари
else {
// проверяем, есть ли запись пользоваля, которая была в течении последних 24 ча сов
$query = mysql_query("
SELECT `time`
FROM `vote_cp_mmotop`
WHERE `acc_name` = '{$_SESSION['user']['username']}' AND `time` >= NOW() - INTERVAL 1 DAY
ORDER BY `id` DESC
");
// если есть запись, то выводим сообщение, что пользователь уже голосовал
if(mysql_num_rows($query) > 0) {
echo '<br><br><br><br><br><b>Вы уже голо совали сегодня!';
} else {
// если не голосовал, то пишем в БД, что он голосовал
mysql_query("
INSERT
INTO `vote_cp_mmotop(`acc_name`,`ip`,`time`)
VALUES ('{$_SESSION['user']['username']}', '{$ip}', NOW())
");
$query = mysql_query("
SELECT `bonuses`
FROM `account`
WHERE `acid` = '{$_SESSION['user']['id']}'
");
$user_shards = mysql_fetch_assoc($query);
$user_shards['bonuses'] = ++$user_shards['bonuses'];
mysql_query("
UPDATE `account`
SET `bonuses` = '{$user_shards['bonuses']}'
WHERE `id` = '{$_SESSION['user']['id']}'
");
//далее следует функция редиректа на голосовалку топа и функция давания приза за голос
echo "<script>location.href='".$URL."'</scri pt>";
}
}
}
_____________
минус, конечно, иногда полезен, но плюс мне нравиться больше :)
Женский журнал - Жена сказала раскрутить сайт любой ценой (Sorry)