[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Скрипт голосования
zuher
Ломаю голову уже четыре дня, впринципе от того с чего начал не осталось практически ничего )))
Смысл обработчика в следующем, ловим айпишник, сверяемся с БД, если НЕ находим запись содержащую айпишник+ид_материала+реальное время голосования , то соответственно делаем запись в БД, попутно удаляя старые записи из базы, если находим соответствующую запись, значит пошёл в жопу-заходи позже
Заморочка в том, что скрипт голосует не заморачиваясь ))) ну и соответственно айпишники в базу не пишет. Кладу код на общее обозрение, прошу потыкать носом и научить засранца, где я не прав ))))

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?

Спустя 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 у нас условие

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 может кто меня подправит, буду не против, но я понимаю так - твой запрос проходит быстрее. Заключая в фигурные скобки переменные, ты говоришь что это переменная.

Спустя 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 biggrin.gif biggrin.gif
не работает
обнулил весь рейтинг и так же исправно голосует-обнуляет )))

Спустя 2 часа, 38 минут, 13 секунд (5.11.2010 - 16:13) ИНСИ написал(а):
zuher уже смешно, я этот же код у себя запустил, все нормально работает. В БД сделай следующее:

Таблица: 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

Голосовалка исправно голосует невзирая на все проверки )))

<?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('Спасибо! Ваш голос учтен!');
}
}
}
?>



Дописываю к посту :


Сейчас попробовал побаловаться случилось следующее, видимо прошло две минуты пока я добавлял пост, при нажатии "добавить голос" он мне отписался, что вы уже голосовали ))) потом видимо обнулил записи и пошла голосовалка без ограничений дальше ))) по ходу дела где то хромает логика
Быстрый ответ:

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