Система за гласуване.

Javafet

Registered
Здравейте.
Искам да направя така че след като някои е гласувал за даден пост да не може отново да гласува за него.Опитвах разни неща но нищо не помогна.Виждам че тук сте се събрали знаещи и компетентни хора надявам се да ми помогнете.Ето кода:

PHP:
include("include/config.php");
include("include/functions/import.php");

$love = cleanit($_REQUEST['l']);
$unlove = cleanit($_REQUEST['u']);
$pid = cleanit($_REQUEST['pid']);
$SID = intval($_SESSION['USERID']);
if(($SID > 0) && ($pid > 0))
{
	if($love == "1")
	{
		$query="INSERT INTO posts_favorited SET PID='".mysql_real_escape_string($pid)."', USERID='".mysql_real_escape_string($SID)."'";
		$result=$conn->execute($query);
		$query="UPDATE posts SET favclicks=favclicks+1 WHERE PID='".mysql_real_escape_string($pid)."'";
		$result=$conn->execute($query);
		$query="DELETE FROM posts_unfavorited WHERE PID='".mysql_real_escape_string($pid)."' AND USERID='".mysql_real_escape_string($SID)."'";
		$result=$conn->execute($query);
	}
	elseif($love == "-1")
	{
		$query="DELETE FROM posts_favorited WHERE PID='".mysql_real_escape_string($pid)."' AND USERID='".mysql_real_escape_string($SID)."'";
		$result=$conn->execute($query);
	}
	if($unlove == "1")
	{
		$query="INSERT INTO posts_unfavorited SET PID='".mysql_real_escape_string($pid)."', USERID='".mysql_real_escape_string($SID)."'";
		$result=$conn->execute($query);
		$query="UPDATE posts SET unfavclicks=unfavclicks+1 WHERE PID='".mysql_real_escape_string($pid)."'";
		$result=$conn->execute($query);
		$query="DELETE FROM posts_favorited WHERE PID='".mysql_real_escape_string($pid)."' AND USERID='".mysql_real_escape_string($SID)."'";
		$result=$conn->execute($query);
	}
	elseif($unlove == "-1")
	{
		$query="DELETE FROM posts_unfavorited WHERE PID='".mysql_real_escape_string($pid)."' AND USERID='".mysql_real_escape_string($SID)."'";
		$result=$conn->execute($query);
	}
	$query="SELECT favclicks, unfavclicks FROM posts WHERE PID='".mysql_real_escape_string($pid)."'";
    $executequery=$conn->execute($query);
    $favclicks = $executequery->fields['favclicks'];
	$unfavclicks = $executequery->fields['unfavclicks'];
	$myes = $config['myes'];
	$mno = $config['mno'];
	if($favclicks >= $myes)
	{
		$query="UPDATE posts SET phase='1' WHERE PID='".mysql_real_escape_string($pid)."' AND phase='0'";
		$result=$conn->execute($query);
	}
	elseif($unfavclicks >= $mno)
	{
		delete_post($pid);
	}
		
	$query="SELECT count(*) as total FROM posts_favorited WHERE PID='".mysql_real_escape_string($pid)."'";
	$executequery=$conn->execute($query);
	$total = $executequery->fields[total];
	echo intval($total);
}
 
Става така. Потребителя клика на бутон взимаш му IPадреса съсдал си предварително в базата едно поле IP и сравняваш, IP адреса на потребителя дали е фигурира в полето, ако не е == на IP от полето то записваш точката и IP адреса в базата. Така ако се опита абоната от същото IP да гласува при сравнението ще подаде че има такова IP в базата и извеждаш else вече е гласувано.
 
А няма ли някакъв автоматичен начин това да стане като на примерно кото системата в vbox7 нещо такова искам да направя.
 
Хубаво би било и бисквитка да записваш, защото при рестарт на рутера - той отново ще може да гласува, разбира се остава това, че при смяна на браузера пак може да гласува и също така ако си изтрии бисквитките, но пък това не се влиае от IP - то.



--------

А пък IP - да го взимаш с $_SERVER['HTTP_X_FORWARDED_FOR'] е по-добрият вариянт, все пак така ще изключиш малка част от възможностите хората да вотват на воля през проксита.

Ето един линк с информация за взимане на реалното IP на потребителя:
http://roshanbh.com.np/2007/12/getting-real-ip-address-in-php.html


---------

Също така може да направиш, само регистрирани потребители да могът да гласуват на постовете. Така няма да ти се налага да правиш такива проверки (за бисквитки и IP - та).
Защото вече ще си контролираш всичко с базата данни, ако даден акаунт вече е вотнал за този пост, във базата данни в някое поле ще му се запише, че той е вотнал на пост с ID "някое си". И вече при проверката с PHP, ако този потребител е вотнал вече, той да не може да гласува за други постове.
 
Благодаря за помощта но сега забелязах че когато се гласува потребителя може да си махне гласа и пак да гласува и това отново се брои за нов глас.Как мога да огранича потребителя като гласува за някои пост бутона да замръзне и да не може да гласува пак за него ?Много ще сам благодарен ако някои ми помогне че тъка се мача цяла седмица и нищо.
 

Back
Горе