Смысл обработчика в следующем, ловим айпишник, сверяемся с БД, если НЕ находим запись содержащую айпишник+ид_материала+реальное время голосования , то соответственно делаем запись в БД, попутно удаляя старые записи из базы, если находим соответствующую запись, значит пошёл в жопу-заходи позже
Заморочка в том, что скрипт голосует не заморачиваясь ))) ну и соответственно айпишники в базу не пишет. Кладу код на общее обозрение, прошу потыкать носом и научить засранца, где я не прав ))))
P/S/ тут конечно же не весь файл, обработчики переменных подключения к базе и остальная типовая шелуха осталась за кадром )))
$ip= $_SERVER["REMOTE_ADDR"];
if ($ip>0)
{
$isip = "SELECT * FROM votes WHERE ip='$ip' AND date > now() - interval '2' minute AND id_trk = '$id'";
$ipresult=mysql_query($isip);
$delip = "DELETE FROM votes WHERE date < now() - interval '2' minute AND id_trk='$id'";
$ipresult=mysql_query($delip);
if ($ipresult)
{
if (mysql_num_rows($ipresult)<1)
{
$gogo = mysql_query("SELECT golos, q_vote FROM downloadtreck WHERE id='$id'",$db);
if (!$gogo ) {echo "<p>Не вышло<br> <strong>Код ошибки:</strong></p>";exit(mysql_error()); }
if (mysql_num_rows($gogo) > 0)
{
$byby = mysql_fetch_array($gogo);
$newgolos = $byby['golos'] + $score;
$new_q_vote = $byby['q_vote'] + 1;
$plus=mysql_query("UPDATE downloadtreck SET golos='$newgolos', q_vote='$new_q_vote' WHERE id='$id'",$db);
$updatevotes=mysql_query("INSERT INTO votes (ip, date, id_trk)VALUES('$ip', now (), '$id')",$db);
echo "<html><head><meta http-equiv='Refresh' content='5; URL=view_track.php?id=$id'>
</head><body><h1 align=center>Ща запишем!!!</h1></body></html>";
}
} else{
echo "<html><head><meta http-equiv='Refresh' content='3; URL=view_track.php?id=$id'></head><body>
<h1 align=center>За этот трек уже голосовали с данного айпишника,<br>
Попробуй через пару минут ещё разок</h1></body></html>";
exit();
}
}
} else{
echo "<html><head><meta http-equiv='Refresh' content='3; URL=view_track.php?id=$id'></head><body>
<h1 align=center>Что то пошло не так<br>У сервера снесло крышу<br>
Попробуй завтра ещё разок</h1></body></html>";
exit();
}
Спустя 36 минут, 36 секунд (3.11.2010 - 16:03) aH6y написал(а):
zuher
Не добавляет только ip?
Не добавляет только ip?
Спустя 42 минуты, 54 секунды (3.11.2010 - 16:46) zuher написал(а):
Не делает запись в таблицу с айпишниками вообще никакую, и исправно голосует нисмотря на фильтр )))
Спустя 4 часа, 17 минут, 2 секунды (3.11.2010 - 21:03) ИНСИ написал(а):
zuher попробуй так:
$ip = $_SERVER["REMOTE_ADDR"];
if($ip > 0) {
$gogo = mysql_query("
SELECT `golos`,`q_vote`
FROM `downloadtreck`
WHERE `id` = '{$id}'
");
if(mysql_num_rows($gogo) < 1) {
exit('Трек не найден в Базе!');
} else {
$isip = mysql_query("
SELECT *
FROM `votes`
WHERE `ip` = '{$ip}' AND `date` <= NOW - INTERVAL 2 MINUTE AND `id_trk` = '{$id}'
");
mysql_query("
DELETE
FROM `votes`
WHERE `date` <= NOW - INTERVAL 2 MINUTE AND `id_trk` = '{$id}'
");
if(mysql_num_rows($isip) > 0) {
exit('Вы уже голосовали. Попробуйте через несколько минут.');
} else {
mysql_query("
INSERT
INTO `votes`(`ip`,`date`,`id_trk`)
VALUES('{$ip}',NOW(),'{$id}')
");
mysql_query("
UPDATE `downloadtreck`
SET `golos` = '{$newgolos}', `q_vote` = '{$new_q_vote}'
WHERE `id` = '{$id}'
");
exit('Спасибо! Ваш голос учтен!');
}
}
}
Спустя 4 часа, 17 минут, 36 секунд (4.11.2010 - 01:21) zuher написал(а):
welbox2, дружище )))) попробовал )))
Эта скотина все равно исправно голосует за трек только теперь выдает ошибку
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in X:\home\nefsu.zu\www\vote_res.php on line 43
Спасибо! Ваш голос учтен!
вот как то так )))
в line 43 у нас условие
извини разбирать код был просто не в состоянии ))) только что приехали с концерта Шклярского "Пикник" посему голова затуманена, анализировать буду пытаться с утречка пораньше, просто тупо воткнул твой код, а бы чё выйдет )))
К сожалению не вышло ))))
Но за посильную спасибо все равно ))) Завтра отпишу свою мозгомысль - сегодня уже не в форме )))
Эта скотина все равно исправно голосует за трек только теперь выдает ошибку
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in X:\home\nefsu.zu\www\vote_res.php on line 43
Спасибо! Ваш голос учтен!
вот как то так )))
в line 43 у нас условие
if(mysql_num_rows($isip) > 0) {
exit('Вы уже голосовали. Попробуйте через несколько минут.');
} else {
mysql_query("
INSERT
INTO `votes`(`ip`,`date`,`id_trk`)
VALUES('{$ip}',NOW(),'{$id}')
");
извини разбирать код был просто не в состоянии ))) только что приехали с концерта Шклярского "Пикник" посему голова затуманена, анализировать буду пытаться с утречка пораньше, просто тупо воткнул твой код, а бы чё выйдет )))
К сожалению не вышло ))))
Но за посильную спасибо все равно ))) Завтра отпишу свою мозгомысль - сегодня уже не в форме )))
Спустя 4 минуты, 35 секунд (4.11.2010 - 01:25) Игорь_Vasinsky написал(а):
Цитата |
'{$new_q_vote}' |
а чё половина (писуемых в БД) переменных в {} - ????
это для красоты да?
Спустя 3 минуты, 46 секунд (4.11.2010 - 01:29) Игорь_Vasinsky написал(а):
Цитата |
("SELECT golos, q_vote FROM downloadtreck WHERE id='$id'",$db); |
стесняюсь спросить...а $db - это у вас что?
Спустя 9 минут, 29 секунд (4.11.2010 - 01:39) ИНСИ написал(а):
zuher у тебя в phpMyadmin тип поля date = TIMESTAMP или DATETIME?
Игорь_Vasinsky может кто меня подправит, буду не против, но я понимаю так - твой запрос проходит быстрее. Заключая в фигурные скобки переменные, ты говоришь что это переменная.
Игорь_Vasinsky может кто меня подправит, буду не против, но я понимаю так - твой запрос проходит быстрее. Заключая в фигурные скобки переменные, ты говоришь что это переменная.
Спустя 3 минуты, 12 секунд (4.11.2010 - 01:42) Игорь_Vasinsky написал(а):
я про такую комбинацию не слышал........
Спустя 8 минут, 30 секунд (4.11.2010 - 01:50) ИНСИ написал(а):
Игорь_Vasinsky подумал и решил написать еще немного:
Для того, чтобы указать интерпретатору где есть переменные, надо использовать фигурные скобки. Писать запросы таким образом, это гораздо повышает их читабельность, и по скорости тоже выше чем конкатенация.
Для того, чтобы указать интерпретатору где есть переменные, надо использовать фигурные скобки. Писать запросы таким образом, это гораздо повышает их читабельность, и по скорости тоже выше чем конкатенация.
Спустя 2 минуты, 49 секунд (4.11.2010 - 01:53) Игорь_Vasinsky написал(а):
пон... я намотаю на ус.. спс
Спустя 13 часов, 56 минут, 14 секунд (4.11.2010 - 15:49) zuher написал(а):
Цитата (welbox2 @ 3.11.2010 - 22:39) |
zuher у тебя в phpMyadmin тип поля date = TIMESTAMP или DATETIME? |
DATETIME - однозначно )))
Может я просто пошёл не тем путём и есть решение проще ????
Спустя 8 минут, 3 секунды (4.11.2010 - 15:57) ИНСИ написал(а):
скинь мне БД, я тебе в личку скинул мою почту.
Спустя 6 часов, 29 минут, 17 секунд (4.11.2010 - 22:27) zuher написал(а):
отправил )))
Спустя 23 минуты, 57 секунд (4.11.2010 - 22:51) ИНСИ написал(а):
zuher вот, все работает:
$ip = $_SERVER["REMOTE_ADDR"];
if($ip > 0) {
$gogo = mysql_query("
SELECT `golos`,`q_vote`
FROM `downloadtreck`
WHERE `id` = '{$id}'
LIMIT 1
");
if(mysql_num_rows($gogo) < 1) {
exit('Трек не найден в Базе!');
} else {
$chechIp = mysql_query("
SELECT *
FROM `votes`
WHERE `ip` = '{$ip}' AND `id_trk` = '{$id}' AND `date` <= NOW() - INTERVAL 2 MINUTE
");
mysql_query("
DELETE
FROM `votes`
WHERE `date` <= NOW() - INTERVAL 2 MINUTE AND `id_trk` = '{$id}'
");
if(mysql_num_rows($chechIp) > 0) {
exit('Вы уже голосовали. Попробуйте через несколько минут.');
} else {
mysql_query("
INSERT
INTO `votes`(`ip`,`date`,`id_trk`)
VALUES('{$ip}',NOW(),'{$id}')
");
mysql_query("
UPDATE `downloadtreck`
SET `golos` = '{$newgolos}', `q_vote` = '{$new_q_vote}'
WHERE `id` = '{$id}'
");
exit('Спасибо! Ваш голос учтен!');
}
}
}
Спустя 14 часов, 44 минуты, 32 секунды (5.11.2010 - 13:35) zuher написал(а):
![biggrin.gif](http://phpforum.ru/html/emoticons/biggrin.gif)
![biggrin.gif](http://phpforum.ru/html/emoticons/biggrin.gif)
![biggrin.gif](http://phpforum.ru/html/emoticons/biggrin.gif)
не работает
обнулил весь рейтинг и так же исправно голосует-обнуляет )))
Спустя 2 часа, 38 минут, 13 секунд (5.11.2010 - 16:13) ИНСИ написал(а):
zuher уже смешно, я этот же код у себя запустил, все нормально работает. В БД сделай следующее:
Таблица: votes:
1. ip - тип varchar 70
2. id_trk - тип mediumint 7
3. date - datetime
Если не получится, сделай так, и покажи мне, что появится:
Таблица: votes:
1. ip - тип varchar 70
2. id_trk - тип mediumint 7
3. date - datetime
Если не получится, сделай так, и покажи мне, что появится:
die("
SELECT *
FROM `votes`
WHERE `ip` = '{$ip}' AND `id_trk` = '{$id}' AND `date` <= NOW() - INTERVAL 2 MINUTE
");
Спустя 8 дней, 22 часа, 56 минут, 23 секунды (14.11.2010 - 15:10) zuher написал(а):
Теперь он наоборот пишет, что уже был голос и посылает в задницу ))) Чудеса какие то творятся )))
Спустя 3 дня, 20 часов, 39 минут, 53 секунды (18.11.2010 - 11:50) zuher написал(а):
Понял почему не пахало, не было значения переменных....
Подставил переменные, голосовалка началась без ограничений, что то все таки не так. Прилагаю то, что в данный момент присутствует, я туда добавил только значения переменных $newgolos и $newqvote
Голосовалка исправно голосует невзирая на все проверки )))
Дописываю к посту :
Сейчас попробовал побаловаться случилось следующее, видимо прошло две минуты пока я добавлял пост, при нажатии "добавить голос" он мне отписался, что вы уже голосовали ))) потом видимо обнулил записи и пошла голосовалка без ограничений дальше ))) по ходу дела где то хромает логика
Подставил переменные, голосовалка началась без ограничений, что то все таки не так. Прилагаю то, что в данный момент присутствует, я туда добавил только значения переменных $newgolos и $newqvote
Голосовалка исправно голосует невзирая на все проверки )))
<?php
include ("подключаем базу");
if (isset($_POST['score'])){
$score = $_POST['score'];
}
if (isset($_POST['id'])){
$id = $_POST['id'];
}
if (!preg_match("|^[\d]+$|", $id)) {
exit ("<p>Неверный формат запроса! Проверьте URL!");
}
if (!preg_match("|^[\d]+$|", $score)) {
exit ("<p>Неверный формат запроса! Проверьте URL!");
}
$ip = $_SERVER["REMOTE_ADDR"];
if($ip > 0) {
$gogo = mysql_query("
SELECT `golos`,`q_vote`
FROM `downloadtreck`
WHERE `id` = '{$id}'
LIMIT 1
");
$myrow = mysql_fetch_array($gogo);///вот тут добавил к коду welbox2
$newgolos=$myrow['golos']+$score;///вот тут добавил к коду welbox2
$newqvote=$myrow['q_vote']+1;///вот тут добавил к коду welbox2
if(mysql_num_rows($gogo) < 1) {
exit('Трек не найден в Базе!');
} else {
$chechIp = mysql_query("
SELECT *
FROM `votes`
WHERE `ip` = '{$ip}' AND `id_trk` = '{$id}' AND `date` <= NOW() - INTERVAL 2 MINUTE
");
mysql_query("
DELETE
FROM `votes`
WHERE `date` <= NOW() - INTERVAL 2 MINUTE AND `id_trk` = '{$id}'
");
if(mysql_num_rows($chechIp) > 0) {
exit('Вы уже голосовали. Попробуйте через несколько минут.');
} else {
mysql_query("
INSERT
INTO `votes`(`ip`,`date`,`id_trk`)
VALUES('{$ip}',NOW(),'{$id}')
");
mysql_query("
UPDATE `downloadtreck`
SET `golos` = '{$newgolos}', `q_vote` = '{$newqvote}'
WHERE `id` = '{$id}'
");
exit('Спасибо! Ваш голос учтен!');
}
}
} ?>
Дописываю к посту :
Сейчас попробовал побаловаться случилось следующее, видимо прошло две минуты пока я добавлял пост, при нажатии "добавить голос" он мне отписался, что вы уже голосовали ))) потом видимо обнулил записи и пошла голосовалка без ограничений дальше ))) по ходу дела где то хромает логика